10

我在服务器 S1 上有 mysql DB(mysql 版本 5.1.41-3ubuntu12.7-log),我在服务器 S2(mysql 版本 5.1.54-1ubuntu4-log)上为这个 DB 创建了主从。
S1 上的数据库正在使用一个数据文件(ibdata)。将数据库转储到 S2 后,我设置了 innodb_file_per_table=1。这使得每个表都有自己的 ibd 文件。现在一切顺利。
但是在 S2 上重新启动 mysql 后,我遇到了这个错误的问题:
Error 'Unknown table engine 'InnoDB'' on query. Default database: MyDB 当我尝试显示引擎时

展示引擎;
+------------+---------+-------------- --------------------------------------------------+------------ ---+--------+------------+
| 引擎 | 支持 | 评论 | 交易 | XA | 保存点 |
+------------+---------+-------------- --------------------------------------------------+------------ ---+--------+------------+
| MyISAM | 默认 | MySQL 3.23 的默认引擎具有出色的性能| 否 | 否 | 否 |
| MRG_MYISAM | 是 | 相同的 MyISAM 表的集合 | 否 | 否 | 否 |
| 黑洞 | 是 | /dev/null 存储引擎(您写入的任何内容都会消失)| 否 | 否 | 否 |
| CSV | 是 | CSV 存储引擎 | 否 | 否 | 否 |
| 内存 | 是 | 基于哈希,存储在内存中,对临时表有用 | 否 | 否 | 否 |
| 联邦 | 否 | 联合 MySQL 存储引擎 | 空 | 空 | 空 |
| 存档 | 是 | 归档存储引擎 | 否 | 否 | 否 |
+------------+---------+-------------- --------------------------------------------------+------------ ---+--------+------------+

innodb 未列出。
在错误日志中我可以看到:

InnoDB:数据库物理写入文件已满:等待...
InnoDB:无法初始化创建的日志文件,因为
InnoDB:数据文件已损坏,或新数据文件已损坏
InnoDB:在数据库之前启动时创建
InnoDB:时间但数据库没有关闭
InnoDB:通常在那之后。
111016 8:24:11 [错误] 插件“InnoDB”初始化函数返回错误。
111016 8:24:11 [错误] 插件“InnoDB”注册为存储引擎失败。
111016 8:24:11 [警告] 既没有使用 --relay-log 也没有使用 --relay-log-index;因此,当此 MySQL 服务器充当从属服务器并更改其主机名时,复制可能会中断!请使用 '--relay-log=S2-relay-bin' 来避免这个问题。

我试图删除 ib_logfiles 但这也不起作用。
以前有人遇到过这样的问题吗??任何想法都非常
感谢

4

5 回答 5

23

您可以删除名为 ib_logfile0 和 ib_logfile1 的 mysql 数据目录中的 InnoDB 日志文件。但不要删除 InnoDB 数据文件 (ibdata1)。

之后,InnoDB 将在您重新启动 mysqld 后尝试恢复。

查看主日志文件:

120413 17:34:47  InnoDB: Initializing buffer pool, size = 64.0M
120413 17:34:47  InnoDB: Completed initialization of buffer pool
120413 17:34:47  InnoDB: Log file .\ib_logfile0 did not exist: new to be created
InnoDB: Setting log file .\ib_logfile0 size to 32 MB
InnoDB: Database physically writes the file full: wait...
120413 17:34:48  InnoDB: Log file .\ib_logfile1 did not exist: new to be created
InnoDB: Setting log file .\ib_logfile1 size to 32 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
120413 17:34:49  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
于 2012-04-13T13:39:45.347 回答
4

服务器挂起并重新启动后有类似的问题。

数据没问题 - 错误信息非常具有误导性。

停止 MySQL 服务,从 中删除日志文件 ( ib_logfile*) /var/lib/mysql,然后重新启动 MySQL 服务。只需 100% 确保在删除日志文件时 MySQL 确实已关闭。

于 2014-02-19T08:25:58.197 回答
2

我认为如果你设置了 innodb 的 mysql 配置innodb_buffer_pool_size = 2G,innodb 将无法工作。

通常它会给出错误

"Unknown table engine 'InnoDB".

如果您选择带有 innodb 系统的表,请尝试使用 innodb_buffer_pool_size = 1G。

于 2012-10-12T07:45:44.123 回答
1

你用innodb编译mysql了吗?如果你这样做了,当你运行它时,你应该有很多行引用它:

strings `which mysqld` | grep innodb
于 2011-10-16T07:11:41.380 回答
0

我遇到了同样的问题。Nikl 的回答帮助我在主日志文件中找到了问题。InnoDB 在启动时无法分配所需的内存。在清理了其他一些进程后,一切都正常启动了。

日志显示如下:

160219 9:20:23 InnoDB: Error: cannot allocate 12884918272 bytes of InnoDB: memory with malloc! Total allocated memory InnoDB: by InnoDB 49601872 bytes. Operating system errno: 12 InnoDB: Check if you should increase the swap file or InnoDB: ulimits of your operating system. InnoDB: On FreeBSD check you have compiled the OS with InnoDB: a big enough maximum process size. InnoDB: Note that in most 32-bit computers the process InnoDB: memory space is limited to 2 GB or 4 GB. InnoDB: We keep retrying the allocation for 60 seconds...

于 2016-02-19T09:22:28.460 回答