MySQL 变量与参数说明
本文汇总 mysql_ansible 公开入口里最常改、最容易影响结果的变量,帮助你在部署、备份、恢复与监控接入前快速定位配置入口。
1. 通用变量
文件:playbooks/common_config.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
mysql_version | 9.7.0 | MySQL 版本,当前公开能力主要围绕 5.7、8.0、8.4、9.7 |
mysql_port | 3306 | 实例端口,也是多个派生路径和服务名的计算基线 |
server_specs | auto | 服务器规格,可保持自动探测,也可写成 4c8g 这类固定规格 |
db_type | mysql | 数据库类型,支持 mysql / percona / greatsql |
mysql_packages_dir | ../downloads/ | MySQL 安装包目录,离线包通常放在这里 |
mysql_user / mysql_group | mysql / mysql | MySQL Linux 运行用户和组 |
mysql_data_dir_base | /database/{{ db_type }} | MySQL 数据、日志、配置目录的根路径 |
mysql_service_name | mysql{{ mysql_port }} | systemd 服务名,默认随端口变化 |
mysql_admin_user / mysql_admin_password | admin / Dbbot_admin@8888 | 管理账号与密码 |
mysql_rple_user / mysql_rple_password | repl / Dbbot_repl@8888 | 复制账号与密码 |
mysql_backup_user / mysql_backup_password | backup / Dbbot_backup@8888 | 备份账号与密码 |
mysql_monitor_user / mysql_monitor_password | monitor / Dbbot_monitor@8888 | mysqld_exporter 使用的监控账号 |
mysql_cluster_admin_user / mysql_cluster_admin_password | clusteradmin / Dbbot_clusteradmin@8888 | InnoDB Cluster 的 mysqlshell 管理账号 |
mysql_router_user / mysql_router_password | mysqlrouter / Dbbot_mysqlrouter@8888 | MySQL Router 读取 metadata 用的账号 |
mysql_character_set_server | utf8mb4 | 服务端字符集 |
mysql_transaction_isolation | READ-COMMITTED | 默认事务隔离级别 |
mysql_default_time_zone | +8:00 | MySQL 默认时区 |
mysql_max_connections | 1000 | 最大连接数 |
mysql_binlog_format | row | binlog 格式,MGR / InnoDB Cluster 场景尤其关键 |
fcs_auto_download_packages | true | 控制节点是否自动下载 MySQL / Shell / Router / Exporter 包 |
fcs_allow_custom_mysql_package | false | 是否允许临时使用未纳入 support 矩阵的 MySQL Server 安装包名 |
fcs_allow_dbbot_default_passwd | false | 是否允许使用 dbbot 公开默认密码继续执行 |
fcs_create_mysql_fast_login | true | 是否为 mysql 用户生成 db3306 这类快捷登录命令 |
fcs_backup_script_create_backup_user | true | 备份脚本部署时是否自动创建备份账号 |
fcs_role_mysqld_exporter_create_monitor_user | true | 部署 mysqld_exporter 时是否自动创建监控账号 |
fcs_mysql_use_jemalloc | false | 是否显式启用 jemalloc preload |
fcs_mysql_allow_bundled_jemalloc_fallback | false | 当系统仓没有 jemalloc 时,是否允许退回仓内 bundled RPM |
fcs_use_greatsql_ha | true | 是否启用 GreatSQL HA 相关能力 |
fcs_run_post_deploy_checks | true | 是否在部署入口结束后自动执行 post-deploy 验收 |
dbbot_confirmation_input | "" | 自动化场景可设为 confirm,人工执行时建议保持空值 |
说明:
- 公开默认密码遵循
Dbbot_<user>@8888/Dbbot_<linux_user>@9999约定;默认fcs_allow_dbbot_default_passwd: false,因此 Playbook 会在pre_tasks阶段拦截公开默认密码。 fcs_mysql_use_jemalloc当前默认值是false,也就是默认走系统内存分配器;只有显式开启时才会处理jemalloc。- 当
fcs_mysql_use_jemalloc: true时,dbbot 会优先尝试系统仓jemalloc;只有你显式设置fcs_mysql_allow_bundled_jemalloc_fallback: true,才允许退回仓内旧版 RPM。 mysql_binlog_format在通用配置里可改,但mgr.yml会强制要求row。fcs_run_post_deploy_checks默认开启;若需临时跳过部署后验收,可显式传入-e fcs_run_post_deploy_checks=false。- 当前自动验收已覆盖
single_node.yml、master_slave.yml、mgr.yml、innodb_cluster.yml、innodb_cluster_router.yml、mha_go.yml、mha.yml、exporter 安装入口和unsafe_uninstall.yml;备份与恢复入口暂不在这组自动验收范围内。 - 主从 post-deploy 验收默认要求复制延迟为
0秒;dbbot_post_check_replication_max_lag_seconds仅用于临时放宽验收阈值。 - MySQL Server 安装包元数据会在探测目标 OS 后由
dbbotctl support解析。可用dbbotctl support packages查询指定版本 / OS 对应的包名、下载地址和 checksum。 - MySQL
9.7.x不支持 CentOS/RHEL 7 系列;这类系统请使用 MySQL8.4.x。
2. 目录与安装包变量
文件:playbooks/advanced_config.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
mycnf_dir | {{ mysql_data_dir_base }}/{{ mysql_port }}/etc | my.cnf 所在目录 |
datadir | {{ mysql_data_dir_base }}/{{ mysql_port }}/data | 数据目录 |
tmpdir | {{ mysql_data_dir_base }}/{{ mysql_port }}/tmp | 临时目录 |
binlog_dir / relaylog_dir | {{ mysql_data_dir_base }}/{{ mysql_port }}/log | binlog 与中继日志目录 |
redolog_dir | {{ datadir }} | redo 日志目录,默认回到 datadir |
socket / mysqlx_socket | 基于 datadir 派生 | MySQL / MySQL X socket 路径 |
mysql_package | 由 dbbotctl support 解析 | Playbook 实际使用的 MySQL / Percona / GreatSQL Server 安装包名 |
mysql_package_download_url | 由 dbbotctl support 解析 | fcs_auto_download_packages: true 时使用的下载地址 |
mysql_package_checksum_type / mysql_package_checksum | 由 dbbotctl support 解析 | 有 checksum 元数据时用于校验 Server 安装包 |
mysql_custom_package | "" | fcs_allow_custom_mysql_package: true 时临时指定的 MySQL Server 安装包文件名 |
mysql_custom_package_download_url | "" | 自定义包可选下载地址;为空时只检查本地文件 |
mysql_custom_package_checksum_type / mysql_custom_package_checksum | none / - | 自定义包可选 checksum,支持 md5 / sha256 / sha512 |
建议:
- 只有在自定义目录布局或恢复到特殊路径时,才建议修改目录变量。安装包元数据通常应来自
dbbotctl support;离线部署时,请把文件名与 support 矩阵一致的安装包放到mysql_packages_dir。 - 临时测试未纳入 support 矩阵的 MySQL Server 包时,显式设置
fcs_allow_custom_mysql_package: true并在advanced_config.yml中填写mysql_custom_package。该能力适用于所有包含 MySQL Server 部署的入口,不只限于单机部署;它只覆盖 Server 主包名,mysql_version、目标 OS、拓扑支持判断以及 MySQL Shell / Router 包名仍来自 support 矩阵。 unsafe_uninstall.yml的清理范围也依赖这里的目录变量;在当前默认布局下,它会删除实例数据目录和日志目录,但保留实例my.cnf。
3. 主从、传统 MHA 与 MHA-Go 变量
文件:
playbooks/vars/var_master_slave.ymlplaybooks/vars/var_mha.ymlplaybooks/vars/var_mha_go.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
master_ip | 192.0.2.131 | 主库 IP |
slave_ips | ['192.0.2.132', '192.0.2.133'] | 从库 IP 列表 |
sub_nets | 192.0.2.% | MySQL 可信网段、可信域或可信 IP |
manager_ip | 传统 MHA: 192.0.2.133; MHA-Go: {{ master_ip }} | manager 所在节点 |
net_work_interface | ens33 | MHA VIP 绑定网卡名 |
vip | 192.0.2.130 | MHA VIP |
vip_netmask | 32 | MHA VIP netmask |
mha_go_semi_sync_policy | disabled | MHA-Go 半同步检查策略 |
mha_go_writer_endpoint_enabled | false | MHA-Go 是否启用 VIP 写入口切换 |
说明:
master_ip、slave_ips必须和 inventory 中的主机一致。- 传统 Perl MHA 的
manager_ip仍建议放在从库节点上,且不能与master_ip相同。 - MHA-Go 的
manager_ip可以是master_ip或slave_ips中任一节点,当前默认是master_ip。 - 当前实际变量名是
slave_ips,不是replica_ips。 net_work_interface的默认值只是示例网卡名。启用传统 MHA VIP 或 MHA-Go VIP 写入口前,请先用ip route或ip addr确认真实网卡;dbbot192.168.161.*默认测试 inventory 中的样例环境通常是enp1s0,但具体网卡随测试 profile 变化。
4. MGR 变量
文件:playbooks/vars/var_mgr.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
mysql_binlog_format | row | 覆盖通用配置,确保 MGR 使用 row |
mysql_mgr_port | 自动计算,例如 33061(当 mysql_port=3306) | Group Replication 通信端口 |
mysql_mgr_hosts | ['192.0.2.131', '192.0.2.132', '192.0.2.133'] | MGR 成员列表 |
sub_nets | 192.0.2.% | 可信来源范围 |
greatsql_vip | 192.0.2.134 | GreatSQL HA 场景的 VIP |
greatsql_net_work_interface | ens33 | GreatSQL HA 绑定 VIP 的网卡 |
greatsql_netmask | 255.255.255.255 | GreatSQL HA netmask |
greatsql_group_replication_arbitrator | false | 是否启用仲裁节点 |
greatsql_group_replication_arbitrator_hosts | ['192.0.2.133'] | 仲裁节点列表 |
说明:
greatsql_*变量只在db_type: greatsql场景生效。greatsql_net_work_interface需要按真实网卡名覆盖;dbbot192.168.161.*默认测试 inventory 中的样例环境通常是enp1s0,但具体网卡随测试 profile 变化。mgr.yml默认交付结果是单主模式。
5. InnoDB Cluster 与 Router 变量
文件:
playbooks/vars/var_innodb_cluster.ymlplaybooks/vars/var_innodb_cluster_router.yml
InnoDB Cluster 变量:
| 变量 | 默认值 | 作用 |
|---|---|---|
innodb_cluster_name | myCluster{{ mysql_port }} | Cluster 名称 |
innodb_cluster_primary | 192.0.2.131 | 初始 primary 节点 |
innodb_cluster_members | ['192.0.2.131', '192.0.2.132', '192.0.2.133'] | Cluster 成员列表 |
mysql_mgr_port | 自动计算,例如 33061(当 mysql_port=3306) | InnoDB Cluster 底层仍使用 MGR 端口 |
mysql_mgr_hosts | {{ innodb_cluster_members }} | MGR 成员列表 |
mysql_cluster_admin_user / mysql_cluster_admin_password | clusteradmin / Dbbot_clusteradmin@8888 | mysqlshell 管理账号 |
Router 变量:
| 变量 | 默认值 | 作用 |
|---|---|---|
router_enable_ha | false | 是否启用 keepalived 形式的 Router HA |
router_bootstrap_server | 192.0.2.131 | Router bootstrap 连接的 Cluster 节点 |
router_linux_glibc_tag | auto | Router 安装包 glibc 标签;可显式设为 glibc2.17 或 glibc2.28 |
router_vip | 192.0.2.150 | Router HA VIP |
router_net_work_interface | ens33 | VIP 绑定网卡 |
router_ha_nodes | 两节点示例 | Router HA 节点、角色和优先级列表 |
router_vip_netmask | 32 | Router VIP netmask |
router_ports | rw/ro/http... 字典 | Router 暴露端口、是否启用和是否纳入健康检查 |
max_total_connections | 1000 | Router 总连接上限 |
router_rest_api_bind_address | 127.0.0.1 | Router REST API 监听地址 |
router_rest_api_auth_mode | file | REST API 鉴权方式 |
router_rest_api_file_user / router_rest_api_file_password | router_api_user / Dbbot_router_api_user@8888 | 文件鉴权账号 |
说明:
router_ha_nodes只有在router_enable_ha: true时才有意义。router_net_work_interface需要按 Router 节点真实网卡名覆盖;dbbot192.168.161.*默认测试 inventory 中的样例环境通常是enp1s0,但具体网卡随测试 profile 变化。router_linux_glibc_tag: auto下,Router9.7.x使用glibc2.28,Router8.4.x使用glibc2.17;如需固定包名,可显式指定 glibc 标签。router_ports.http.port默认是8443,后续mysqlrouter_exporter也默认从这个 REST API 取数。
6. Exporter 变量
文件:
playbooks/vars/var_node_exporter_install.ymlplaybooks/vars/var_mysqld_exporter_install.ymlplaybooks/vars/var_router_exporter_install.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
node_exporter_install | true | 是否安装 node_exporter |
node_exporter_port | 9100 | node_exporter 监听端口 |
node_exporter_install_type | dbbot | 安装方式,支持 dbbot / pmm / package |
node_exporter_package | node_exporter-1.10.2.linux-amd64.tar.gz | package 模式下使用的官方安装包名 |
mysqld_exporter_install | true | 是否安装 mysqld_exporter |
mysqld_exporter_topology | auto | 拓扑类型,支持 auto / ms / mgr |
mysqld_exporter_port | auto | 导出器端口,可自动计算或显式指定 |
mysqld_exporter_port_auto_base | 9104 | 自动端口的起始基线 |
mysqld_exporter_port_auto_mysql_base | 3306 | 自动端口换算时对应的 MySQL 基线端口 |
mysqld_exporter_install_type | dbbot | 安装方式,支持 dbbot / pmm / package |
mysqld_exporter_package | mysqld_exporter-0.18.0.linux-amd64.tar.gz | package 模式下使用的官方安装包名 |
mysqlrouter_exporter_install | true | 是否安装 mysqlrouter_exporter |
mysqlrouter_exporter_install_type | dbbot | 安装方式,支持 dbbot / package |
mysqlrouter_exporter_version | 0.0.1 | 默认独立项目版本号 |
mysqlrouter_exporter_package | mysqlrouter_exporter_0.0.1_linux_amd64.tar.gz | package 模式下使用的 release 包名 |
mysqlrouter_exporter_url | https://github.com/fanderchan/mysqlrouter_exporter/releases/download/v0.0.1/mysqlrouter_exporter_0.0.1_linux_amd64.tar.gz | package 模式下使用的 release 包下载地址 |
mysqlrouter_exporter_port | 9165 | mysqlrouter_exporter 监听端口 |
mysqlrouter_exporter_api_base_url | https://127.0.0.1:8443/api/20190715 | Router REST API 地址 |
mysqlrouter_exporter_api_user / mysqlrouter_exporter_api_password | router_api_user / Dbbot_router_api_user@8888 | Router API 认证账号 |
mysqlrouter_exporter_insecure_skip_verify | true | 是否跳过 Router HTTPS 证书校验 |
端口自动计算规则:
- 当
mysqld_exporter_port: auto时,端口按9104 + mysql_port - 3306计算。 - 当
mysqld_exporter_topology: auto时,dbbot 会自动检查performance_schema.replication_group_members,有成员就按mgr处理,否则按ms处理。 mysqlrouter_exporter默认依赖 Router REST API;如果你修改了 Router 的http端口或绑定地址,这里也要同步调整。mysqlrouter_exporter_install_type: dbbot使用发行包内置二进制;package则按mysqlrouter_exporter_url下载独立项目 release 包。
6.1 依赖链速记
Router 链路:
innodb_cluster.ymlinnodb_cluster_router.ymlrouter_exporter_install.ymldbbotctl exporter register -t routerrouter_unsafe_uninstall.yml(需要清理 Router 时)
MHA 链路:
mha.ymlmha_unsafe_uninstall.yml(需要同时清理传统 MHA 和 MySQL 实例时)mha_go.ymlmha_go_unsafe_uninstall.yml(需要同时清理 MHA-Go 和 MySQL 实例时)
MySQL exporter 链路:
single_node.yml/master_slave.yml/mgr.ymlnode_exporter_install.ymlmysqld_exporter_install.ymldbbotctl exporter register -t nodedbbotctl exporter register -t mysql
7. MySQL 8.4 clone 备份变量
文件:playbooks/vars/var_backup_script_8.4.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
backup_topology | auto | 备份拓扑识别方式,支持 auto / ms / mgr / mic / single |
backup_scope | primary_only | 备份目标范围,支持 primary_only / replica_one / replica_all / all / selected |
backup_preferred_host | "" | 当 backup_scope=selected 时必填 |
backup_base_dir | /backup | 备份根目录 |
backup_script_dir | {{ mysql_data_dir_base }}/scripts | 备份脚本目录 |
backup_script_path | {{ backup_script_dir }}/backup_clone{{ mysql_port }}.sh | clone 备份脚本路径 |
backup_schedule_script_path | {{ backup_script_dir }}/backup_schedule{{ mysql_port }}.sh | 调度脚本路径 |
backup_purge_script_path | {{ backup_script_dir }}/backup_purge{{ mysql_port }}.sh | 清理脚本路径 |
backup_config_path | {{ backup_script_dir }}/backup_clone{{ mysql_port }}.conf | 备份配置文件路径 |
backup_keep_full | 2 | 保留的全量快照数 |
backup_keep_binlog_days | 7 | 保留的 binlog 天数 |
backup_cron | 0 2 * * * | 定时任务表达式 |
说明:
backup_scope=selected时,backup_preferred_host必须显式填写。backup_cron目前会在pre_tasks中做 5 段 cron 格式校验。
8. MySQL 8.4 PITR 恢复变量
文件:playbooks/vars/var_restore_pitr_8.4.yml
| 变量 | 默认值 | 作用 |
|---|---|---|
restore_mode | new_instance | 恢复模式,支持 new_instance / existing_instance |
backup_snapshot_id | "" | 备份快照标识,必填 |
backup_source_mysql_port | 3306 | 备份源实例端口 |
restore_target_mysql_port | 3388 | 恢复目标实例端口 |
backup_root_dir | /backup | 恢复机上的备份根目录 |
backup_dir | {{ backup_root_dir }}/mysql{{ backup_source_mysql_port }}/{{ backup_snapshot_id }} | 目标恢复目录 |
enable_pitr | true | 是否在 clone 恢复后继续回放 binlog |
pitr_target_time | "" | 基于时间点停止恢复,格式 YYYY-MM-DD HH:MM:SS |
pitr_target_gtid | "" | 基于单个 GTID 停止恢复,格式 uuid:seq |
pitr_target_gtid_inclusive | false | GTID 模式下是否包含目标 GTID 本身 |
restore_mysql_host / restore_mysql_user / restore_mysql_password | 127.0.0.1 / {{ mysql_admin_user }} / {{ mysql_admin_127_password }} | 回放 binlog 时连接恢复实例的认证信息 |
restore_allow_nonempty_datadir | false | 是否允许清空前已有数据目录并继续恢复 |
restore_mysql_start_timeout | 300 | 恢复阶段等待 MySQL 启动的超时秒数 |
mysql_port | {{ restore_target_mysql_port }} | 让恢复流程中的 MySQL 端口与目标端口保持一致 |
恢复前约束:
enable_pitr: true时,pitr_target_time与pitr_target_gtid必须二选一。restore_pitr_8.4.yml只支持db_type: mysql且mysql_version: 8.4.x。
9. 5.7 备份脚本与卸载说明
backup_script.yml 和 unsafe_uninstall.yml 没有单独的 vars/*.yml 参数文件,主要依赖以下配置来源:
- 5.7 备份脚本依赖
common_config.yml与advanced_config.yml - 是否自动创建备份账号由
fcs_backup_script_create_backup_user控制 - 卸载剧本删除的目录范围,来自
advanced_config.yml中的datadir、tmpdir、binlog_dir、relaylog_dir、redolog_dir - 卸载目标实例本身,由
common_config.yml当前生效的mysql_port决定
补充说明:
- 当前
backup_script.yml面向 MySQL5.7,备份保留策略主要写在 role 模板里,而不是公开变量文件里。 - 当前
unsafe_uninstall.yml会保留软件基目录、Linux 用户和my.cnf,但删除范围仍由advanced_config.yml决定;在当前默认布局下,它会删除实例数据目录和日志目录。执行前仍要求人工确认。