一、背景
TiDB 兼容 MySQL,实际项目中常常需要做各类测试工作:
- 测试将 MySQL 迁移到 TiDB
- 测试 DM ,需要部署上游 MySQL
手动部署 MySQL 操作繁琐、易出错,dbops 提供了一套专注于部署 MySQL 的自动化脚本工具,简化整个流程。
二、环境需求
- Linux x86_64 系统
- SSH 可直连目标主机,并具备 root 或 sudo 权限
- Python 3
三、软件下载安装
下载 dbops 二进制包,并解压到 /usr/local/
:
dbops_version="1.11.20250429"
wget https://gitee.com/fanderchan/dbops/releases/download/dbops.${dbops_version}/dbops.${dbops_version}-Linux-x86_64.tar.gz
tar -zxvf dbops.${dbops_version}-Linux-x86_64.tar.gz -C /usr/local/
四、Ansible 安装与初始化
dbops 内置了 portable Ansible 以保证兼容性:
cd /usr/local/dbops/portable-ansible-v0.5.0-py3
sh setup_portable_ansible.sh
source ~/.bashrc
ansible --version
五、dbops 配置
编辑主机清单 hosts.ini
,指定目标 MySQL 节点:
vi /usr/local/dbops/mysql_ansible/inventory/hosts.ini
[dbops_mysql]
172.16.201.42 ansible_user=root ansible_ssh_pass='root密码'
若需要自定义 MySQL 版本、监听端口等参数,可修改 common_config.yml
:
vi /usr/local/dbops/mysql_ansible/playbooks/common_config.yml
mysql_version: "8.0.24"
mysql_port: 3308
...
server_specs: "1c1g"
...
可选:突破版本限制
dbops.1.11.20250429 版本仅支持部署 MySQL 8.0.28+,为了突破这个限制,需修改:
vi /usr/local/dbops/mysql_ansible/playbooks/pre_tasks/validate_common_config_setting.yml
修改 8.0.28 -> 8.0.24
修改模板默认值,注释低版本不兼容的参数:
vi /usr/local/dbops/mysql_ansible/roles/mysql_server/templates/8.0/my.cnf.j2
#performance_schema_consumer_events_statements_cpu
#terminology_use_previous=BEFORE_8_0_26
六、一键部署
dbops 不仅仅支持部署单机 MySQL,其他的部署操作,请查看作者的官方文档。
- single_node.yml 部署单实例 MySQL
- master_slave.yml 部署主从架构 MySQL
- mha.yml 部署 MHA 架构 MySQL
- mgr.yml 部署 MGR 架构 MySQL
切换到 playbooks 目录,执行单节点部署:
cd /usr/local/dbops/mysql_ansible/playbooks
ansible-playbook single_node.yml
部署输出信息中,没有 failed 即部署成功。
七、登录与验证
切换到 mysql 用户,并使用 dbops 提供的快捷命令登录:
[root@vm172-16-201-42 playbooks]# su mysql
[mysql@vm172-16-201-42 playbooks]$ db3308
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
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
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)]>
八、后话
已给 dbops 作者提 issue ,已在 dbops.1.12.20250529 版本支持 MySQL 8.0.21 ~ 8.0.27 的部署支持。