Mysql Server配置详解

1. 概念及作用

多数Mysql程序能从选项文件(有时也称为配置文件)中读取启动选项。运行Mysql程序时,为了避免在命令行输入选项,可在选项文件中设置这些选项。
如果想知道一个程序是否读取选项文件,可以用--help选项运行该程序(mysqld用--verbose和--help,二者缺一不可。)。如果该程序读取选项文件,返回的信息会指示寻找的文件及选项组。
--注:
1)运行mysql --no-defaults只读取.mylogin.cnf文件。
2)选项文件是文本编辑器创建的纯文本文件,但包含"登录路径(login path)"选项的.mylogin.cnf是个例外,该文件为mysql_config_editor工具创建的加密文件。
3)"登录路径(login path)"选项组只允许设置某些选项,例如:host,user,password,port和socket等选项。
4)客户端程序通过.mylogin.cnf中的--login-path选项读取登录路径。
5)当设置其他登录路径文件名时,可以设置MYSQL_TEST_LOGIN_FILE环境变量,mysql-test-run.pl测试工具会使用该变量,但mysql_config_editor和mysql客户端,像:mysql,mysqladmin等,也可以识别和使用该变量。

2. 查找顺序

Mysql会按如下列出的顺序寻找并读取选项文件,如果不存在,可以用相应工具进行创建。
1)Windows上,Mysql程序会按如下顺序寻找选项文件,并从中读取启动选项(从前向后按序寻找和读取)。
a) %WINDIR%\my.ini,%WINDIR%\my.cnf 全局选项
b) C:\my.ini,C:\my.cnf 全局选项
c) BASEDIR\my.ini,BASEDIR\my.cnf 全局选项
d) defaults-extra-file defaults-extra-file选项确定的文件
e) %APPDATA%\MySQL\.mylogin.cnf 登录路径选项(仅客户端)
--注:
1)%WINDIR%表示Windows系统目录,其一般为"C:\windows",可用如下命令查看%WINDIR%的具体值:C:\> echo %WINDIR%。
2)%APPDATA%表示Windows应用数据目录,可用如下命令查看%APPDATA%的具体值:C:\> echo %APPDATA%
3)BASEDIR表示Mysql安装目录。当用mysql installer安装Mysql5.7时,其典型安装目录为"C:\Program Files\MySQL\MySQL 5.7 Server"。
2)Unix和类Unix系统上,Mysql程序按如下顺序查找选项文件,并从中读取启动选项(从前向后按序寻找和读取)
--注:
1)Unix系统上,处于安全考虑,Mysql会忽略拥有通用写权限的选项文件。
a) /etc/my.cnf 全局选项
b) /etc/mysql/my.cnf 全局选项
c) SYSCONFDIR/my.cnf 全局选项
d) \MYSQL_HOME/my.cnf 针对服务器特定的选项(仅服务器) e) defaults-extra-file defaults-extra-file选项确定的文件 f) \~/.my.cnf 针对用户特定的选项 h) \~/.mylogin.cnf 针对用户特定的登录路径(login path)选项(仅客户端) --注: 1)SYSCONFDIR表示编译mysql时SYSCONFDIR选项设置的目录。默认为,编译时设置安装目录下的etc目录。 2)MYSQL_HOME为包含服务器特定my.cnf文件所在目录的环境变量。如未设置MYSQL_HOME,且通过mysqld_safe程序启动Mysql,则mysqld_safe将其设定为BASEDIR,也就是Mysql的安装目录。 3)"\~"表示当前用户的主目录(HOME的值)。

