如何正确设置MySQL 8的innodb_buffer_pool_size并使其生效?
核心原因
Windows平台注册为系统服务的MySQL,默认加载配置的路径和手动执行mysqld命令时遍历的配置路径不一致。mysqld --help --verbose会扫描所有候选配置路径输出匹配到的参数值,但通过Windows服务管理器启动的MySQL80服务,启动时通常会携带--defaults-file参数指定专属配置文件路径,只会加载该指定路径的配置,完全忽略手动创建在C盘根目录的c:\my.cnf,所以修改的配置根本没被运行中的服务读取。
操作步骤
- 确认运行中服务实际加载的配置路径
管理员身份打开命令提示符,执行:
查看输出中sc qc MySQL80BINARY_PATH_NAME字段的值,默认MySQL8.0安装的路径类似:
注意"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80C:\ProgramData是系统默认隐藏文件夹,需要在文件资源管理器开启显示隐藏项目才能看到。 - 修改对应配置文件
用管理员权限打开上面路径找到的my.ini,定位到[mysqld]段落,新增或修改参数:
直接写带单位的数值比纯字节数更不容易出错,之前设置的67108864字节就是64MB,数值本身没问题,注意不要把参数写到innodb_buffer_pool_size=64M[client]等其他段落下。 - 重启服务生效
管理员身份执行命令重启服务:net stop MySQL80 net start MySQL80 - 校验结果
连接MySQL后执行:
返回值为64即说明配置生效。SELECT @@innodb_buffer_pool_size/1024/1024 AS buffer_pool_mb;
常见踩坑点
- 编辑
my.ini时未使用管理员权限,保存时文件被系统重定向到VirtualStore目录下的虚拟路径,服务实际读取的还是原路径下的旧配置 - 配置文件中存在多条
innodb_buffer_pool_size配置,靠后的条目覆盖了修改的值 - 64MB仅能解决小数据量下的锁表报错,如果是专用数据库环境,建议将该参数设置为服务器可用物理内存的50%-70%,减少后续同类问题。
内容的提问来源于stack exchange,提问作者WesR
相关产品推荐
相关产品推荐

