[MYSQL] Восстановление данных из rm -rf mysql

Помните первый шаг !!! Помните !!! Помните !!!! Не спешите бежать

    Поддерживая состояние на месте, вы не можете перезагрузить компьютер, а также вы не можете закрыть запущенный процесс mysql, если вы закроете его, вы не сможете восстановить данные;

Это потому, что: файл на самом деле является ссылкой на индекс. Ссылка на индекс содержит все атрибуты файла, такие как разрешения и владелец, адрес блока данных (файл хранится в этих блоках данных на диске). При удалении (rm) Файл, который фактически удаляет ссылку на индекс, не удаляет содержимое индекса. Процесс может все еще использоваться. Только после полного удаления всех ссылок на индекс эти блоки данных смогут записывать новые данные.

· Файловая система proc может помочь нам восстановить данные.Каждый процесс в системе имеет каталог и свое собственное имя в / proc, которое содержит подкаталог fd (дескриптор файла) (процессы должны открывать все ссылки на файлы). Если вы удаляете файл из файловой системы, есть также ссылка на inode:

Второй шаг - получить PID удаленного файла.

1. Первый метод lsof

(См. Https://blog.csdn.net/zonghua521/article/details/78200239 )

Когда процесс открывает файл, пока он сохраняет файл открытым, даже если он удален, он все еще существует на диске . Это означает, что процесс не знает, что файл был удален, и он все еще может читать и записывать в дескриптор файла, предоставленный ему при открытии файла. За исключением этого процесса, этот файл не виден, поскольку его соответствующий узел индекса каталога был удален.

В каталоге / proc он содержит различные файлы, которые отражают ядро ​​и дерево процессов. Каталог / proc устанавливает область, отображаемую в памяти, поэтому эти файлы и каталоги не существуют на диске, поэтому, когда мы читаем и пишем эти файлы, мы фактически получаем их из памяти Связанная информация.

Большая часть информации, относящейся к lsof, хранится в каталоге, названном в честь PID процесса, то есть информация о процессе с PID 1234 содержится в / proc / 1234. В каждом каталоге процесса находятся различные файлы, которые могут помочь приложению просто понять объем памяти процесса, список файловых дескрипторов, символические ссылки на файлы на диске и другую системную информацию.

Программа lsof использует эту информацию и другую информацию о внутреннем состоянии ядра для генерации его вывода. Таким образом, lsof может отображать такую ​​информацию, как дескрипторы файлов процесса и связанные имена файлов. То есть мы можем найти соответствующую информацию о файле, обратившись к файловому дескриптору процесса.

Пример 1

Процесс запущен, тогда я удалю файл / var / log / messages

shell> rm / var / log / messages

После удаления я посмотрю на изменения в этом процессе

shell> lsof | grep / var / log / messages

rsyslogd 1737 root 1w REG 8,2 5716123 652638 / var / log / messages (удалено)

Все видят, что есть изменение, после сравнения двух оно оказывается больше (удалено). Чтобы найти этот файл, посмотрите на этот

2. Второй метод ps -aux | grep XXX (я использую)

    После понимания принципа метода 1 на самом деле конечной целью является получение PID, чтобы вы могли поменяться идеями.

    Поскольку известно, что все файлы mysql удалены, вы можете напрямую использовать ps -aux | grep mysql для просмотра идентификатора процесса, который все еще используется

3. Третий метод использует extundelete

(Ссылка) https://blog.csdn.net/zxc_user/article/details/82025475

Этот метод может только восстановить файловую систему типа ext3 или ext4, иначе он не может быть восстановлен

(Примечание: мой сервер баз данных использует SSD, и все они не были выполнены в процессе восстановления. Предполагается, что можно восстановить только данные механического жесткого диска и подключить дополнительный диск. Поэтому я отказался от этого метода и использовал второй, который исправлен здесь Нет предисловия, вы можете Baidu)

Третий шаг - записать данные в резервную папку.

     Используйте команду для ввода каталога, названного в честь PID процесса

     cd / proc / (PID, полученный на втором этапе) / fd

 

     В это время вы можете видеть статус удаленного файла rm.

     Узнайте номер файла, который необходимо восстановить

     Например, 2 на скриншоте

     cat 2> / recovery / pts / 1 Цель этого оператора - переписать файл, все еще находящийся в памяти, в определенное место.

 

     Когда я выполнил резервное копирование всех файлов базы данных в / mysql / data /, я почувствовал облегчение. На данный момент у нас еще есть 40% работы, которую необходимо выполнить до полного восстановления данных.

Экспортируйте резервный файл .ibd с сервера на локальный и восстановите данные mysql в собственной тестовой среде.

 

Четвертый шаг восстановления данных

1. Установите ту же структуру базы данных и таблицы, что и онлайн, в тестовой среде.

2. Удалите файл .ibd из / mysql / data / database / связанных таблиц.

     изменить таблицу { база данных }. { таблица } отбросить табличное пространство;

 

3. Скопируйте резервную копию .ibd в папку базы данных.

      cp / recovery / * / mysql / data / { имя базы данных } /

     Если MySQL использует права пользователя, требуется авторизация

      chown -R {пользователь}. / mysql / data /

4. Введите mysql для импорта данных

     изменить таблицу { база данных }. { таблица } импортировать табличное пространство;

 

    На этом этапе следует отметить, что каждый оператор может быть выполнен только один раз, то есть, если вы выполняете одно предложение, вы должны выйти из mysql, снова ввести mysql, чтобы выполнить второе предложение, и так далее.

Наконец, вы можете увидеть, что данные были восстановлены, просмотрев таблицу. Экспортируйте восстановленную базу данных в это время в файл sql и выполните восстановление в режиме онлайн.

 

Данные бесценны, подумайте дважды! ! Больше передачи знаний. Еще меньше программиста. , , , ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Опубликовано 1 оригинальная статья · Хвала 7 · Посещений 259

рекомендация

отblog.csdn.net/mo18850223090/article/details/105646561
рекомендация