MySQL 的启动选项和系统变量

MySQL的配置信息能够经过两种方式实现,一种是命令行形式,在启动MySQL服务时后边带上相关配置参数,此种方式会在MySQL重启后失效。另一种是经过写入配置文件,如my.cnf,启动或者重启MySQL服务都会生效,此种方式是永久生效。mysql

启动选项

命令行

在MySQL服务命令启动时,带上配置参数程序员

启动方式可参考这篇:MySQL 的启动和链接方式sql

命令格式:
启动命令 --启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
复制代码
例如:
mysqld --default-storage-engine=MyISAM //设置默认存储引擎
复制代码
错误例子:
mysqld --default-storage-engine = MyISAM //设置默认存储引擎
缘由:
由于启动项和值之间的等号不能有空格
复制代码

参数的长形式和短形式

配置参数有长形式和短形式之分,有些做用是同样的,只是写法不一样而已缓存

--host => -h //主机
--port => -P // 端口
--user => -u //用户
--password => -p //密码
--version => -V //版本
......
复制代码
例子:
mysqld --port=3306
mysqld -P3306
mysqld -P 3306
复制代码
注意:
密码不能有空格
mysqld -proot
复制代码

配置文件

配置文件my.cnf的位置,有多是如下的几种,如MySQL服务启动时未指定配置文件时,会从如下地方查找读取并初始化。bash

* /etc/my.cnf 
* /etc/mysql/my.cnf
* defaults-extra-file //指定的额外配置文件路径
* SYSCONFDIR/my.cnf //cmake编译安装状况
* $MYSQL_HOME/my.cnf //设置环境变量,默认安装路径
* ~/.my.cnf  //用户特定选项,家目录
* ~/.mylogin.cnf //用户特定的登陆路径选项(仅限客户端),mysql_config_editor修改,不是纯文件
复制代码
注意
1. 在配置文件中指定的启动选项不容许加--前缀,而且每行只指定一个选项,并且=周围能够有空白字符
2. 若是咱们在多个配置文件中设置了相同的启动选项,那以最后一个配置文件中的为准
3. 若是同一个启动选项既出如今命令行中,又出如今配置文件中,那么以命令行中的启动选项为准
4. mysqld --defaults-file=/tmp/myconfig.txt  
//在程序启动的时候将只在/tmp/myconfig.txt路径下搜索配置文件。若是文件不存在或没法访问,则会发生错误
复制代码

配置组

配置文件一共能够如下这些组别:mysqld、mysqld_safe、mysql.server、mysql、mysqladmin、mysqldump,能够针对不一样组别进行配置服务器

MySQL的启动选项和系统变量

内容格式
[server]
(具体的启动选项...)
[mysqld]
(具体的启动选项...)
[mysqld_safe]
(具体的启动选项...)
[client]
(具体的启动选项...)
[mysql]
(具体的启动选项...)
[mysqladmin]
(具体的启动选项...)
复制代码
例子:
[mysqld]
pid-file          = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
# 优化配置
wait_timeout=10
back_log=600
key_buffer_size = 2048M
read_buffer_size = 100M
max_allowed_packet      = 1000M
thread_stack            = 192K
thread_cache_size       = 4
myisam-recover-options  = BACKUP
max_connections        = 4000
max_user_connections = 0
max_connect_errors = 65535
open_files_limit = 10240
......
复制代码
注意
1. [server]组下边的启动选项将做用于全部的服务器程序,如mysqld、mysqld_safe、mysql.server
2. [client]组下边的启动选项将做用于全部的客户端程序,如mysql、mysqladmin、mysqldump
3. 同一个配置文件中多个组的优先级,将以最后一个出现的组中的启动选项为准
复制代码

系统变量

MySQL服务器程序运行过程当中会用到许多影响程序行为的变量,它们被称为MySQL系统变量。session

例如:
1. 容许同时连入的客户端数量用系统变量max_connections表示
2. 表的默认存储引擎用系统变量default_storage_engine表示
3. 查询缓存的大小用系统变量query_cache_size表示
......
复制代码

