Xubuntu 16.04下MySQL 5.6配置修改后未生效问题排查
嘿,我在Debian/Ubuntu系下处理过很多MySQL配置不生效的情况,结合你的Xubuntu 16.04 + MySQL 5.6环境,大概率是这几个细节没注意到,一步步排查试试:
先搞清楚MySQL到底读哪个配置文件
Debian系的MySQL(包括Xubuntu)喜欢把配置拆分到多个文件里,而且不同版本的加载优先级可能和你想的不一样。直接跑这条命令,就能看到MySQL实际读取配置的顺序和路径:mysqld --help --verbose | grep -A 1 "Default options"你会看到类似这样的输出:
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
另外,MySQL 5.6在Xubuntu 16.04里,很多时候真正生效的主配置是/etc/mysql/mysql.conf.d/mysqld.cnf,这个文件的优先级可能比你修改的/etc/mysql/my.cnf或者conf.d/mysql.cnf更高,你之前可能漏改了这个文件。检查配置项的拼写和格式是否正确
缓冲池的正确配置项是innodb_buffer_pool_size,别犯拼写错误(比如漏写innodb_前缀,或者把buffer写成buff)。另外值的格式要规范:- 推荐带单位,比如
innodb_buffer_pool_size = 1G(1GB)、512M(512MB),清晰不容易错 - 如果只写数字,默认单位是字节(比如
1073741824等于1GB),但很容易写错位数
还要注意,这个值不能设置得太夸张(比如超过系统可用内存的70%),否则MySQL可能启动失败,自动 fallback 到默认值。
- 推荐带单位,比如
确认MySQL服务真的重启成功了
别以为执行了service mysql restart就万事大吉,用这条命令检查服务状态:sudo service mysql status只有显示
active (running)才是正常启动。如果是failed状态,说明你的配置有语法错误,MySQL启动失败,此时会沿用之前的有效配置运行。想要找错误原因,看日志就行:sudo tail -n 20 /var/log/mysql/error.log日志里会明确指出哪一行配置出了问题。
确保配置放在了正确的段下
你说放在[mysqld]段下是对的,但一定要确认没不小心写到[mysql](客户端配置段)或者其他无关段里——只有[mysqld]下的配置才会被MySQL服务器进程读取。验证变量的命令要准确
登录MySQL控制台后,用这条命令查看缓冲池大小:SHOW VARIABLES LIKE 'innodb_buffer_pool_size';变量名要完全匹配,虽然MySQL不区分大小写,但和配置文件里的写法一致更不容易看错。
内容的提问来源于stack exchange,提问作者Rajesh

