Назад | Перейти на главную страницу

InnoDB больше не доступен

Недавно сменил серверы и перешел с CentOS 5.8 на CentOS 6.4. Я установил MySQL 5.1.69 на свой новый сервер и вручную заменил / var / lib / mysql. Я не уверен, какая версия MySQL была на моем старом сервере, но ожидаю, что она будет такой же.

Когда я пытаюсь запросить таблицу, я получаю следующее:

ERROR 1286 (42000): Unknown table engine 'InnoDB'

Таблицы, которые не используют InnoDB, работают нормально. Похоже, у меня не загружен InnoDB. Я установил MySQL, используя yum install mysql mysql-server. Почему InnoDB не загружается и как мне его загрузить?

РЕДАКТИРОВАТЬ:

Может мне стоит вручную изменить ib_logfile0, чтобы размер файла был таким же?

mysql> SHOW ENGINES;
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                   | Transactions | XA   | Savepoints |
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                     | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                        | NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance    | NO           | NO   | NO         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables | NO           | NO   | NO         |
+------------+---------+-----------------------------------------------------------+--------------+------+------------+
4 rows in set (0.00 sec)

mysql>

/var/log/mysqld.log:

130622 17:05:19 [Note] /usr/libexec/mysqld: Shutdown complete

130622 17:05:19 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
130622 17:06:09 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
130622 17:06:09  InnoDB: Initializing buffer pool, size = 8.0M
130622 17:06:09  InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
130622 17:06:09 [ERROR] Plugin 'InnoDB' init function returned error.
130622 17:06:09 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130622 17:06:09 [Note] Event Scheduler: Loaded 0 events
130622 17:06:09 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.69'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution

Кажется как это хороший ответ. Что в основном гласит, что вы должны удалить / перестроить ib_logfile0 сами. Просто переместите файл в безопасное место, а не в каталог MySQL, который его ищет, и перезапустите сервер.

Предостережение: действительно ли у вас есть БД, требующие InnoDB? Если это так, вы можете вручную выполнить mydump каждой БД, чтобы получить резервную копию, затем удалить БД из базы данных MySQL, выключить MySQL, переместить / удалить ib_logfile0—Я также предлагаю переместить / удалить ibdata1 и ib_logfile1 а также - и просто перезапуск MySQL.

Затем проверьте свои журналы, чтобы узнать, запустился ли InnoDB. Бьюсь об заклад, так и будет. На этом этапе воссоздайте БД, от которых вы избавились, и повторно импортируете данные. Новый ibdata1, ib_logfile0 и ib_logfile1 файлы будут созданы, и все должно быть хорошо.

Вы скопировали файл ib_logfile0 со старого сервера? Если это так, попробуйте переместить его из этого каталога (или переименовать) и перезапустите mysqld.