无法降低innodb_buffer_pool_size

真令人沮丧的问题。 我的innodb_buffer_pool_size设置为32M,我想降低它。 my.cnf中的variables实际上设置为2M,我找不到任何其他覆盖configuration文件(是的,它设置在mysqld块)。 当我尝试在命令行设置variables时,我得到:错误1238(HY000):variables'innodb_buffer_pool_size'是一个只读variables。 32M从哪里来?

更新 :是否有可能在my.cnf中编译variables,无法更改? 还是有可能我的Linux发行版(openSUSE 11.3)有一个包含我无法find? 在告诉我更改variables并重新启动MySQL之前,请先阅读以下内容。 那什么都不做。

你只能在my.cnf设置innodb_buffer_pool_size 。 在数据库运行时不能设置。

无论如何,除了最小的testing数据库外,2M对于所有人来说太小了。 对于任何真正的数据库来说,32M几乎肯定是太小了。 如果你正在调整数据库服务器,这通常是增加的数字, 不是减less

我的innodb_buffer_pool_size设置为32M

你的意思是你看到这个值通过检查:

 mysql> select @@innodb_buffer_pool_size; +---------------------------+ | @@innodb_buffer_pool_size | +---------------------------+ | 33554432 | +---------------------------+ 1 row in set (0.00 sec) 

我想降低它。

为什么? 你有多less内存?

当我尝试在命令行设置variables时,我得到: ERROR 1238 (HY000): Variable 'innodb_buffer_pool_size' is a read only variable

正如它所说的, innodb_buffer_pool_size不是一个dynamicvariables。 如果不重新启动MySQL,则无法进行更改。

32M从哪里来?

一个可能的原因是…原来在/etc/my.cnf设置为32M,有人将其更改为2M,但没有重新启动MySQL。

我为这个老问题添加了一个答案,从MySQL 5.7.5开始, InnoDB缓冲池可以从mysql shell dynamicresize :

 SET GLOBAL innodb_buffer_pool_size=512000000;