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

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

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

## 1.配置文件优先级


[image:978 size:orig]




- 若配置文件中同一参数有多个值,后面的优先级更高
- 若有多个配置文件则后读取的文件优先级更高

```
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:979 size:orig]

## 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:980 size:orig]

再加上一个  show-warnings


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

mysql --print-defaults mysql client
```

## 5.系统变量

### 5.1 动态变量作用范围

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


[image:981 size:orig]


### 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