- 服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选项。
- 服务器系统变量。反映了启动选项的当前状态和值,其中⼀些变量可以在服务器运⾏时修改。
- 服务器状态变量。这些变量包含了有关运⾏时操作的计数器和统计信息。
- 服务器如何管理客⼾端连接。
- 配置和使⽤时区⽀持。
- 服务器端帮助功能。
服务器配置和默认值
mysqld --verbose --help
# 查看所有mysqld 选项和可配置的系统变量列表及默认值
root@hcss-ecs-9734:/var/lib/mysql# mysqld --verbose --help
# 内容看起来像这样
abort-slave-event-count 0
allow-suspicious-udfs FALSE
archive ON
auto-increment-increment 1
... 省略
transaction-read-only FALSE
transaction-write-set-extraction XXHASH64
updatable-views-with-limit YES
show variables [like ...];
其中可以跟 like 语句和通配符查找某些具体的系统变量,例如:
show status like [...];
mysqladmin variables
mysqladmin extended status
系统变量和选项
选项 | 系統变量 | 说明 |
--character-set-server | character-set-server | 服务器的默认字符集,默认 utf8mb4,如果设置了这个变量,还应该设置 collation_server 来指定字符集的排序规则。 |
--collation-server | collation_server |
服务器的默认排序,默认utf8mb4_0900_ai_ci
|
--port |
port
|
MySQL服务启动后监听的端⼝号
|
--datadir
|
datadir
|
MySQL服务器的数据⽬录
|
--default-storage-engine
|
default_storag
e_engine
|
表的默认存储引擎
|
--log-output |
log_output
|
⼀般查询⽇志和慢速查询⽇志输出的⽬的地,值可以是 TABLE ,
FILE
和
NONE
,可以同时指定多个值,
NONE 的优先级最⾼
|
--general-log
|
general_log
|
是否启⽤⼀般查询⽇志。值为
0
(或
OFF
)禁⽤⽇志,为 1 (或
ON
)来启⽤⽇志。⽇志输出⽬录由
log_output
系统变量控制
|
--general-log-file |
general_log_file
|
⼀般查询⽇志⽂件的名称。默认值是
host_name
.log
|
--slow-query-log
|
slow_query_log
|
是否启⽤慢查询⽇志。值为
0
(或
OFF
)禁⽤⽇志,为 1 (或
ON
)来启⽤⽇志。⽇志输出⽬录由
log_output
系统变量控制
|
--slow-query-log-file |
slow_query_log_file
|
慢查询⽇志⽂件的名称。默认值是
host_name
-slow.log
|
--long-query-time
|
long_query_time
|
如果查询花费的时间超过这个数秒,服务器将增加Slow_queries状态变量,如果慢速查询⽇志开启,查询将被记录到慢速查询⽇志⽂件中,默认值为10,单位为秒
|
--log-error
|
log_error
|
默认的错误⽇志⽬标。如果⽬标是控制台值为
stderr
,⽬标是⼀个⽂件,值为具体的⽂件名
|
--log-bin
| 指定⽤于⼆进制⽇志⽂件的基本名称 | |
--server-id
| server_id | 该变量指定服务器ID,默认为 1 。 |
--max-connections
| max_connections |
允许客⼾端同时连接的最⼤数
|
使⽤系统变量
- 当使⽤选项设置⼀个数值的变量时,可以带有后缀 K 、 M 或 G (⼤⼩写不限)表⽰ 1024 、1024^2 或 1024^3 ;从MySQL 8.0.14 开始,后缀也可以⽤ T 、 P 和 E 来表⽰ 1024^4 、1024^5 或 1024^6 .⽰例:为服务器指定 256 KB 的排序缓冲区⼤⼩和 1 GB 的最⼤数据包⼤⼩
# 在命令⾏的指定
mysqld --sort-buffer-size=256K --max-allowed-packet=1G
# 在选项⽂件中指定
[mysqld]
sort_buffer_size=256k
max_allowed_packet=1g
- 系统变量有两个作⽤域,分别是 Global (全局)和 Session (会话), Global 全局变量影响服务器的整体操作, Session 会话变量影响各个客⼾端连接的操作。给定的系统变量可以同时具有 全局值和会话值,它们的关系如下:服务器启动时,会将每个全局变量初始化并设置默认值,具体的值可以通过命令⾏或选项⽂件更改;服务器为每个客⼾端维护⼀组 Session 变量,在客⼾端连接时使⽤相应全局变量的当前值进⾏初始化。
- ⼤部分系统变量是动态的,在服务器运⾏时,可以连接 mysql 使⽤ SET 语句设置系统变量,需要指定作⽤域(也可以在前⾯加上@@ 修饰符),然后指定系统变量的名称,如下所⽰:
1.设置全局系统变量最⼤连接数为1000:
set global max_connections = 1000;
set @@global.max_connections = 1000;
2.将全局系统变量持久化到 mysqld-auto.cnf ⽂件(同时设置运⾏时值):
# PERSIST 表⽰持久化的同时设置全局变量的值
set persist max_connections = 1000;
set @@persist.max_connections = 1000;
下表为MySQL的配置文件,配置优先级往下逐级递增,其中 mysqld-auto.cnf ⽂件为配置优先级最高的文件,默认不存在该文件,只有使用 set persist 语句时才生成该文件。
⽂件名 | 说明 |
%WINDIR%\my.ini , %WINDIR%\my.cnf | 全局,%WINDIR%是一个环境变量,它代表Windows操作系统的安装目录,通常等于C:\Windows |
C:\my.ini , C:\my.cnf | 全局 |
BASEDIR\my.ini , BASEDIR\my.cnf | 全局,其中BASEDIR指mysql的安装路径,这是最常用的配置文件 |
defaults-extra-file | 如果存在其他选项⽂件可以通过 --defaults-extra-file 选项指定 |
%APPDATA%\MySQL\.mylogin.cnf | 登录路径选项(仅限客⼾端),%APPDATA% 表⽰应⽤程序数据的⽬录,如C:\Users\[用户名]\AppData\Roaming |
DATADIR\mysqld-auto.cnf | 系统变量 (仅限服务器) |
root@hcss-ecs-9734:/var/lib/mysql# cat mysqld-auto.cnf
{"Version": 2, "mysql_dynamic_parse_early_variables": {"max_connections": {"Value": "1000", "Metadata": {"Host": "localhost", "User": "root", "Timestamp": 1735369777874841}}}}
在mysql中也可以看到 max_connections 已经被设置为1000
# PERSIST 表⽰持久化的同时设置全局变量的值
set persist_only max_connections = 1000;
set @@persist_only.max_connections = 1000;
reset persist if exits system_var_name;
set session time_zone = '+8:00';
set @@session.time_zone = '+8:00';
set @@time_zone = '+8:00';
- 对于数值型的系统变量,⽤带有后缀的值指定时,只适⽤于选项⽅式,⽽不能⽤在 SET ⽅式中;SET ⽅式可以使⽤表达式为系统变量指定值,⽽在选项⽅式中不允许,如下所⽰:
# 选项形式
mysqld --max_allowed_packet=16M # 允许
mysqld --max_allowed_packet=16*1024*1024 # 不允许
# 运⾏时SET形式
set global max_allowed_packet=16M; # 不允许
set global max_allowed_packet=16*1024*1024; # 允许
⽰例:服务器常⽤配置
- 编辑前先备份原始⽂件
- 如果要修改数据⽬录选项建议先停⽌MySQL服务,并把原data⽬录整体复制到新路径,配置完成后重启服务
# MySQL 服务节点
[mysqld]
# MySQL 服务启动后监听的端⼝号
port=3306
# 数据⽬录的路径,这⾥演⽰的是windows下的配置,注意分隔符⽤/,如果是\则需要转义为\\.
# 把原data⽬录整体复制到新路径
datadir=D:/database/MySQL/data8.0
# MySQL 服务器的字符集与排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 新建表时使⽤的存储引擎,windows下已默认配置
default-storage-engine=INNODB
#注意要多敲一个回车键,即光标要在最后一行配置信息的下一行