MySQL · 8.0.0新特性 · 持久化全局参数修改

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: PS: 本文内容基于MySQL8.0.0版本,由于目前才Release了第一个开发版本,不排除后续行为会发生变化 相信很多朋友都有这样的体验,在实例启动的时候动态修改了某些配置,但是忘了修改配置文件,结果实例一重启修改就丢失了。或者对于诸如部署在云上的业务(例如RDS),通常用户是没有修改配置文件

PS: 本文内容基于MySQL8.0.0版本,由于目前才Release了第一个开发版本,不排除后续行为会发生变化

相信很多朋友都有这样的体验,在实例启动的时候动态修改了某些配置,但是忘了修改配置文件,结果实例一重启修改就丢失了。或者对于诸如部署在云上的业务(例如RDS),通常用户是没有修改配置文件的权限的,这导致配置的设定不够灵活。从MySQL8.0开始,大家不用担心这个问题了,用户可以选择性的将配置进行持久化。

对应的Worklog: WL#8688

启用这个功能,使用特定的语法SET PERSIST来设定任意可动态修改的全局变量,例如:

mysql> SET PERSIST innodb_flush_log_at_trx_commit = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SET PERSIST sync_binlog = 1;
Query OK, 0 rows affected (0.00 sec)

此时检查默认的my.cnf文件并没有发生任何修改,但是数据目录下,多了个和之前MySQL版本不一样的文件:

$ls -lh mysqld-auto.cnf
-rw-r----- 1 zhaiwx users 81 Sep 17 18:09 mysqld-auto.cnf

文件的格式是JSON存储的,因此可以直接用内置的解析器进行解析

$cat mysqld-auto.cnf
{ "mysql_server": {"innodb_flush_log_at_trx_commit": "1" , "sync_binlog": "1" } }

mysqld-auto.cnf文件中的配置相比my.cnf文件具有高优先级,如果相同配置出现在两个文件中,就以mysqld-auto.cnf文件中的记录为主。

注意,即使你通过SET PERSIST修改配置的值并没有任何变化,也会写入到mysqld-auto.cnf文件中。但你可以通过设置成default值的方式将其从mysqld-auto.cnf文件中移走:

mysql> SET PERSIST innodb_flush_log_at_trx_commit = DEFAULT;
Query OK, 0 rows affected (0.00 sec)

=====
$cat mysqld-auto.cnf
{ "mysql_server": {"sync_binlog": "1" } }

你可以通过新的PS表performance_schema.variables_info来确定配置项的值的来源,共有几类:

enum enum_variable_source
{
  COMPILED= 1,
  GLOBAL,
  SERVER,
  EXPLICIT,
  EXTRA,
  MYSQL_USER,
  LOGIN,
  COMMAND_LINE,
  PERSISTED,
  DYNAMIC
};

系统表相关代码:storage/perfschema/table_variables_info.cc

==================

mysql> select * from performance_schema.variables_info where variable_source = 'PERSISTED'\G
*************************** 1. row ***************************
  VARIABLE_NAME: sync_binlog
VARIABLE_SOURCE: PERSISTED
  VARIABLE_PATH: /u01/my80/data/mysqld-auto.cnf
      MIN_VALUE: 0
      MAX_VALUE: 4294967295
1 row in set (0.00 sec)

如果你不想让mysqld-auto.cnf中的配置生效,可以在启动时关闭只读参数persisted_globals_load,这样在启动时就不会载入mysqld-auto.cnf中的配置项了。

主要代码:

Commit f2bc0f89b7f94cc8fe963d08157413a01d14d994

主要入口函数(8.0.0):

接口函数大多定义在sql/persisted_variable.cc文件中:
启动时载入mysqld-auto.cnf的内容: Persisted_variables_cache::load_persist_file(); 通过json解析合法性,并存入内存
将文件中读取的配置进行设置: Persisted_variables_cache::set_persist_options

运行SET PERSIST命令时,调用Persisted_variables_cache::set_variable 更新内存中存储的值
写入mysqld-auto.cnf文件中: Persisted_variables_cache::flush_to_file

参考文档:

  1. http://mysqlserverteam.com/mysql-8-0-persisting-configuration-variables/
  2. http://dev.mysql.com/worklog/task/?id=8688
  3. https://bugs.mysql.com/bug.php?id=82807
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
2天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
1月前
|
算法 关系型数据库 MySQL
一天五道Java面试题----第七天(mysql索引结构,各自的优劣--------->事务的基本特性和隔离级别)
这篇文章是关于MySQL的面试题总结,包括索引结构的优劣、索引设计原则、MySQL锁的类型、执行计划的解读以及事务的基本特性和隔离级别。
|
1月前
|
SQL 算法 关系型数据库
(二十)MySQL特性篇:2022年的我们,必须要懂的那些数据库新技术!
 MySQL数据库从1995年诞生至今,已经过去了二十多个年头了,到2022.04.26日为止,MySQL8.0.29正式发行了GA版本,在此之前版本也发生了多次迭代,发行了大大小小N多个版本,其中每个版本中都有各自的新特性,所有版本的特性加起来,用一本书的篇幅也无法完全阐述清楚,因此本章主要会挑重点特性来讲,具体各版本的特性可参考MySQL官网的开发手册。
|
2月前
|
分布式计算 关系型数据库 MySQL
MySQL超时参数优化与DataX高效数据同步实践
通过合理设置MySQL的超时参数,可以有效地提升数据库的稳定性和性能。而DataX作为一种高效的数据同步工具,可以帮助企业轻松实现不同数据源之间的数据迁移。无论是优化MySQL参数还是使用DataX进行数据同步,都需要根据具体的应用场景来进行细致的配置和测试,以达到最佳效果。
|
3月前
|
关系型数据库 MySQL 测试技术
深入探索MySQL 8:隐藏索引与降序索引的新特性
深入探索MySQL 8:隐藏索引与降序索引的新特性
|
3月前
|
关系型数据库 MySQL 数据库
MySQL 8.0 新特性之不可见主键
【6月更文挑战第9天】MySQL 8.0 引入了不可见主键特性,提供更灵活的数据库管理方式。不可见主键能减少业务逻辑干扰,提高数据安全性和隐私,同时在某些场景下更适用。示例展示了如何创建和使用不可见主键,但需要注意它可能带来的理解和调试难题。此特性增加了设计和管理数据库的选项,适用于对数据隐私有高要求的场景。随着技术发展,不断学习和探索新特性将提升数据库性能和功能。
57 9
|
2月前
|
存储 缓存 关系型数据库
Mysql/etc/my.cnf参数详解
以上只是 `/etc/my.cnf`中的部分参数,实际上,`/etc/my.cnf`中的参数非常多,可以根据具体的应用需求进行调整。
25 0
|
3月前
|
SQL JSON 关系型数据库
MySQL 8.0新特性?
【6月更文挑战第14天】MySQL 8.0新特性?
35 1
|
3月前
|
SQL 关系型数据库 MySQL

相关产品

  • 云数据库 RDS MySQL 版