Skip to content

启动选项和配置文件

在命令行上使用选项

在启动服务器程序的命令行后边指定启动选项的通用格式就是这样的

--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]

不允许客户端使用网络通信连接

mysqld --skip-networking  # --skip_networking也可以(单词之间可以用-,也可以用_)

指定默认存储引擎

mysqld --default-storage-engine=MyISAM

注意对大小写是敏感的,-P是指定端口,-p是输入密码

如果是用mysqld_safe来启动的话,它处理不了的选项会传给mysqld。如mysqld_safe --skip-networking实际上会是mysqld --skip-networking

配置文件中使用选项

配置文件的路径

命令行中的配置只对当前次启动生效,想要永久生效可以写到配置文件中。UNIX-like系统中mysql会按照以下路径寻找配置文件

路径名 备注
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.cnf 特定于服务器的选项(仅限服务器)
defaults-extra-file 命令行指定的额外配置文件路径
~/.my.cnf 用户特定选项
~/.mylogin.cnf 用户特定的登录路径选项(仅限客户端)

SYSCONFDIR是编译安装myqsl的时候指定的。MYSQL_HOME是环境变量

配置文件的内容

配置内容是分组的。不同的组给不同的启动命令使用。如,[mysqld]和[mysql]`组分别应用于mysqld服务器程序和mysql客户端程序。

两个特殊的组:

  • [server]组下边的启动选项将作用于所有的服务器程序
  • [client]组下边的启动选项将作用于所有的客户端程序。
[server]
(具体的启动选项...)

[mysqld]
(具体的启动选项...)

[mysqld_safe]
(具体的启动选项...)

[client]
(具体的启动选项...)

[mysql]
(具体的启动选项...)

[mysqladmin]
(具体的启动选项...)

命令行中选项的=周围不能有空格,配置文件中选项的=周围可以有空格

下面是启动命令对应的配置组:

启动命令 类别 能读取的组
mysqld 启动服务器 [mysqld]、[server]
mysqld_safe 启动服务器 [mysqld]、[server]、[mysqld_safe]
mysql.server 启动服务器 [mysqld]、[server]、[mysql.server]
mysql 启动客户端 [mysql]、[client]
mysqladmin 启动客户端 [mysqladmin]、[client]
mysqldump 启动客户端 [mysqldump]、[client]

对于特定版本的组,可以以[mysqld-5.7]的形式配置。这样只有5.7的mysqld会生效

配置文件的优先级

  • 在不同的文件中有相同的选项,以最后一个为准
  • 在同一文件的不同组中的相同选项,以最后一个为准
  • 如果选在还在命令行中指定了,以命令行中指定的为准

如果不想用上面路径中搜索的配置文件,还在命令行中指定配置文件

mysqld --defaults-file=/tmp/myconfig.txt

系统变量

系统变量的作用范围

  • GLOBAL:全局变量
  • SESSION:会话变量,影响某个客户端的连接操作(也叫LOCAL)

每当一个客户端连入时,服务器会为其创建会话变量,其初始值就是全局变量的值

查看系统变量

如果要查看全局变量,用SHOW GLOBAL VARIABLES

MySQL的系统变量很多,直接用SHOW VARIABLES会刷屏,一般用SHOW VARIABLES [LIKE 匹配的模式];

mysql> SHOW VARIABLES LIKE 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.01 sec)

mysql> SHOW VARIABLES like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

LIKE后面可以加通配符来进行模糊查询

mysql> SHOW VARIABLES like 'default%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
| default_password_lifetime     | 0                     |
| default_storage_engine        | InnoDB                |
| default_tmp_storage_engine    | InnoDB                |
| default_week_format           | 0                     |
+-------------------------------+-----------------------+
5 rows in set (0.00 sec)

设置系统变量

通过选项来设置

其实大多数系统变量都可以以选项的形式设置。设置方法就是前面介绍的命令行启动配置文件

在服务器运行过程中设置

全局变量和会话变量的区别见下面。看设置的两个例子:

设置全局变量(两种语法都可以)

SET GLOBAL default_storage_engine = MyISAM;
SET @@GLOBAL.default_storage_engine = MyISAM;

设置当前连接的局部变量(可以看到默认不加GLOBAL设置的就是局部变量)

SET SESSION default_storage_engine = MyISAM;
SET @@SESSION.default_storage_engine = MyISAM;
SET default_storage_engine = MyISAM;

SHOW和SET默认不加GLOBAL设置的都是局部变量,加上GLOBAL才操作全局变量

注意事项

  • 并不是所有变量都有GLOBALSESSION两个作用范围,如max_connections只有GLOBAL范围,insert_id只有SESSION范围
  • 有些系统变量是只读的,如version

启动选项和系统变量的区别

虽然启动选项系统变量有很大的交集,但是他们都有属于各自的子集。

  • 有些系统变量是运行时生成的,不能当做启动选项来设置
  • 有些启动选项也不是系统变量,如defaults-file

状态变量

状态变量用来显示服务器程序的运行状态,是只读的。用法如下(不加GLOBAL默认是SESSNIO)

SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
mysql> SHOW STATUS LIKE 'thread%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 1     |
| Threads_created   | 1     |
| Threads_running   | 1     |
+-------------------+-------+
4 rows in set (0.00 sec)