MySQL 服务器简介

通常所说的 MySQL 服务器指的是mysqld程序,当运⾏mysqld后对外提供MySQL 服务,这个专题的内容涵盖了以下关于MySQL 服务器以及相关配置的内容,包括:

  • 服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选项。
  • 服务器系统变量。反映了启动选项的当前状态和值,其中⼀些变量可以在服务器运⾏时修改。
  • 服务器状态变量。这些变量包含了有关运⾏时操作的计数器和统计信息。
  • 服务器如何管理客⼾端连接。
  • 配置和使⽤时区⽀持。
  • 服务器端帮助功能。

服务器配置和默认值

mysqld 有很多选项和系统变量可以在启动时进⾏配置,要查看服务器的默认选项和系统变量值,可以执⾏以下命令:

bash 复制代码
mysqld --verbose --help
bash 复制代码
# 查看所有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

查看服务器在运⾏时系统变量的值,连接到MySQL并执⾏以下语句:

sql 复制代码
show variables [like ...];

其中可以跟 like 语句和通配符查找某些具体的系统变量,例如:


查看服务器在运⾏时的⼀些统计和状态指⽰器,连接到MySQL并执⾏以下语句:

sql 复制代码
show status like [...];

其中可以跟 like 语句和通配符查找某些具体的 统计和状态指⽰器,例如:

系统变量和状态信息也可以使⽤ mysqladmin命令来查看:

bash 复制代码
mysqladmin variables
mysqladmin extended status

关于服务器的选项、系统变量、状态变量参考以下官⽹列
https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html

系统变量和选项

当通过mysqld启动数据库服务器时,可以通过选项⽂件或命令⾏中提供选项,但是,在⼤多数情况下,为确保服务器每次运⾏时都使⽤相同的选项,最好的⽅法是在选项⽂件中指定相应的选项,
mysqld从选项⽂件中的 [mysqld] 和 [server] 组(节点)中读取选项内容。
mysqld接受的选项可以通过 mysqld --verbose --help 查看,列表中的有些项⽬是可以在服务器启动时设置的系统变量,系统变量可以在连接MySQL后使⽤ SHOW VARIABLES 语句查看,但有些内容只在 --help 中存在,使⽤ SHOW VARIABLES 时并没有显⽰,这是因为它们只是选项⽽不是系统变量。
注意:选项值可以通过命令⾏和选项⽂件设置,部分系统变量可以通过SET语句动态设置值。
常⽤选项如下:

|--------------------------|-------------------------|--------------------------------------------------------------------------------|
| 选项 | 系統变量 | 说明 |
| --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 的最⼤数据包⼤⼩
bash 复制代码
# 在命令⾏的指定
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:

sql 复制代码
set global max_connections = 1000;
set @@global.max_connections = 1000;

2.将全局系统变量持久化到 mysqld-auto.cnf ⽂件(同时设置运⾏时值):

sql 复制代码
# 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 | 系统变量 (仅限服务器) |

而 mysqld-auto.cnf 文件位于 /var/lib/mysql 路径下,其内容如下

bash 复制代码
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


3.将全局系统变量持久化到 mysqld-auto.cnf ⽂件(不设置运⾏时值):

sql 复制代码
# PERSIST 表⽰持久化的同时设置全局变量的值
set persist_only max_connections = 1000;
set @@persist_only.max_connections = 1000;

删除持久化的系统变量可以使⽤语句

sql 复制代码
reset persist if exits system_var_name;

4.设置 Session 系统变量,时区为"+8:00":

sql 复制代码
set session time_zone = '+8:00';
set @@session.time_zone = '+8:00';
set @@time_zone = '+8:00';
  • 对于数值型的系统变量,⽤带有后缀的值指定时,只适⽤于选项⽅式,⽽不能⽤在 SET ⽅式中;SET ⽅式可以使⽤表达式为系统变量指定值,⽽在选项⽅式中不允许,如下所⽰:
sql 复制代码
# 选项形式
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; # 允许

⽰例:服务器常⽤配置

Linux系统下编辑 /etc/mysql/my.cnf
Windows系统下打开MySQL Server程序安装路径/my.ini,例如我电脑上为D:\mysql\MySQL Server 8.0\my.ini
注意:

  • 编辑前先备份原始⽂件
  • 如果要修改数据⽬录选项建议先停⽌MySQL服务,并把原data⽬录整体复制到新路径,配置完成后重启服务

在 [mysqld] 节点下添加以下内容

bash 复制代码
# 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
#注意要多敲一个回车键,即光标要在最后一行配置信息的下一行
相关推荐
Gnevergiveup12 分钟前
路由交换技术-思科拓扑搭建
服务器·vpn·思科·vlan划分·拓扑搭建
搬码临时工15 分钟前
别人如何访问我的内网呢? 设置让外网访问内网本地服务器和指定端口应用的几种方式
服务器·网络·智能路由器
yangzx的网工日常15 分钟前
网络的那些事——初级——OSPF(1)
运维·服务器·网络
明月看潮生23 分钟前
青少年编程与数学 01-011 系统软件简介 18 Navicat数据库管理工具
数据库·青少年编程·系统软件·编程与数学
眸笑丶1 小时前
.NET Core 数据库连接字符串加密与解密
数据库·oracle·.netcore
layman05283 小时前
openEuler 虚拟机中 Shell 脚本实现自动化备份与清理实践
数据库·oracle·自动化
大连好光景6 小时前
你管这玩意叫网络?网络图解
linux·服务器·网络
奔跑的小十一9 小时前
JDBC接口开发指南
java·数据库
熊大如如10 小时前
PostgreSQL 创建只读账户
数据库·postgresql
Zzzone68310 小时前
MySQL故障排查与生产环境优化
mysql