最近在考MySQL 8.0的OCP ,开个专题专门查漏补缺下

只是做备忘,有的概念只是一笔带过,具体可自行搜索

本文中配置和选项文件一个意思

1.配置文件优先级

Image.png
  • 若配置文件中同一参数有多个值,后面的优先级更高
  • 若有多个配置文件则后读取的文件优先级更高
mysqld --help --verbose 2> /dev/null | grep -A1 "Default options"

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

2. 相关defaults选项

  • --no-defaults会忽略配置文件的参数,只会按预编译时的参数以及命令行启动时的参数
mysqld --no-defaults --basedir=/opt/mysql --datadir=/mysql/data --user=mysql --pid-file=/mysql/pid --socket=/mysql/socket --port=3307
  • --defaults-file=file_name 只会读取该文件
  • --defaults-extra-file=file_name 读取所有文件后再读取该文件

  • 还有个directives用法,可以在配置文件中设置包含其他配置文件和目录,有兴趣可以自行搜索

3.默认配置文件位置

windows系统也识别my.cnf文件,不过建议使用my.ini

  • Linux:/etc/my.cnf
  • Windows:C:\my.ini
Image_2.png

4. 配置文件组

配置文件组即配置文件中[group-name]下面的选项

他主要用于将配置文件中的参数分组,方便管理客户端程序读取参数

通过如下命令可以知道程序运行时读取了哪些参数

mysqld --help --verbose | grep "following groups"
The following groups are read: mysqld server mysqld-5.7
mysql --help | grep "following groups"
The following groups are read: mysql client
mysqladmin --help | grep "following groups"
The following groups are read: mysqladmin client
mysqldump --help | grep "following groups"
The following groups are read: mysqldump client

下图为client组常用的参数,方便日常使用

Image_3.png

再加上一个 show-warnings

可以执行如下命令查看配置文件组内容

my_print_defaults mysql client

mysql --print-defaults mysql client

5.系统变量

5.1 动态变量作用范围

  • 不建议用赋予super权限,请使用SYSTEM_VARIABLES_ADMIN权限
  • super权限后续版本会废弃
Image_4.png

5.2 持久化全局变量

使用SET PERSIST variable_name = value 来持久化全局变量,而不用修改配置文件 是MySQL 8.0的新特性

需要如下权限

  • SYSTEM_VARIABLES_ADMIN
  • PERSIST_RO_VARIABLES_ADMIN

会在datadir下创建json格式的mysqld-auto.cnf文件来保存修改结果

该文件最后读取,优先级最高

使用SET PERSIST_ONLY 不即时生效而是下次启动时读取

使用RESET PERSIST [[IF EXISTS] system_var_name]来清除持久化过的,不加名称则全部清除

可使用 Performance schema下的表来查询相关变量值

  • global_variables
  • session_variables
  • and persisted_variables
  • variables_by_thread
  • variables_info