В этой статье объясняется, как восстанавливать таблицы MySQL при утрате всех или некоторых таблиц или когда MySQL не загружает данные таблицы.
Одна из причин этого — когда данные таблицы повреждены.
В этом конкретном случае, когда вы подключаетесь к серверу базы данных MySQL, вы не видите других таблиц, поскольку они отсутствуют.
В этом сценарии в файле журнала MySQL содержались следующие сообщения:
InnoDB: Error: log file ./ib_logfile0 is of different size 0 46447478 bytes InnoDB: than specified in the .cnf file 0 5242880 bytes! [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. [ERROR] Unknown/unsupported storage engine: InnoDB [ERROR] Aborting
Метод, описанный ниже, будет работать только для базы данных InnoDB.
Чтобы восстановить данные таблицы, убедитесь, что каталог данных и его содержимое не повреждены. В моем случае это было хорошо.
drwx------ 2 mysql mysql 4096 Oct 14 2017 performance_schema drwx------ 2 mysql mysql 4096 Dec 12 2017 ndbinfo drwx--x--x 2 mysql mysql 4096 Dec 12 2017 mysql -rw-rw---- 1 mysql mysql 56 Dec 15 2017 auto.cnf drwx------ 2 mysql mysql 4096 Jul 02 2018 bugs -rw-r----- 1 mysql mysql 46447478 Mar 24 12:22 ib_logfile0 -rw-r----- 1 mysql mysql 46447478 Apr 07 2018 ib_logfile1 -rw-r----- 1 mysql mysql 37954786 Mar 12 12:22 ibdata1 ..
Чтобы восстановить данные из вышеуказанных файлов, сначала остановите сервер MySQL.
# service mysqld stop
Скопируйте файлы ibdata и папку схемы базы данных в другой каталог. Мы будем использовать это для восстановления нашей базы данных MySQL. В этом случае мы скопируем его в каталог /tmp. Имя схемы базы данных в этом примере — это ошибки.
cp –r ibdata* ib_logfile* /tmp cp –r schema_name/ /tmp/schema_name/
Запустите сервер MySQL:
# service mysqld start
В соответствующей заметке для типичной резервной копии и восстановления базы данных MySQL вы должны использовать команду mysqldump.
Затем восстановите данные таблицы, как описано ниже.
В файле конфигурации my.cnf установите значение следующего параметра в текущий размер файла ib_logfile0. В следующем примере я установил его на 48M, так как это размер, который мы видим для файла ib_logfile0, когда делали «ls -lh ib_logfile0»,
innodb_log_file_size=48M
Обратите внимание, что размер файла ib_logfile0 и ib_logfile1 будет таким же.
Скопируйте предыдущие файлы ibdata в соответствующую позицию, в каталог данных mysql.
cp –r /tmp/ibdata* /var/lib/mysql/
Создайте пустую папку внутри каталога данных с тем же именем, что и имя схемы базы данных, которое вы пытаетесь восстановить, и скопируйте предыдущие файлы .frm внутри этой папки, как показано ниже:
cp –r /tmp/ib_logfile* /var/lib/mysql/ cp –r /tmp/schema_name/*.frm /var/lib/mysql/schema_name/
Наконец, перезапустите сервер MySQL.
service mysqld restart
Теперь у вас есть сервер MySQL, работающий с восстановленными таблицами. Не забудьте предоставить соответствующие привилегии клиентам для подключения к базе данных MySQL.