一、背景
MeterShere 作为持续接口测试平台,功能涵盖功能、接口、UI、性能测试,在大型的测试团队和项目中会积累大量的测试用例数据及测试报告,随着时间的积累,数据会越来越大,mysqldump 迁移方式的时间成本会越来越高,异常风险也越大,在生产环境有限的升级窗口下,需考虑更加高效、安全的迁移方式。
本文以 MeterSphere V1 外置 mysql5.7 迁移到 V2 外置 mysql8场景为例,介绍如何通过 Rsync 方式实现 Mysql 数据库的物理迁移。
二、规划
1. 数据库在迁移前务必进行备份
2. 评估并保证磁盘空间充足
3. 确定原数据库和新数据库的目录保持一致。(mysql 的日志等其它文件目录在修改完配置文件并生效后,会存储在 mysql 的数据库实例里,如果目录不一致,迁移过去之后会导致 mysql 实例中存储的日志路径和实际迁移的目录不一致,需要创建软链接)
4. 规划好升级窗口,因为物理迁移是直接迁移 mysql 目录,正式开始迁移前,需停止原数据库和新数据库,防止数据库文件有产生读写导致迁移失败。
5. 确保 mysql 配置文件(my.cnf)关键参数一致,这里主要检查 字符集和 sqlmode。
三、迁移过程
原数据库(mysql_source):10.50.x.79
新数据库(mysql_dest):10.50.x.11
1. 暂停 MeterSphere 服务,暂停 mysql_source 和 mysql_dest 的数据库服务。
2. 配置 Rsync (Rsync 配置可参考:rsync详解)。
3. 备份 data 和 log 目录
备份 mysql_source上的 data 和 log 目录,防止迁移失败,mysql 无法启动。
cd /mysql/3306/
mv data data-bak
mv log log-bak
4. 迁移
在 mysql_dest 机器上 执行 Rsync 迁命令迁移 data 和 log 目录,data 和 log 目录分开迁移。
1. rsync -av --progress ms_sync@10.50.x.79::msbackup /mysql/3306/data --password-file=/etc/rsync.pass --log-file=/data/log/rsync.log
2. rsync -av --progress ms_sync@10.50.x.79::msbackup /mysql/3306/log --password-file=/etc/rsync.pass --log-file=/data/log/rsync.log
5. 修改 data 和 log 目录的用户权限
1. chown -R mysql:mysql data
2. chown -R mysql:mysql log
6. 启动 mysql_dest 的 mysql
## 启动
/bin/sh /mysql/3306/base/bin/mysqld_safe --defaults-file=/mysql/3306/etc/my.cnf --user=mysql &
## 登录验证
cd /mysql/3306/base/bin/ && ./mysql -upxxx -pxxx -S/mysql/3306/data/mysql.sock/bin/sh /mysl/3306/base/bin/mysqld_safe --defaults-file=/mysql/3306/etc/my.cnf --user=mysql & ## 登录验证 cd /mysql/3306/basebin/ && ./mysql -upxxx -pxxx -S/mysql/3306/data/mysql.sock
如果是 mysql5.7 升级到 mysql8 ,首次启动后 mysql 会自动升级目录,大概要 10 分钟左右。
7. 修改 MeterSphere 的 /opt/metersphere/.env 中数据库地址(数据库用户名、密码不用修改,迁移目录后 mysql 用户也会被覆盖),启动 MeterSphere ,访问页面进行验证。