在 TiDB 项目实践中,大家常会遇到这类需求:比如验证 MySQL 到 TiDB 的迁移效果、测试 DM(数据迁移工具)同步能力 —— 而这些场景都离不开上游 MySQL 环境的支撑。但手动部署 MySQL 实在太繁琐了:要装依赖、改配置、调参数,稍有疏忽就会踩坑,重复操作更是浪费时间。
好在 TiDB 生态里有个「效率黑科技」——dbops 工具集,它专门针对 MySQL 部署做了自动化封装,从环境初始化到实例启动,全程脚本化操作,新手也能轻松上手。今天就带大家一步步玩转 dbops,快速搭建 MySQL 测试环境。
一、先搞清楚:dbops 需要什么环境?
在开始前,先确认目标主机满足以下基础条件,避免后续踩坑:
- 系统架构:Linux x86_64(dbops 二进制包仅支持该架构,CentOS 7/8、Ubuntu 18.04 + 都适用)
- 权限要求:能通过 SSH 直连目标主机,且登录用户具备
root权限或sudo权限(需要操作系统级配置) - 依赖组件:主机已安装 Python 3(一般系统默认自带,可通过
python3 --version验证)
二、第一步:下载并解压 dbops 工具包
dbops 提供预编译的二进制包,直接下载解压即可,无需编译。这里以当前稳定版1.11.20250429为例(若需更新版本,可去dbops Gitee 仓库查看最新版):
bash
# 1. 定义dbops版本(可根据需要替换为最新版)
dbops_version="1.11.20250429"
# 2. 下载二进制包(若wget未安装,先执行 yum install -y wget 或 apt install -y wget)
wget https://gitee.com/fanderchan/dbops/releases/download/dbops.${dbops_version}/dbops.${dbops_version}-Linux-x86_64.tar.gz
# 3. 解压到/usr/local目录(推荐路径,便于后续调用)
tar -zxvf dbops.${dbops_version}-Linux-x86_64.tar.gz -C /usr/local/
解压完成后,会在/usr/local/下生成dbops目录,工具的核心脚本都在这里面。
三、第二步:初始化内置 Ansible(解决兼容性问题)
dbops 的自动化部署依赖 Ansible,但不同环境的 Ansible 版本可能冲突。好在 dbops 内置了「Portable Ansible」(便携版),无需单独安装,只需执行初始化脚本即可:
bash
# 1. 进入Portable Ansible目录
cd /usr/local/dbops/portable-ansible-v0.5.0-py3
# 2. 执行初始化脚本(会自动配置环境变量)
sh setup_portable_ansible.sh
# 3. 加载环境变量(让ansible命令生效)
source ~/.bashrc
# 4. 验证Ansible是否正常(出现版本信息即成功)
ansible --version
正常输出会类似这样:ansible [core 2.12.x],说明 Ansible 环境已就绪。
四、第三步:配置目标主机与 MySQL 参数
dbops 通过配置文件指定「部署哪里」和「部署什么样的 MySQL」,核心是两个文件:hosts.ini(主机清单)和common_config.yml(MySQL 参数)。
1. 配置主机清单:告诉 dbops 要部署到哪台机器
编辑hosts.ini文件,添加目标 MySQL 节点的信息:
bash
# 编辑主机清单文件
vi /usr/local/dbops/mysql_ansible/inventory/hosts.ini
在文件中添加如下内容(根据实际环境修改 IP、用户名和密码):
ini
# dbops_mysql是固定组名,不可修改
[dbops_mysql]
172.16.201.42 # 目标主机的IP地址
ansible_user=root # 登录目标主机的用户(需root或sudo权限)
ansible_ssh_pass='YourRootPassword' # 登录密码(若用密钥登录,可删除这行并配置ansible_ssh_private_key_file)
小贴士:如果密码包含特殊字符(如
!@#),一定要用单引号包裹,避免解析错误。
2. 自定义 MySQL 参数:版本、端口等
如果需要修改 MySQL 的默认配置(比如版本、端口),编辑common_config.yml文件:
bash
# 编辑MySQL通用配置文件
vi /usr/local/dbops/mysql_ansible/playbooks/common_config.yml
关键参数说明(根据需求修改):
yaml
# 要安装的MySQL版本(默认8.0.28,下文会讲如何支持更低版本)
mysql_version: "8.0.24"
# MySQL监听端口(默认3306,避免冲突可改如3308)
mysql_port: 3308
# 服务器资源规格(根据主机配置调整,格式:CPU核数c+内存G数,如1c1g、2c4g)
server_specs: "1c1g"
# 其他参数(如数据目录、root密码等,可按需修改)
# mysql_data_dir: "/data/mysql"
# mysql_root_password: "YourMySQLRootPass"
3. 可选:突破 MySQL 版本限制(针对 1.11 版本)
dbops 1.11.20250429版本默认只支持部署 MySQL 8.0.28 及以上,如果需要部署 8.0.24 这类低版本,需要手动修改两处配置,避免参数校验失败:
(1)修改版本校验规则
bash
# 编辑版本校验文件
vi /usr/local/dbops/mysql_ansible/playbooks/pre_tasks/validate_common_config_setting.yml
找到如下行,将8.0.28改为目标版本(如8.0.24):
yaml
# 原内容:
- name: Validate MySQL version
assert:
that: mysql_version is version('8.0.28', '>=')
msg: "MySQL version must be >= 8.0.28"
# 修改后:
- name: Validate MySQL version
assert:
that: mysql_version is version('8.0.24', '>=')
msg: "MySQL version must be >= 8.0.24"
(2)注释低版本不兼容的参数
低版本 MySQL(如 8.0.24)没有performance_schema_consumer_events_statements_cpu等参数,若不注释会导致启动失败:
bash
# 编辑MySQL配置模板
vi /usr/local/dbops/mysql_ansible/roles/mysql_server/templates/8.0/my.cnf.j2
找到如下两行,在前面加#注释:
ini
# performance_schema_consumer_events_statements_cpu
# terminology_use_previous=BEFORE_8_0_26
五、一键部署 MySQL:支持多架构
dbops 支持多种 MySQL 架构,覆盖不同测试场景,核心部署脚本都在playbooks目录下:
single_node.yml:单实例 MySQL(最常用,适合简单测试)master_slave.yml:主从架构(测试数据同步)mha.yml:MHA 架构(测试高可用切换)mgr.yml:MGR 架构(测试组复制)
这里以「单实例部署」为例,执行如下命令:
bash
# 1. 切换到playbooks目录
cd /usr/local/dbops/mysql_ansible/playbooks
# 2. 执行单节点部署脚本
ansible-playbook single_node.yml
部署过程会自动完成「依赖安装、MySQL 下载、配置初始化、服务启动」等操作,耐心等待即可。判断部署成功的标准:输出日志中没有failed=1的提示,只有ok和changed。
六、登录验证:确认 MySQL 实例正常
部署成功后,dbops 提供了「快捷登录命令」,无需手动输入端口和密码,非常方便:
bash
# 1. 切换到mysql系统用户(dbops自动创建,管理MySQL进程)
su mysql
# 2. 用快捷命令登录(格式:db+端口号,如3308端口对应db3308)
db3308
若成功登录,会看到 MySQL 欢迎信息,类似这样:
plaintext
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.24 MySQL Community Server - GPL
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
(vm172-16-201-42:3308)admin@localhost-16:51:49 [(none)]>
此时可以执行select version();验证 MySQL 版本,或show databases;查看默认数据库,确认实例正常运行。
最后:好消息!新版本已支持低版本 MySQL
我之前给 dbops 作者提了「支持 MySQL 8.0.21~8.0.27」的需求,目前作者已在dbops.1.12.20250529版本中实现了该功能。如果你的需求是部署这些低版本 MySQL,直接下载最新版 dbops 即可,无需手动修改版本校验和配置模板,更省心。
总结
dbops 作为 TiDB 生态下的 MySQL 部署工具,最大的优势就是「自动化」和「兼容性」:内置 Ansible 解决环境冲突,脚本化操作减少手动失误,还支持多架构部署,完美匹配 TiDB 迁移测试、DM 工具验证等场景。如果你也常被手动部署 MySQL 的繁琐困扰,不妨试试 dbops,效率会提升不少!