MySQL :参数修改
目录
- 报错情况及解决办法
- 1. `SET PERSIST log_bin_use_v1_row_events=ON;`
- 2. `SET PERSIST innodb_buffer_pool_load_at_startup=ON;`
- MySQL 参数修改的全面说明
- 1. 修改方式
- 2. 可修改参数的类型
- 3. 确认修改结果
- 4. 注意事项
- MySQL参数可以从不同维度进行分类,常见的有以下几种分类方式及对应的设置方法:
- 一、按作用范围分类
- 二、按功能分类
- 三、存储过程参数类型(特殊参数类型)
- 官方文档说明
在 MySQL 中对参数进行修改时,常常会碰到各种报错,下面为你详细整理并说明之前遇到的报错以及 MySQL 参数修改的全面信息。
报错情况及解决办法
1. SET PERSIST log_bin_use_v1_row_events=ON;
报错信息:
ERROR 1238 (HY000): Variable 'log_bin_use_v1_row_events' is a non persistent variable
Warning (Code 1287): '@@log_bin_use_v1_row_events' is deprecated and will be removed in a future release.
Error (Code 1238): Variable 'log_bin_use_v1_row_events' is a non persistent variable
原因:
log_bin_use_v1_row_events
属于非持久化变量,不支持用SET PERSIST
语句进行持久化设置。- 该变量已被弃用,未来版本会移除。
解决办法: - 动态修改:使用
SET GLOBAL log_bin_use_v1_row_events = ON;
在当前会话或者本次 MySQL 运行期间修改该变量的值。 - 修改配置文件:在
my.cnf
或者my.ini
的[mysqld]
部分添加log_bin_use_v1_row_events = ON
,然后重启 MySQL 服务器。 - 考虑替代方案:查看 MySQL 官方文档,寻找该变量的替代配置。
2. SET PERSIST innodb_buffer_pool_load_at_startup=ON;
报错信息:
ERROR 1238 (HY000): Variable 'innodb_buffer_pool_load_at_startup' is a read only variable
原因:innodb_buffer_pool_load_at_startup
是只读变量,无法使用 SET PERSIST
语句进行修改。
解决办法:
- 修改配置文件:在
my.cnf
或者my.ini
的[mysqld]
部分添加innodb_buffer_pool_load_at_startup = ON
,然后重启 MySQL 服务器。 - 确认修改结果:使用
SHOW VARIABLES LIKE 'innodb_buffer_pool_load_at_startup';
确认变量值是否修改成功。
MySQL 参数修改的全面说明
1. 修改方式
- 动态修改:使用
SET GLOBAL
语句在运行时动态修改参数的值,示例如下:
SET GLOBAL max_connections = 500;
这种修改方式仅在当前 MySQL 会话期间有效,当 MySQL 服务器重启之后,参数会恢复到配置文件中设置的值。
- 持久化修改:
SET PERSIST
:在 MySQL 8.0 及以上版本中,使用SET PERSIST
语句可以将参数值持久化到auto.cnf
文件,示例如下:
SET PERSIST max_connections = 500;
不过,并非所有参数都支持 SET PERSIST
,只有部分可动态修改的全局变量支持。
- 修改配置文件:直接修改 MySQL 的配置文件(my.cnf
或者 my.ini
),在 [mysqld]
部分添加或修改参数,然后重启 MySQL 服务器,新的参数设置才会生效。
2. 可修改参数的类型
- 可动态修改的全局变量:这类变量可以在 MySQL 服务器运行时进行修改,并且部分可以使用
SET PERSIST
进行持久化设置,例如max_connections
、innodb_buffer_pool_size
等。 - 只读变量:这类变量不能被用户修改,如
protocol_version
等。 - 会话变量:针对每个客户端会话特定的变量,不能使用
SET PERSIST
进行持久化设置。
3. 确认修改结果
- 查看当前变量值:使用
SHOW VARIABLES LIKE '变量名';
查看当前参数的值。 - 确认持久化设置:可以通过查询
performance_schema.persisted_variables
表来确认参数是否已持久化。
4. 注意事项
- 备份配置文件:在修改配置文件之前,最好备份原配置文件,以防修改出错导致 MySQL 无法启动。
- 重启影响:修改配置文件后需要重启 MySQL 服务器,这可能会影响正在运行的业务,建议在维护窗口进行操作。
- 参数依赖:某些参数之间可能存在依赖关系,修改一个参数可能会影响其他参数的行为,需要谨慎操作。
总之,在修改 MySQL 参数时,需要根据参数的类型和具体需求选择合适的修改方式,同时要注意修改的影响和可能出现的问题。
MySQL参数可以从不同维度进行分类,常见的有以下几种分类方式及对应的设置方法:
一、按作用范围分类
- 全局参数:对整个MySQL实例生效。例如
max_connections
(最大连接数量)、innodb_buffer_pool_size
(InnoDB存储引擎缓存池的大小)等。- 查看方法:使用
SHOW GLOBAL VARIABLES;
命令查看当前值设置 。 - 设置方法:
- 配置文件:在MySQL的配置文件(一般是
my.cnf
或my.ini
,具体取决于操作系统)中的[mysqld]
组下修改。例如,要将最大连接数设置为500,缓存池大小设置为2GB,可以这样写:
- 配置文件:在MySQL的配置文件(一般是
- 查看方法:使用
[mysqld]
max_connections=500
innodb_buffer_pool_size=2G
- **SQL命令**:使用`SET GLOBAL 参数名 = 值;`语句设置,但这种方式设置的参数在MySQL服务重启后会失效。例如:`SET GLOBAL max_connections = 500;`
- 会话参数:只对特定的会话或连接生效。例如
wait_timeout
(连接的超时时间)等。- 查看方法:使用
SHOW SESSION VARIABLES;
查看当前会话的参数值,也可以使用SHOW VARIABLES;
,该命令会同时显示全局参数和会话参数 。 - 设置方法:
- 配置文件:同样在配置文件中设置,不过会话参数的设置相对复杂,可能需要特定的插件或配置方式来实现对会话的全局预设。
- SQL命令:使用
SET SESSION 参数名 = 值;
语句,只对当前会话有效。例如:SET SESSION wait_timeout = 1800;
- 查看方法:使用
二、按功能分类
- 连接相关参数:如
max_connections
(最大连接数)、wait_timeout
(连接超时时间)等,用于控制客户端与MySQL服务器的连接情况。 - 内存相关参数:
key_buffer
(MyISAM存储引擎的键缓存大小)、innodb_buffer_pool_size
(InnoDB存储引擎缓存池大小)等,用来管理MySQL使用的内存资源。 - 查询优化相关参数:
query_cache_size
(查询结果缓存大小)、join_buffer_size
(连接缓存大小)等,帮助优化查询性能。 - 事务相关参数:
innodb_support_xa
(是否支持分布式事务)等,与事务处理相关。
三、存储过程参数类型(特殊参数类型)
- 输入参数(IN):用于向存储过程传递数据,存储过程内部可以读取该参数的值,但不能修改它。
- 输出参数(OUT):用于从存储过程返回数据,存储过程内部可以修改该参数的值,调用者可以读取该参数的值。
- 输入输出参数(INOUT):既可以向存储过程传递数据,又可以从存储过程返回数据,存储过程内部可以读取和修改该参数的值,调用者也可以读取和修改该参数的值。
- 设置方法:使用
CREATE PROCEDURE
语句创建存储过程时定义参数。示例如下:
- 设置方法:使用
DELIMITER //
CREATE PROCEDURE my_procedure(IN param1 INT, OUT param2 VARCHAR(50), INOUT param3 DECIMAL(10,2))
BEGIN
-- 存储过程的逻辑代码
END //
DELIMITER ;
官方文档说明
可以通过MySQL官方网站查看详细的参数说明:https://dev.mysql.com/doc/refman/当前版本号/en/ ,在该文档中搜索具体的参数名,即可查看该参数的作用、默认值、取值范围以及设置建议等内容 。比如查看max_connections
参数,在文档搜索框中输入“max_connections”,就能找到关于它的详细介绍。
log_bin_trust_function_creators