写点什么

TiDB 生态效率神器:dbops 一键搞定 MySQL 部署,测试迁移再也不头疼

原文来源:https://tidb.net/blog/5a988d5c


#


在 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的提示,只有okchanged

六、登录验证:确认 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 10Server 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,效率会提升不少!


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB 生态效率神器:dbops 一键搞定 MySQL 部署,测试迁移再也不头疼_MySQL 迁移_TiDB 社区干货传送门_InfoQ写作社区