一直详细学习 MySQL 选项方面的知识,只是知道常用的 .cnf (尤其是 /etc/my.cnf
和安装目录或用户家目录的 .cnf 文件)和命令行选项,以及之前学到的使用 SET {PERSIST | @@PERSIST. | PERSIST_ONLY | @@PERSIST_ONLY.} system_var_name
SQL 语句在数据目录 datadir
下 MySQL 自动生成的 mysqld-auto.cnf (这个文件比较特殊,它是最后被执行的,因而虽然属于选项文件,优先级却高于命令行选项)。后觉得有必要详细学习一下,在学习完记入有道云笔记后时隔多日,写下此篇文章分享给大家。
什么是命令行选项,选项文件?
-
命令行选项
-
即和一般的命令行程序一样,在程序命令中使用的选项(或参数),分为长格式(
--option=value
或--option value
)和短格式(-short_option value 或 --short_option value)。详见 4.2.2.1 在命令行上使用选项 。
选项文件
-
又称
配置文件,是一种在大多数 MySQL 程序启动时读取的选项所在的文件。该文件可被任何文本编辑器编辑,一般为纯文本文件,除了
.mylogin.cnf
登陆选项文件和数据目录中的mysqld-auto.cnf
MySQL 服务器端自动生成的持久化变量的 JSON 格式的选项文件。 选项文件 的作用是提供一种方便的方式来指定常用选项,这样每次运行程序时就不需要在命令行中输入这些选项。详见 4.2.2.2 使用选项文件 。
MySQL 程序选择选项赋值的优先级
MySQL 程序选择选项赋值的优先级整体上遵循如下原则:
-
同类型的以后定义的选项值会覆盖先定义的,因而对选项的最后一次赋值才是 MySQL 程序运行时选项最终使用的值。
有一个例外:
--user
选项会选择第一次赋予的值,即第一个实例。这被用作安全预防措施,以防止选项文件中指定的用户在命令行上被覆盖。 -
命令行选项的优先级一般高于选项文件。
有一个例外:
在 MySQL 服务器上,数据目录中的mysqld-auto.cnf
选项文件是最后处理的,因此它的优先级最高,甚至高于命令行选项。
Unix 及类 Unix 操作系统的 MySQL 程序选项总优先级顺序(从低到高,数字升序)如下表所示:
名称 | 类型 | 优先级 | 解释 |
---|---|---|---|
/etc/my.cnf | 选项文件 | 1(最低) | 全局选项 |
/etc/mysql/my.cnf | 选项文件 | 2 | 全局选项 |
SYSCONFDIR/my.cnf | 选项文件 | 3 | 全局选项 |
$MYSQL_HOME/my.cnf | 选项文件 | 4 | 服务器指定选项(仅限服务器) |
defaults-extra-file | 选项文件 | 5 | --defaults-extra-file 指定的文件(如果存在) |
~/.my.cnf | 选项文件 | 6 | 用户特定选项 |
客户端程序的--no-defaults 选项 | 命令行选项 | 7 | 低于~/.mylogin.cnf 登陆选项文件(仅限客户端) |
~/.mylogin.cnf | 选项文件 | 8 | 登陆路径选项(仅限客户端),即便指定--no-defaults ,仍然会读取该登陆选项文件 |
命令行选项 | 命令行选项 | 9 | 命令行选项在一般选项文件之后读取并应用 |
DATADIR\mysqld-auto.cnf | 选项文件 | 10(最高) | 使用SET PERSIST或SET PERSIST_ONLY持久化的系统变量(仅限服务器) |
Windows 平台的情况也类似,只是文件路径和扩展名(多了.ini
后缀的选项文件)略有不同而已。
选项的语法
在选项名称中,短划线(-)和下划线(_)在大多数情况下可以互换使用,尽管前导短划线不能以下划线给出。例如,--skip-grant
表和--skip_grant_tables
是等效的。一般我们在选项名称中使用破折号,除非下划线别有含义。例如,--log-bin
(点击跳转至详情)和--log_bin
(点击跳转至详情)是不同的选项。
命令行选项前缀分为 长格式(–) 和 短格式(-) 两种。 “选项” 和 “值” 之间一般可以使用 空格“ ” 或 等号“=” 分隔(或叫做连接),有一个 特例 是:--password
或-p
如果后跟选项值,即密码,不能使用空格作为分割符,可以使用--password=密码
或-p密码
的形式,即短格式的密码选项必须直接后跟密码的值。不需要值的选项使用--选项名称
指定。
选项文件中选项可以省略前导的两个短划线,但 “选项” 和 “值” 必须使用=
连接,不需要值的选项只需给出选项名称。选项必须属于某个“选项组”,因而在选项文件中必须定义在“选项组”下方的位置。“选项组”以[选项组名称]
的形式存在于选项文件中,例如常用的[mysqld]
,[client]
、[mysql]
等。详见 4.2.2.2 使用选项文件 。
DATADIR\mysqld-auto.cnf
这个选项文件虽是 MySQL 服务器为存储持久化变量而自动生成的,但我们仍然可以以 JSON 语法来向其中添加选项配置,但它们只能在重启服务器后生效。
有关 MySQL 程序选项的更多详细信息,请参阅我的专栏 第 4 章 MySQL 程序 中的 4.2.2 指定程序选项 及其子章节。