这篇文章是自己学习mysql随手写的杂记,编辑混乱且不够严谨,请勿参考,谢谢!

在启动mysql服务器端程序的时候,可以加入一些启动选项,这些启动选项可以影响后续程序的一些行为。比如常见的默认存储引擎就可以通过指定启动选项来设置,如:

bin/mysqld --default-storage-engine=myisam

后面还可以加入其它的启动选项,不过这种通过命令行的方式来指定启动参数不够完美。因为如果重启,必须要重新指定启动参数才能让服务器程序保持和上次一样的配置,而这看起来很傻。一个比较常规的做法是把这些启动的参数放入到一个配置文件中,mysql启动时会读取这些配置,即使重启也没有关系。那么mysql会读取哪些配置文件呢?其实mysql会读取多个不同位置的配置文件,顺序为:

/etc/my.cnf

 

/etc/mysql/my.cnf

 

SYSCONFDIR/my.cnf

 

$MYSQL_HOME/my.cnf

特定于服务器的选项(仅限服务器),不指定$MYSQL_HOME以当前mysql安装目录为变量值

defaults-extra-file

命令行指定的额外配置文件路径

~/.my.cnf

用户特定选项

~/.mylogin.cnf

用户特定的登录路径选项(仅限客户端)

不同于命令行的指定方式,在配置文件中没有--符号,而是这种方式,如:

default-storage-engine=myisam

如果启动服务器端程序的时候,当前启动命令处理不了参数,则会传递给下个命令。

在mysql的配置文件中,划分了很多分组来管理配置,这些分组包括:

[mysqld]

[server]

[client]

[mysql]

[mysqld_safe]

[mysql.server]

其中的[client]分组中的配置作用于所有客户端。[server]作用于所有服务器,可以看下不同的启动命令可以读取的分组如下:

启动命令

类别

能读取的组

mysqld

启动服务器

[mysqld][server]

mysqld_safe

启动服务器

[mysqld][server][mysqld_safe]

mysql.server

启动服务器

[mysqld][server][mysql.server]

mysql

启动客户端

[mysql][client]

mysqladmin

启动客户端

[mysqladmin][client]

mysqldump

启动客户端

[mysqldump][client]

这里需要注意:

1.不同的配置项如果出现在不同的配置文件中,读取顺序靠后的配置覆盖前面的配置。

2.不同的配置项如果出现在不同的组中,类似的,后面的配置覆盖前面的。

3.如果命令行和配置文件同时指定了同一项配置,命令行覆盖配置文件中的配置。

配置参数defaults-file是不使用其他任何配置,只使用其指定的配置文件。与前面的defaults-extra-file含义是不同的。

绝大多数启动参数都可以放到配置文件中,但是部分不行,比如defaults-file,放入进去就没有意义了。

系统参数也同样可以影响服务器程序的行为,绝大部分系统参数也可以放到配置文件中,但也有不同的地方:

1.有些系统参数是服务器程序运行过程中动态产生的,是不可以放入的。

2.有些启动选项也不是启动变量。

还有一个非常重要的点是系统参数的配置可以不用重启服务器程序而直接生效。

系统参数有作用范围,查看系统参数可以使用:

show [global|session] variables like '系统参数'

比如查看版本:

show variables like 'version'

查看客户端连接到服务器端的数量:

show variables like '%connected%'

默认不加任何global和session关键字,则查询的是session级别的系统参数。可以使用set命令设置环境变量,如:

set global|session default-storage-engine=myisam

同样不加global和session,默认为session,session只对当然会话生效,global对全局生效。需要注意的是:如果在当前会话设置了global系统参数,不会更改已经连接的客户端该变量值,只会影响后续接入的客户端的值。

不是所有系统参数都有global和session两种作用范围,如最大连接数和缓存池大小只有global,没有session。

状态变量是服务器记录自身运行情况的,用户是不能更改的。比如客户端已连接数,也有global和session之分,默认为session。查看方式为:show status like 'xxx'。

完。