当我们使用mysql客户端可执行文件连接mysql服务器时,需要指定IP地址、用户名及密码等信息,这些信息就是mysql客户端程序启动时的选项,通过这些选项可以连接到具体的mysql服务端上。
对于mysql服务端,在启动时可以指定同时连入的客户端数量、客户端/服务单的通信方式、表的默认存储引擎、查询缓存的大小等信息,
一般这些信息具有自己的默认值,同时连入的客户端数量默认是151,表的默认存储引擎是InnoDB,程序启动时可以修改这些默认值,在启动时指定的设置项被称为启动选项(startup option),启动选项决定了程序启动后的行为,
mysql安装bin目录下不论是客户端还是服务端的可执行程序,在启动的时候都可以在命令行后面填写对应的启动选项,也可以在配置文件中指定。
命令行中指定启动选项时,需要在选项前面增加 -- 前缀,如果选项名是多个单词组成的,则需要用短划线连接(- 或者 _ ),
--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
例如,禁止客户端使用TCP/IP与MySQL服务端进行通信的启动选项写法如下:
mysqld --skip-networking
或者 mysqld --skip_networking
,前缀用--,多个单词使用了 -或_,二者是等价的,
使用了上面的命令后,mysql客户端将无法通过网络与服务端进行通信。
MySQL默认使用InnoDB作为表的存储引擎,如果默认需要使用MyISAM,可以用如下命令:
msyqld --default-storage-engine=MyISAM
每个启动选项前面都需要加上--
不需要值的启动选项,只需要 --名字 即可
需要值的启动选项,需要在=号后面加上值,选项、=号、值,三者之间不能有空白字符
每个命令执行文件都可以通过 命令 --help 形式看到所支持的启动选项,例如 mysql --help(mysqld有些特殊,需要写成 mysqld --verbose --help)
为了方便,启动选项一般都有一个单词的全写和一个字母的简写,绝大多数情况下,我们都会使用简写形式,常见的长短形式如下:
长形式 | 短形式 | 含义 |
---|---|---|
--host | -h | 主机名 |
--user | -u | 用户名 |
--password | -p | 密码 |
--port | -P | 端口 |
--version | -V | 版本信息 |
短形式的注意事项如下:
短形式只需要一个短划线
短形式,选项名和选项值可以没有间隙,也可以用空白字符隔开(-p比较特殊,必须和密码在一起)
区分大小写, -p和-P含义不同,需要注意
在命令行中,每次启动都需要带上启动选项,如果选项过多是一件比较麻烦的事情,因此可以将选项写入到硬盘文件中,这样每次程序启动的时候读取配置文件中的选项就可以了。
MySQL服务端启动时,会在多个路径下寻找配置文件,这些路径是固定的,在不同的操作系统下,寻找文件的路径有所不同。
windows查找路径如下:
路径名 | 备注 |
---|---|
%WINDIR%\my.ini,%WINDIR%\my.cnf | |
C:\my.ini,C:\my.cnf | |
BASEDIR\my.ini,BASEDIR\my.cnf | |
defaults-extra-file | 在命令行中指定的路径 |
%APPDATA%\MySQL.mylogin.cnf | 登录路径选项(进客户端使用) |
在表格的前三个路径中,配置文件可以是.ini结尾,也可以是.cnf结尾
%WINDIR%
是Windows目录的位置,通常是 C:\WINDOWS
,可以使用 echo %WINDIR%
查看
BASEDIR
是MySQL的安装目录,例如: C:\Program Files\MySQL\MySQL Server5.7
defaults-extra-file
指的是可以在 mysqld
启动时指定配置文件路径,例如 mysqld --defaults-extra-file=配置文件路径
%APPDATA%
表示 Windows 应用程序数据目录的值,可以用 echo %APPDATA%
的命令查看
.mylogin.cnf
用于存储客户端连接服务器的选项(host、user、password、port、socket等),仅被客户端使用,并且其并不是一个纯文本文件,而是使用 mysql_config_editor
工具创建的加密文件,该工具在安装目录的bin目录下
路径名 | 备注 |
---|---|
/etc/my.cnf | |
/etc/mysql/my.cnf | |
SYSCONFDIR/my.cnf | |
$MYSQL_HOME/my.cnf | 特定于服务器的选项 (仅限服务器) |
defaults-extra-file | 命令行指定的额外配置文件路径 |
~/.my.cnf | 特定于用户的选项 |
~/.mylogin.cnf | 特定于用户的登录路径选项(仅限客户端) |
SYSCONFDIR
表示在使用 CMake 构建 MySQL 时使用 SYSCONFDIR 选项指定的目录
MYSQL_HOME
是一个环境变量,该环境变量由用户自己设置,该目录下可以放置启动MySQL服务端相关的启动选项(除 ./mylogin.cnf 和 $MYSQL_HOME/my.cnf 两个文件,其他文件既可以存放服务端相关也可以存放客户端相关的启动选项)
如果使用 mysqld_safe
启动MySQL服务端,此时并没有指定 MYSQL_HOME
环境变量,那么该值将被自动设置为 MySQL 的安装目录
~ 符号在Linux系统下代表当前用户的用户目录,一个系统可以有多个用户,不同的用户可以配置自己的.my.cnf和.my.login.cnf
defaults-extra-file 与Windows中的描述一样,启动时的命令行选项
.mylogin.cnf与Windows中的描述也是一致
mysqld_safe程序启动服务端程序时,会调用mysqld,如果使用 mysqld_safe 命令时带的选项,mysqld_safe 处理不了,将交给 mysqld 处理,
例如 msyqld_safe --skip-networking
, --skip-networking 将交给 mysqld 处理。
配置文件中的启动项被划分为若干个组,每个组有一个组名,用中括号[]扩起来,如下:
[server]
(具体的启动选项...)
option1 #配置项1,该选项不需要选项值
option2 = value2 #配置项2,该选项需要选项值
[mysqld]
(具体的启动选项...)
[msyqld_safe]
(具体的启动选项...)
[client]
(具体的启动选项...)
[mysql]
(具体的启动选项...)
[mysqladmin]
(具体的启动选项...)
复制代码
在配置文件中的,选项明必须是长形式,不可以写成短形式
配置文件中的启动选项不可以加--前缀,并且每行只能有一个选项
=等号周围可以有空白字符,命令行中是不可以有的
配置文件中,可以使用#号作为注释
不同的选项做提供给不同的程序使用,如果选项组的名称与程序相同,那么组中的选项将专门用于该程序。
[mysqld]和[mysql]组专门应用于mysqld服务器程序和mysql客户端程序
[server]组与[client]组较为特别,前者的启动项用于所有的服务端程序,后者的启动项用于所有的客户端程序
程序名 | 类别 | 能读取的组 |
---|---|---|
mysqld | 启动服务器 | [mysqld]、[server] |
mysql_safe | 启动服务器 | [msyqld]、[server]、[msyqld_safe] |
mysql.server | 启动服务器 | [msyqld]、[server]、[mysql.server] |
mysql | 启动客户端 | [mysql]、[client] |
mysqladmin | 启动客户端 | [mysqladmin]、[client] |
mysqldump | 启动客户端 | [mysqldump]、[client] |
例如,linux系统下,在 /etc/mysql/my.cnf
中添加如下内容:
[server]
skip-networking
default-storage-engine=MyISAM
复制代码
随后使用 mysqld
命令启动服务端时,虽然命令行中没有添加选项,但是MySQL也会去上面的文件中找到配置文件中的server组下的选项,使其生效,当然如果上面两个选项如果写到[client]组中,则不会生效了。
选项后面可以加上一个 -版本号,借此可以让特定版本的mysqld程序才可以读取该配置,例如:
[mysqld-5.7]
选项.....
复制代码
只有mysql5.7服务端启动才能使用上面的选项。
MySQL根据路径的先后顺序读取配置文件,并且配置选项以后面的文件为准,即后面出现的选项会覆盖前面的选项,读取顺序见上文表格中的顺序。
与路径一样,相同的选项,后面出现的组会覆盖前面出现的组。
命令行中附带的选项会覆盖配置文件中的。
该选项可以在mysql服务端启动时指定,这样mysql就不会去上文表格中的路径中查找配置文件,而是使用该选项指定的配置文件,如果指定的文件不存在,将发生错误。
mysqld --default-file=/tmp/myconfig.txt
default-file
与default-extra-file
的区别是指定前者,mysql将不会去其他路径下查找配置文件,后者则会继续查找。