最近在考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