MySQL-03-配置

MySQL 配置主要通过选项文件、命令行选项实现,支持动态调整变量和多服务器部署

优先级遵循 “动态变量> 持久化变量 > 命令行选项 > 配置文件选项 > 预编译默认值

配置核心目标

  1. 通过选项文件和命令行选项配置 MySQL 服务器
  2. 完成 MySQL 客户端的参数配置
  3. 动态修改 MySQL 运行时设置
  4. 在同一主机上部署并启动多个 MySQL 服务器

配置选项优先级

  1. 动态设置变量(运行时调整,即时生效)
  2. 持久化变量(运行时设置,重启后仍有效)
  3. 命令行选项(启动时指定,优先级高于配置文件)
  4. 配置文件选项(预定义配置,无需重复输入)
  5. 预编译默认值(系统内置,未指定配置时生效) image-20251124095422245

选项命名规范

  • 配置文件:小写字母,单词间用短横线 “-” 或下划线 “_” 分隔
  • 命令行:与配置文件名称一致,前缀加双短横线 “–”
  • 运行时变量:与配置文件名称一致,单词间仅用下划线 “_” 分隔
配置文件 命令行 运行时变量
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),例如: image-20251124095710527

选项文件相关命令行参数

  • –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 权限 image-20251124095934098
0 次浏览