最近更换了服务器,从 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
答案1
似乎像这样是一个很好的答案。这基本上表明您应该自己删除/重建ib_logfile0
。只需将文件移动到安全的地方(而不是正在查找它的 MySQL 目录中),然后重新启动服务器。
需要注意的是:您确实有需要 InnoDB 的数据库吗?如果是,您可以手动对每个数据库执行 mydump 以获取备份,然后从 MySQL 数据库中删除数据库,关闭 MySQL,移动/删除 — 我ib_logfile0
还建议移动/删除ibdata1
和ib_logfile1
— 然后重新启动 MySQL。
然后检查日志以查看 InnoDB 是否已启动。我敢打赌它会启动的。此时重新创建您要删除的数据库并重新导入数据。将创建新的ibdata1
和ib_logfile0
文件ib_logfile1
,一切应该都很好。
答案2
您是否从旧服务器复制了 ib_logfile0 文件?如果是,请尝试将其移出该目录(或重命名)并重新启动 mysqld。