每个设置项都有各自的默认值,比方说服务器允许同时连入的客户端的默认数量是 151 ,表的默认存储引擎是 InnoDB ,我们可以在程序启动的时候去修改这些默认值,对于这种在程序启动时指定的设置项也称之为启动选项(startup options),这些选项控制着程序启动后的行为。在 MySQL 安装目录下的 bin 目录中的各种可执行文件,不论是服务器相关的程序(比如 mysqld 、 mysqld_safe )还是客户端相关的程序(比如 mysql 、mysqladmin ),在启动的时候基本都可以指定启动参数。这些启动参数可以放在命令行中指定,也可以把它们放在配置文件中指定。
如果我们在启动客户端程序时在 -h 参数后边紧跟服务器的IP地址,这就意味着客户端和服务器之间需要通过TCP/IP 网络进行通信。因为我的客户端程序和服务器程序都装在一台计算机上,所以在使用客户端程序连接服务器程序时指定的主机名是 127.0.0.1 的情况下,客户端进程和服务器进程之间会使用 TCP/IP 网络进行通信。如果我们在启动服务器程序的时候就禁止各客户端使用 TCP/IP 网络进行通信,可以在启动服务器程序的命令行里添加 skip-networking 启动选项,就像这样:
mysqld --skip-networking
在按照上述命令启动服务器程序后,如果我们再使用 mysql 来启动客户端程序时,再把服务器主机名指定为127.0.0.1 (IP地址的形式)的话会显示连接失败:
mysql -h127.0.0.1 -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
这就意味着我们指定的启动选项 skip-networking 生效了。
长形式 |
短形式 |
含义 |
--host |
-h |
主机名 |
--user |
-u |
用户名 |
--password |
-p |
密码 |
--port |
-P |
端口 |
--version |
-V |
版本信息 |
短形式的选项名只有一个字母,与使用长形式选项时需要在选项名前加两个短划线 -- 不同的是,使用短形式选项时在选项名前只加一个短划线 - 前缀。
在命令行中设置启动选项只对当次启动生效,也就是说如果下一次重启程序的时候我们还想保留这些启动选项的话,还得重复把这些选项写到启动命令行中。于是就有了配置文件这个概念,我们把需要设置的启动选项都写在这个配置文件中,每次启动服务器的时候都从这个文件里加载相应的启动选项。由于这个配置文件可以长久的保存在计算机的硬盘里,所以只需我们配置一次,以后就都不用显式的把启动选项都写在启动命令行中了,所以我们推荐使用配置文件的方式来设置启动选项。
MySQL 程序在启动时会寻找多个路径下的配置文件,这些路径有的是固定的,有的是可以在命令行指定的。根据操作系统的不同,配置文件的路径也有所不同。
在 Windows 操作系统中, MySQL 会按照下列路径来寻找配置文件:
路径名 |
备注 |
%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 |
登录路径选项(仅限客户端) |
在类 UNIX 操作系统中, MySQL 会按照下列路径来寻找配置文件:
路径名 |
备注 |
/etc/my.cnf |
|
/etc/mysql/my.cnf |
|
SYSCONFDIR/my.cnf |
|
$MYSQL_HOME/my.cnf |
特定于服务器的选项(仅限服务器) |
defaults-extra-file |
命令行指定的额外配置文件路径 |
~/.my.cnf |
用户特定选项 |
~/.mylogin.cnf |
用户特定的登录路径选项(仅限客户端) |
在阅读这些 UNIX 操作系统下配置文件路径的时候需要注意一些事情:
SYSCONFDIR 表示在使用 CMake 构建 MySQL 时使用 SYSCONFDIR 选项指定的目录。默认情况下,这是位于编译安装目录下的 etc 目录。
MYSQL_HOME 是一个环境变量,该变量的值是我们自己设置的,我们想设置就设置,不想设置就不设置。该变量的值代表一个路径,我们可以在该路径下创建一个 my.cnf 配置文件,那么这个配置文件中只能放置关于启动服务器程序相关的选项(言外之意就是其他的配置文件既能存放服务器相关的选项也能存放客户端相关的选项。
我们可以在选项组的名称后加上特定的 MySQL 版本号,比如对于 [mysqld] 选项组来说,我们可以定义一个[mysqld-5.7] 的选项组,它的含义和 [mysqld] 一样,只不过只有版本号为 5.7 的 mysqld 程序才能使用这个选项组中的选项。
如果我们在多个配置文件中设置了相同的启动选项,那以最后一个配置文件中的为准。比方说 /etc/my.cnf 文件的内容是这样的:
[server]
default-storage-engine=InnoDB
而 ~/.my.cnf 文件中的内容是这样的:
[server]
default-storage-engine=MyISAM
又因为 ~/.my.cnf 比 /etc/my.cnf 顺序靠后,所以如果两个配置文件中出现相同的启动选项,以 ~/.my.cnf 中的为准,所以 MySQL 服务器程序启动之后, default-storage-engine 的值就是 MyISAM 。
如果我们不想让 MySQL 到默认的路径下搜索配置文件(就是上表中列出的那些),可以在命令行指定 defaultsfile 选项,比如这样(以 UNIX 系统为例):
mysqld --defaults-file=/tmp/myconfig.txt
这样,在程序启动的时候将只在 /tmp/myconfig.txt 路径下搜索配置文件。如果文件不存在或无法访问,则会发生错误。