配置
引言
MySQL 有两种类型的参数。
- 静态参数: 重启 MySQL 服务器后才能使之生效
- 动态参数: 可以在不重新启动 MySQL 服务器的情况下随时更改它
变量可以通过以下方式设置
- 配置文件: MySQL 有一个配置文件,我们可以在其中指定数据的位置、MySQL 可以使用的内存以及其他各种参数
- 启动脚本: 可以直接将参数传递给 mysqld 进程。启动脚本仅在调用服务器时才有效。
- 使用 SET 命令(仅限动态变量): 这将持续到服务器重新启动时。你还需要在配置文件中设置变量,以便在重新启动时保持更改持久化。另一种使更改持久化的方法是在 PERSIST 关键字或
@@persist
之前加上变量名称
使用配置文件
执行mysql --help
,可以看到:
1 2 |
|
在 Mac 上找到了/usr/local/etc/my.cnf
:
1 2 3 4 |
|
默认配置文件是/etc/my.cnf
(在 Red Hat 和 CentOS)上和/etc/mysql/my.cnf
(在 Debian 系统上)
配置文件包含由 section_name 指定的部分。
所有与 section 相关的参数都可以放在 section_name 下面,例如:
1 2 3 4 5 6 7 8 9 10 |
|
[mysqld]
: 该部分由 mysql 服务器读取[client]
: 该部分由所有连接的客户端读取(包括 mysql cli)[mysqldump]
: 该部分由名为 mysqldump 的备份工具读取[mysqld_safe]
: 该部分由 mysqld_safe 进程读取(MySQL 服务器启动脚本)
除此之外,mysqld_safe 进程会从选项文件中的[mysqld]
和[server]
部分读取所有选项。
例如,mysqld_safe 进程从 mysqld 部分读取 pid-file 选项
/etc/my.cnf
:
1 2 |
|
在使用 systemd 的系统中,mysqld_safe 将不会被安装。
要配置启动脚本,需要在/etc/systemd/system/mysqld.service.d/override.conf
中设置值
例如:
1 2 3 4 5 6 |
|
使用全局变量和会话变量
可以通过连接到 MySQL 并执行 SET 命令来设置参数。
根据变量的作用域可以将变量分为两种:
- 全局变量: 适用于所有新连接
- 会话变量: 仅适用于当前连接(会话)
如果你想记录所有执行时间超过 1 秒的查询,则可以执行:
1 |
|
要使更改在重新启动时保持持久化,请使用:
1 |
|
或者使用:
1 |
|
持久化的全局系统变量设置存储在数据目录中的 mysqld-auto.cnf 中
假设你只想为此会话记录查询,而不是为所有连接记录查询,可以使用以下命令:
1 |
|
编码
MySQL 的“utf8
”实际上不是真正的 UTF-8。
在MySQL中,“utf8”编码只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。
在utf8编码中,中文是占3个字节,其他数字、英文、符号占一个字节。
但 emoji 符号占 4 个字节,一些较复杂的文字、繁体字也是 4 个字节。所以导致写入失败,应该改成utf8mb4
。
MySQL 的“utf8mb4”才是真正的“UTF-8”。
所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。
服务端配置
格式:
1 2 |
|
客户端配置
格式:
1 2 |
|
通信方式
有 socket 和 tcp 两种方式
socket 要快一些
mysqld 为服务器配置
/etc/mysql/my.cnf
:
1 2 3 4 5 6 7 8 |
|
客户端设置:
1 2 |
|
加密规则
1 2 3 4 5 6 7 8 |
|
数据存放地址
1 2 3 4 5 6 7 |
|