MySQL 配置主要通过选项文件、命令行选项实现,支持动态调整变量和多服务器部署
优先级遵循 “动态变量> 持久化变量 > 命令行选项 > 配置文件选项 > 预编译默认值
配置核心目标
- 通过选项文件和命令行选项配置 MySQL 服务器
- 完成 MySQL 客户端的参数配置
- 动态修改 MySQL 运行时设置
- 在同一主机上部署并启动多个 MySQL 服务器
配置选项优先级
- 动态设置变量(运行时调整,即时生效)
- 持久化变量(运行时设置,重启后仍有效)
- 命令行选项(启动时指定,优先级高于配置文件)
- 配置文件选项(预定义配置,无需重复输入)
- 预编译默认值(系统内置,未指定配置时生效)

选项命名规范
- 配置文件:小写字母,单词间用短横线 “-” 或下划线 “_” 分隔
- 命令行:与配置文件名称一致,前缀加双短横线 “–”
- 运行时变量:与配置文件名称一致,单词间仅用下划线 “_” 分隔
| 配置文件 | 命令行 | 运行时变量 |
|---|---|---|
| datadir | –datadir | datadir |
| log-error | –log-error | log_error |
| default_password_lifetime | –default_password_lifetime | default_password_lifetime |
选项文件详解
使用选项文件的优势
- 无需每次启动服务器都在命令行输入选项
- 操作更便捷,复杂选项可减少输入错误
- 集中管理服务器配置,便于查阅
- 支持分组配置,可创建多个差异化配置方案
- 支持同一主机启动多服务器,或切换测试 / 开发环境配置
选项文件位置与标准名称
- Linux 系统:默认使用 my.cnf 文件
- 全局配置:/etc/my.cnf(所有用户共用)
- 用户自定义:用户主目录下的.my.cnf 文件
- 环境变量指定:若设置 MYSQL_HOME,会搜索 $MYSQL_HOME/my.cnf
- Windows 系统:默认使用 my.ini 文件(也兼容 my.cnf)
- 全局配置路径:ProgramData\MySQL\MySQL Server 8.0、MySQL 安装目录、C:\Windows、C:\ 等
选项文件组
- 配置文件中的选项按 “组” 组织,每组以 [组名] 开头,组名对应目标程序或类别
- 常用组名称及作用:
- [client]:适用于所有客户端程序,常用于指定通用连接参数
- [mysql]:仅适用于 mysql 客户端
- [mysqldump]:仅适用于 mysqldump 客户端
- [server]:适用于所有服务器程序或脚本
- [mysqld]:仅适用于 mysqld 服务器程序
- [mysqld-8.0]:仅适用于 8.0 版本的 mysqld 服务器
选项文件读取规则
- 程序按固定顺序读取配置文件,后续文件的选项会覆盖前面文件的同名选项
- 同一文件中,后续组的同名选项会覆盖前面组的设置
- 查看程序读取的组:执行 “程序名 –help”(服务器需加 –verbose),例如:

选项文件相关命令行参数
- –no-defaults:不读取任何选项文件
- –defaults-file=file_name:仅使用指定的选项文件
- –defaults-extra-file=file_name:读取标准选项文件后,额外加载该文件
加载额外选项文件的指令
- !include file_name:加载指定的额外选项文件
- !includedir directory:加载指定目录下所有后缀为.cnf(Linux)或.ini(Windows)的文件
- 目录中文件的读取顺序不固定,需避免选项冲突
查看选项文件中的配置
- 使用 my_print_defaults 命令,例如查看 [mysql] 和 [client] 组的选项:
- my_print_defaults mysql client
- 输出示例:–user=myusername –password=secret –host=localhost –port=3306
同一主机启动多个 MySQL 服务器
应用场景
- 测试 MySQL 新版本功能
- 测试复制和高可用性方案
- 将不同客户端分组分配到不同服务器
实现方式
- 通过命令行选项启动 mysqld 或 mysqld_safe
- 为每个服务器指定独立的选项文件(使用 –defaults-file)
- 用 mysqld_multi 工具管理多个配置相似的服务器
- 通过 systemd 服务管理器管理多个服务实例
必须唯一的配置项
- 数据目录:每个服务器需通过 –datadir 指定独立路径
- 连接层参数:–port(端口)、–bind-address(绑定地址)、–socket(套接字)、–shared-memory-basename 需唯一
- 同一端口可绑定不同 IP 地址,实现同一端口运行多个实例
- 日志和 PID 文件:默认存储在数据目录(已唯一),若自定义路径需指定唯一名称
- InnoDB 表空间和日志文件:默认存储在数据目录,自定义路径时需指定唯一位置
系统变量
服务器系统变量基础
- 运行中的服务器将配置选项称为系统变量,未手动配置的变量使用预编译默认值
- 可通过 Performance Schema 表查询变量:
- global_variables:全局系统变量
- session_variables:当前会话的系统变量
- variables_by_thread:每个活跃会话的系统变量
- persisted_variables:持久化的全局系统变量
- variables_info:每个变量的最新设置来源
系统变量作用域
- 全局变量(GLOBAL):影响服务器整体运行,通过 SET GLOBAL 变量名 或 SET @global. 变量名 修改
- 示例:innodb_buffer_pool_size、max_connections(仅全局)
- 会话变量(SESSION):影响单个客户端连接,通过 SET SESSION 变量名 或 SET @session. 变量名 修改
- 示例:timestamp、error_count(仅会话)
- 兼具两种作用域的变量:全局值为新连接的默认值,可独立修改会话值
- 示例:sort_buffer_size、join_buffer_size
动态系统变量
- 无需修改选项文件和重启服务器,运行时即可调整
- 修改全局变量:影响所有新建立的连接,不影响已存在的连接
- 修改会话变量:仅影响当前客户端连接,无需特殊权限
- 调整全局变量需具备 SYSTEM_VARIABLES_ADMIN 权限
