在mysql数据库的日常运维和开发中,我们常常需要根据业务场景调整数据库的运行参数,这些参数都存储在mysql的variables中。不同的修改方式对应不同的生效范围和持久化效果,掌握正确的修改方法非常重要。

mysql variables的基本分类
mysql的variables分为全局变量和会话变量两类。全局变量影响整个mysql实例的运行,修改后对所有新建立的会话生效;会话变量仅影响当前连接的会话,修改后只对当前会话有效,不会影响其他会话和全局配置。
我们可以通过以下语句查看当前的variables信息:
-- 查看所有全局变量 SHOW GLOBAL VARIABLES; -- 查看所有会话变量 SHOW SESSION VARIABLES; -- 查看指定名称的变量,比如查看最大连接数 SHOW GLOBAL VARIABLES LIKE 'max_connections';
动态修改variables的方法
动态修改不需要重启mysql服务,分为修改全局变量和修改会话变量两种场景。
修改全局变量
修改全局变量需要使用SET GLOBAL语句,修改后的值会立即生效,但对已经存在的会话不产生影响,仅对新建立的会话有效。如果mysql服务重启,该修改会失效,属于临时修改。
-- 修改全局最大连接数为200 SET GLOBAL max_connections = 200; -- 另一种写法 SET @@GLOBAL.max_connections = 200;
修改会话变量
修改会话变量使用SET SESSION语句,或者直接省略SESSION关键字,修改后仅对当前会话有效,当前会话断开后修改自动失效。
-- 修改当前会话的SQL模式 SET SESSION sql_mode = 'STRICT_TRANS_TABLES'; -- 省略SESSION关键字,效果相同 SET sql_mode = 'STRICT_TRANS_TABLES';
持久化修改variables的方法
如果希望variables的修改在mysql服务重启后依然生效,需要通过配置文件修改,或者通过mysql 8.0及以上版本提供的持久化语句修改。
修改配置文件
mysql的配置文件通常是my.cnf(Linux系统)或者my.ini(Windows系统),我们可以在配置文件的[mysqld]段下添加需要修改的参数,修改完成后重启mysql服务即可生效。
比如要持久化修改最大连接数为200,配置文件添加内容如下:
[mysqld] max_connections = 200
使用持久化语句(mysql 8.0+)
mysql 8.0及以上版本支持SET PERSIST和SET PERSIST_ONLY语句,修改后会将参数写入mysqld-auto.cnf文件中,服务重启后自动加载,不需要手动修改配置文件。
-- 修改并持久化全局变量,立即生效且重启后保留 SET PERSIST max_connections = 200; -- 仅持久化修改,不立即生效,重启后生效 SET PERSIST_ONLY max_connections = 200;
修改后验证与注意事项
修改完成后,我们可以通过之前提到的SHOW VARIABLES语句验证参数是否生效:
-- 验证全局最大连接数是否修改成功 SHOW GLOBAL VARIABLES LIKE 'max_connections';
需要注意以下几点:
- 不是所有variables都支持动态修改,部分只读参数只能通过配置文件修改,动态修改时会报错。
- 修改全局变量需要有
SUPER或者对应的系统权限,普通用户没有权限修改全局参数。 - 修改核心参数前建议先在测试环境验证,避免参数设置不合理导致数据库性能下降或者无法正常运行。
- 如果使用配置文件修改,需要注意配置文件的加载顺序,避免后面的配置文件覆盖前面的参数设置。