Windows下MySQL5.7设置innodb_buffer_pool_size异常怎么办
问题根因
set global方式修改的参数仅对当前运行的MySQL实例生效,不会写入持久化配置,服务重启后会重新加载本地配置文件的参数值,因此会回退到配置文件内预设的8M默认值。- 修改my.ini后服务无法启动,基本是三类问题导致:改错了配置文件路径、配置文件内参数格式/位置/值非法、文件权限或编码不符合MySQL读取要求。
解决步骤
1. 定位准确的生效配置文件
Windows Server下MySQL 5.7默认的有效配置文件路径是隐藏目录下的C:\ProgramData\MySQL\MySQL Server 5.7\my.ini,很多人误改安装目录下的my-default.ini示例文件,要么不生效要么触发启动错误。
100%准确的定位方式:Win+R输入
services.msc打开服务列表,找到MySQL57服务右键查看属性,「可执行文件路径」字段中--defaults-file=参数后引号包裹的路径,就是服务启动时实际读取的配置文件路径。
2. 按规则修改配置
- 先停止MySQL服务,管理员身份打开命令提示符执行:
net stop MySQL57 - 打开定位到的my.ini,找到
[mysqld]配置段,innodb_buffer_pool_size参数必须写在[mysqld]段下,写到[mysql]、[client]等其他段下会直接触发启动失败。 - 参数值禁止写算术表达式,MySQL配置解析器不识别
256*1024*1024这类计算式,写入后会判定为非法值。以下两种写法均合法:# 直接写字节数值,256M对应268435456字节 innodb_buffer_pool_size=268435456 # 带单位写法,支持K/M/G单位,可读性更强 innodb_buffer_pool_size=256M - 注意MySQL 5.7的参数规则:innodb_buffer_pool_size的取值必须是
innodb_buffer_pool_chunk_size(默认128M)与innodb_buffer_pool_instances(默认1)乘积的整数倍,256M为默认参数下的合规值,不会触发自动调整报错。如果设置非整数倍值,MySQL会自动向下取整到最近的合规值,偏差过大时会抛出错误。 - 保存文件时注意两点:一是文件编码选UTF-8无BOM或ANSI,不要存为UTF-8带BOM格式;二是确认文件后缀为.ini,不要因系统隐藏后缀名存成
my.ini.txt;同时确保MySQL服务运行账户对该文件有读取权限。
3. 启动服务并校验
- 管理员身份执行命令启动服务:
net start MySQL57 - 连接MySQL实例后执行以下命令校验参数是否生效:
返回结果的Value值换算为MB后等于256即为配置成功。SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size'; - 如果启动失败,直接查看错误日志定位问题:错误日志路径可在my.ini的
log_error参数中找到,默认存放在C:\ProgramData\MySQL\MySQL Server 5.7\Data\目录下,后缀为.err,拉到文件末尾即可看到明确的失败原因,对照修正即可。
补充说明
- MySQL 5.7支持innodb_buffer_pool_size在线动态调整,无需重启的场景下可直接执行
SET GLOBAL innodb_buffer_pool_size=268435456;即时生效,但必须同步修改my.ini做持久化,否则重启后仍会回退。 - 参数取值不要超过服务器可用物理内存上限,专用数据库服务器一般设置为物理内存的50%-70%,如果服务器同时运行其他服务,按实际剩余空闲内存调整即可,设置过大会因内存分配失败导致服务无法启动。
内容的提问来源于stack exchange,提问作者shri Kanchi
相关产品推荐
相关产品推荐