查看

格式:
SHOW VARIABLES [LIKE 匹配的模式];
复制代码
例如:
SHOW VARIABLES LIKE 'default_storage_engine';
复制代码

MySQL 的启动选项和系统变量

设置

经过启动项设置

命令行设置
mysqld --default-storage-engine=MyISAM --max-connections=10
复制代码
配置文件设置
[mysqld]
default-storage-engine = MyISAM
max-connections = 10
......
复制代码
注意:
对于启动选项来讲,若是启动选项名由多个单词组成,各个单词之间用短划线-或者下划线_链接起来均可以,可是它对应的系统变量的单词之间必须使用下划线_链接起来(即经过show查看或set设置时)
复制代码

服务器程序运行过程当中设置

系统变量比较牛逼的一点就是,对于大部分系统变量来讲,它们的值能够在服务器程序运行过程当中进行动态修改而无需中止并重启服务器socket

不过系统变量有全局和当前会话做用域之分优化

做用域

GLOBAL:全局变量,影响服务器的总体操做。
SESSION:会话变量,影响某个客户端链接的操做。(别名叫LOCAL)
复制代码
格式:
1. SET [GLOBAL|SESSION] 系统变量名 = 值;
2. SET [@@(GLOBAL|SESSION).]var_name = XXX;
复制代码
global
例如:
1. SET GLOBAL default_storage_engine = InnoDB;
2. SET @@GLOBAL.default_storage_engine = InnoDB;
复制代码
session
例如:
1. SET SESSION default_storage_engine = InnoDB;
2. SET @@SESSION.default_storage_engine = InnoDB;
3. SET default_storage_engine = InnoDB;//默认 session
复制代码
查看
格式:SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
1. SHOW SESSION VARIABLES LIKE 'default_storage_engine';
2. SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';
复制代码

注意: 若是某个客户端改变了某个系统变量在GLOBAL做用范围的值,并不会影响该系统变量在当前已经链接的客户端做用范围为SESSION的值,只会影响后续连入的客户端在做用范围为SESSION的值。ui

补充说明
并非全部系统变量都具备GLOBAL和SESSION的做用范围
* 有一些系统变量只具备GLOBAL做用范围,比方说max_connections,表示服务器程序支持同时最多有多少个客户端程序进行链接
* 有一些系统变量只具备SESSION做用范围,好比insert_id,表示在对某个包含AUTO_INCREMENT列的表进行插入时,该列初始的值
* 有一些系统变量的值既具备GLOBAL做用范围,也具备SESSION做用范围,好比咱们前边用到的default_storage_engine,并且其实大部分的系统变量都是这样的
复制代码
有些系统变量是只读的,并不能设置值
比方说version,表示当前MySQL的版本,咱们客户端是不能设置它的值的,只能在SHOW VARIABLES语句里查看。
复制代码
启动选项与系统变量的关系

启动选项是在程序启动时咱们程序员传递的一些参数,而系统变量是影响服务器程序运行行为的变量

* 大部分的系统变量均可以被看成启动选项传入
* 有些系统变量是在程序运行过程当中自动生成的,是不能够看成启动选项来设置,好比auto_increment_offset、character_set_client啥的
* 有些启动选项也不是系统变量,好比defaults-file
复制代码

状态变量

为了让咱们更好的了解服务器程序的运行状况,MySQL服务器程序中维护了好多关于程序运行状态的变量,它们被称为状态变量。

比方说Threads_connected表示当前有多少客户端与服务器创建了链接,Handler_update表示已经更新了多少行记录

因为状态变量是用来显示服务器程序运行情况的,因此它们的值只能由服务器程序本身来设置,咱们程序员是不能设置的

查看

格式:
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
例如:
SHOW STATUS LIKE 'thread%';
复制代码

MySQL 的启动选项和系统变量

参考:掘金小册《MySQL 是怎样运行的:从根儿上理解 MySQL》

相关文章
相关标签/搜索