2013-02-18 100 views
2

我在RHEL6.3上运行MySQL服务器5.1.61。 MysQL服务器运行正常,但我发现我需要调整innodb_buffer_pool_size。我认为这个变量可以用MySQL显示像'innodb%'这样的变量没有任何返回

mysql>显示像'innodb%'这样的变量;

但实际上,它什么也没有返回。它为什么没有返回?我在哪里可以看到实际的innodb_buffer_pool_size(除my.cnf文件外)。 PS:我知道我可以更改my.cnf中的innodb_buffer_pool_size并重新启动MySQL,但为什么我看不到它的实际值?

回答

4

在MySQL 5.1中,有可能为InnoDB存储引擎无法完成初始化,如果在启动过程中遇到错误。在那种情况下,它只是禁用InnoDB并继续。 MyISAM表将被访问,但是没有InnoDB表。

检查InnoDB存储引擎是否已启用。下面是从65年1月5日的情况下输出:

mysql> show variables like 'have_innodb'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| have_innodb | YES | 
+---------------+-------+ 

mysql> show engines; 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| Engine  | Support | Comment              | Transactions | XA | Savepoints | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| InnoDB  | YES  | Supports transactions, row-level locking, and foreign keys  | YES   | YES | YES  | 
. . . 

接下来,我模拟了InnoDB的故障,通过编辑my.cnf中设置innodb_log_file_size=256M,这是不是磁盘上的日志文件的大小。然后我重新启动实例。

mysql> show variables like 'have_innodb'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| have_innodb | NO | 
+---------------+-------+ 

mysql> show variables like 'innodb%'; 
Empty set (0.00 sec) 

麻烦!去哪里看?错误日志文件:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 
InnoDB: than specified in the .cnf file 0 268435456 bytes! 
130218 12:50:46 [ERROR] Plugin 'InnoDB' init function returned error. 
130218 12:50:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 

您也可以强制MySQL如果遇到错误初始化InnoDB的中止其启动,所以你永远不会陷入这种局面再次。此项添加到在/etc/my.cnf:

[mysqld] 
innodb=force 

然后,当我尝试启动,我看到这个错误日志:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 
InnoDB: than specified in the .cnf file 0 268435456 bytes! 
130218 12:55:03 [ERROR] Plugin 'InnoDB' init function returned error. 
130218 12:55:03 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
130218 12:55:03 [ERROR] Failed to initialize plugins. 
130218 12:55:03 [ERROR] Aborting 

130218 12:55:03 [Note] /home/billkarwin/opt/mysql/5.1.65/bin/mysqld: Shutdown complete 

在MySQL 5.5中,服务器将无法启动如果InnoDB无法初始化。

+0

谢谢你解决这个问题!我认为你是对的,但问题是如何解决这个ib_logfile0问题? – fanchyna 2013-02-19 02:15:11

+0

如果日志文件大小是导致错误的原因,请尝试将my.cnf更改为具有磁盘上存在的文件大小。然后重新启动mysql服务。 – 2013-02-19 06:46:35

+0

我标记你的答案是正确的。对不起,我在看到你的答案之前采取了行动。我所做的是移动(不删除)ib_log文件,然后重新启动MySQL服务器。这次,innodb启动,但是有一些错误信息如下:“mysql.db的列数是错误的,预计22,找到20.表可能已损坏。130218 21:25:03 [错误] mysql.user has在位置29没有'Event_priv'列。我想我的行为会导致一些表被破坏。有没有简单的解决方法?如果没有,我可能需要重新安装MySQL服务器并重新导入数据。你怎么看,比尔?谢谢。 – fanchyna 2013-02-19 15:03:21

1

尝试SHOW VARIABLES WHERE variable_name LIKE 'innodb%'

+0

这不起作用。 – fanchyna 2013-02-19 01:38:00

相关问题