3. 语法及填写规则

  1. 如果某个选项在选项文件中被设置了多次,则以最后一次为准,但对mysqld有个特例,处于安全考虑,--user选项则以第一次设置值为准,这样可以防止选项文件中设置的用户被命令行覆盖掉。
    2)选项文件的语法适用于手工编辑的文件。但不包括.mylogin.cnf,其通过mysql_config_editor创建和加密。
    3)运行mysql程序时,可以在命令行设置的任何长选项,都可以在选项文件中设置。为了知道某个程序可用的选项,使用--help选项运行该程序(mysqld必须用--verbose和--help两个选项)。
    4)选项文件中设置选项的语法与命令行语法类似。但选项文件中,需要去掉选项名前面的两个破折号,且每行只能设置一个选项。例如:命令行的--quick和--host=localhost选项,选项文件中应该分别在独立行中设置为quick和host=localhost。
    5)选项文件中的空行将被忽略,非空行可以为如下格式:
    a)#comment, ;comment
    注释行以#或;开始。一个#注释也可以在一行中间开始。
    b)group
    group为程序名字,或想为其设置选项的选项组名字。group行后,任何选项设置将会被应用于该group,直到选项文件末尾或另一个group行被设置,选项group名大小写不敏感。
    c)opt_name
    等同于--opt_name命令行选项。
    d)opt_name=value
    等同于--opt_name=value命令行选项。选项文件中。"="旁边可以有空格,但命令行则不行。
    e)当选项值中包含"#"等特殊字符时,需用单引号或双引号将选项值括起来。选项名及值前后的空格将被自动删掉。
    f)选项值中可以用转义序列 \b、\t、\n、\r、\\、\s,表示退格、tab、新行、回车、反斜杠和空格等。选项文件中,将适用下列转义规则:
    • 反斜杠后跟一个有效序列字符被转换成序列表示的字符。例如:\s被转换成空格。
    • 反斜杠后跟非有效转义序列字符将保持不变。例如:\S依然为\S。
    前述规则意味着文本反斜杠可以用\\表示,或当后面跟一个非有效转义序列字符时,用\表示。
    g)选项文件中的转义序列规则与SQL语句中文本串中的转义序列规则不同。
    后者中,如果x不是一个有效的转义序列字符,\x将变为x而非\x。选项值的转义规则尤其与Windows路径名相关,其用\作为一个路径名分隔符。如果后面跟一个转义序列字符,Windows路径名分隔符必须被写成\\,否则,可以写成\\,\或/。选项文件中用"C:\Program Files\MySQL\MySQL Server 5.7"做基目录,可以有多个方法设置。例如:
    basedir="C:\Program Files\MySQL\MySQL Server 5.7"
    basedir="C:\\Program Files\\MySQL\\MySQL Server 5.7"
    basedir="C:/Program Files/MySQL/MySQL Server 5.7"
    basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.7
    h)如果选项组(group)名字和程序名字相同,该选项组中的选项将用于该程序。例如:选项组mysqld和mysql将分别应用于mysqld服务器和mysql客户端程序。
    i)选项组client将被应用于Mysql发布版本中提供的所有客户端(但不包括mysqld)。用户可在选项组client中为所有客户端设置选项。例如:client用于设置连接服务器的口令(但一定注意选项文件权限控制,以防口令泄露。除非某个选项能被所有客户端程序使用,否则,不要将该选项放于选项组client中 。如果某个程序不能识别该选项,运行时将显示错误信息后退出。选项文件中,应将更通用的选项组放在前面,而更特定的组放在后面。例如:选项组client更通用,而选项组mysqldump只被mysqldump读取,后面确定的选项值将会覆盖前面确定的相同选项的值,因此,按照先client后mysqldump的顺序,将使mysqldump特定选项覆盖client选项。如下为一个典型的全局选项文件:

client

port=3306
socket=/tmp/mysql.sock

mysqld

port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

mysqldump

quick
如下为一个典型的用户选项文件:

client

#下列password将送到所有标准Mysql客户端
password="my password"

mysql

no-auto-rehash
connect_timeout=2
j)为了创建特定Mysql版本系列mysqld服务器读取的选项组,可以用mysqld-5.6, mysqld-5.7等名字的选项组。下列的选项组指示mysql 5.7.x版本的servers使用sql_mode设置:

mysqld-5.7

sql_mode=TRADITIONAL

4. 嵌套方法及指令

1)选项文件中可通过!include指令包含其他选项文件,还可以通过!includedir指令搜索特定目录中的选项文件。例如:为了包含/home/mydir/myopt.cnf文件,用如下指令:

!include /home/mydir/myopt.cnf
为了搜索和读取/home/mydir目录中发现的选项文件,用如下指令:
!includedir /home/mydir
--注:
1)mysql并不保证该目录中选项文件被读取的顺序。
2)Unix系统上,!includedir设置目录中包含及被发现的选项文件都必须有以".cnf"结尾。Windows系统中,该指令将检查带".ini"或"cnf"扩展名的文件。
2)被包含选项文件的内容与任何其他选项文件类似。即,其应该包含选项组,每个选项组以group行开始,以设置这些选项所应用的程序。
当处理被包含文件时,仅当前程序寻找的选项组中的选项被使用,其他选项组将被忽略,假设my.cnf文件包含如下行:
!include /home/mydir/myopt.cnf
且假设/home/mydir/myopt.cnf内容如下所示:

mysqladmin

force

mysqld

key_buffer_size=16M
如果myopt.cnf被mysqld处理,仅其中的选项组mysqld被用。如果文件被mysqladmin处理,则仅选项组mysqladmin被用。如果文件被其他程序处理,则/home/mydir/myopt.cnf中的选项都不被用。
如果一个选项文件包含!include或!includedir指令,当选项文件被处理时,无论该指令出现于文件的什么位置,该指令设置的文件都将被处理。

相关推荐
larance2 小时前
[机器学习40讲]33-序列化建模:隐马尔可夫模型.
机器学习·1024程序员节
geats人山人海2 小时前
现代c++第四章 简单类的概念
1024程序员节
ctlover2 小时前
langchain 中间件
中间件·langchain·1024程序员节
Be for thing4 小时前
PyTorch自动求导Autograd详解|requires_grad、backward、grad、梯度清零
pytorch·学习·1024程序员节
syagain_zsx4 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小嘉丶学长4 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节
时间售卖铺4 小时前
MySQL 备份
运维·数据库·mysql·云原生
4SAPI5 小时前
电商全链路内容自动化生成大模型 API 生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
运维·人工智能·架构·自动化·1024程序员节
深圳老胡5 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节