开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情
启动Mysql服务器的时候,它是有默认配置的。例如:默认的存储引擎、允许同时连接的客户端数等等。
Mysql是支持我们在启动服务器时去修改这些默认配置的,了解一下如何配置Mysql启动配置。
命令行启动配置
禁用TCP/IP的方式连接
通过mysql -hIP -P3306 -uroot -p是以TCP/IP的方式连接客户端的。
如果要禁止客户端使用TCP/IP通信,启动时输入以下指令:
mysqld --skip-networking
两个单词之间用-或者_都是可以的。
修改默认的存储引擎
mysqld --default-storage-engine=默认引擎的名字
注意=号左右不能有空格。
帮助
mysql --help
mysqld_safe --help
mysqld --verbose --help
配置文件
命令行启动配置只对当次设置有效,配置文件可以使启动服务器时每次都加载配置文件中的启动选项,不用再使用命令行配置了。
路径
首先我们需要了解配置文件的路径。
Windows
Mysql是通过读取本地的配置文件的,它和SpringBoot的配置文件有异曲同工之妙,Mysql也可将配置文件放在不同的路径下,让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 |
这里我们了解前四个用的比较多的:
- %WINDIR%
在Windows中可以使用echo %WINDIR%看它具体指向哪
- BASEDIR
指的是Mysql的安装目录
- defaults-extra-file
是在输入命令行的时候,手动指向配置文件的路径
mysqld --defaults-extra-file=C:\...\...txt
Unix
列出几个路径方便回顾一下
| 路径 |
|---|
/etc/my.cnf |
/etc/mysql/my.cnf |
配置文件里的内容
首先它的大致样子是这样的:
[mysqld]
配置内容
[mysql]
配置内容
...
分组
我们会发现,它有[],这个扩是表示分组。这个分组对应启动Mysql命令时前的指令,比如前面我们使用
mysql -h..这个命令时,前缀是以mysql打头的,如果我们写了配置文件后,使用命令会直接读取该组下的配置。清楚分组之后,我们再看配置内容。
不过有两个分组是比较特殊的,其他过多的我们也不了解啦(脑子有限~),就把这两个分组作为公共配置就行。
[server]:作用于所有服务器程序[client]:作用于所有客户端程序
既然说了服务器程序和客户端程序,还是有必要说明一下哪些是服务器程序,哪些是客户端程序。
| 启动命令 | 类别 |
|---|---|
mysqld | 服务器 |
mysqld_safe | 服务器 |
mysql.server | 服务器 |
mysql | 客户端 |
mysqladmin | 客户端 |
mysqldump | 客户端 |
配置内容
之前命令行我们写配置时是这样的--P3306,这个配置端口的内容。-P是一种缩写的性质,它完整的写法是--Port=3306,在命令行中我们可以使用缩写,但是在配置内容中是需要使用完整的写法。
但是它并不需要--,如果有赋值的配置项,也是允许=两边有空格存在的。
此外,配置内容还允许我们添加注释,使用#即可。
例子
我希望服务器启动时将默认引擎设置成MyISAM
[server]
default-storage-engine = MyISAM #将默认引擎改为MyISAM
优先级
不同路径下配置文件优先级
读取顺序是从上到下的,结果按照最后一个被读到的配置文件为主。
| 路径名 |
|---|
%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 |
同配置文件不同组的优先级
也是按照分组的位置顺序有关,例如[server]和[mysqld]设置了相同的内容,谁在后面听谁的。
命令行和配置文件
两个设置了相同的内容,以命令行为主。
系统变量
Mysql服务器中很多设置需要读取一些预先设定好的变量值,比如说允许同时连接的客户端数量就是其中之一,它是属于Mysql系统变量控制的。
查看系统变量
不要轻易尝试下面指令,它会输出所有的系统变量。
这里查看的是SESSION作用范围的系统变量
SHOW VARIABLES;
我们查找特定的系统变量,加上LIKE关键字即可,比如说看同时连接的客户端数量:
SHOW VARIABLES LIKE 'max_connections';
设置系统变量
设置方法就如上文讲的使用命令行或者配置文件的方式指定即可。例如修改同时连接数为50:
mysqld --max-connections=50
配置文件的方式省略。
在运行过程中设置
这里有一个概念需要先了解一下:配置的核心在于系统变量的修改,比如说A客户端想设置默认存储引擎为InnoDB,B客户端想设置默认存储引擎为MyISAM,在于设置我们感觉是合理的。
但是如果A客户端想设置连接数:100;B客户端想设置连接数50。都是对服务器的系统变量设置话,感觉就有点不对了。
因为系统变量不是只有一个吗?
那么Mysql的开发者提供了这样的解决方案。
系统变量的作用范围
GLOBAL:全局变量,影响服务器的整体操作。SESSION:会话变量,影响某个客户端连接的操作。
这个是什么意思呢,简单一点可以这样去理解:一个系统变量在服务器启动时会预制好两个作用域:全局变量、会话变量。全局变量是服务器启动时已经设置好的,其值是固定的了,然后有客户端连接到服务器时,系统变量会为这个客户端生成一份会话变量,客户端可以自定义一些系统变量,但不会去影响其他客户端的使用。
这就实现了刚刚说的A客户端想设置连接数:100;B客户端想设置连接数50。
初始化问题
SESSION的值初始化会默认选取GLOBAL中的值。如果GLOABAL作用范围的系统变量改动后,当前在系统中的客户端并不会被改变,而后续加入服务器的系统变量会被改变。
具体设置
语法:
SET [GLOBAL|SESSION] 系统变量名 = 值;
SET [@@(GLOBAL|SESSION).]var_name = XXX;
例如:在运行期间设置所有客户端的存储引擎
SET GLOBAL default_storage_engine = InnoDB;
SET @@GLOBAL.default_storage_engine = InnoDB;
补充
并不是所有变量都具有GLOBAL和SESSION作用范围,具体情况可以搜索查询。
状态变量
状态变量是用于了解服务器运行状况的。