一、背景 {#heading-1}
MeterShere 作为持续接口测试平台,功能涵盖功能、接口、UI、性能测试,在大型的测试团队和项目中会积累大量的测试用例数据及测试报告,随着时间的积累,数据会越来越大,mysqldump 迁移方式的时间成本会越来越高,异常风险也越大,在生产环境有限的升级窗口下,需考虑更加高效、安全的迁移方式。
本文以 MeterSphere V1 外置 mysql5.7 迁移到 V2 外置 mysql8场景为例,介绍如何通过 Rsync 方式实现 Mysql 数据库的物理迁移。
二、规划 {#heading-2}
-
数据库在迁移前务必进行备份
-
评估并保证磁盘空间充足
-
确定原数据库和新数据库的目录保持一致。(mysql 的日志等其它文件目录在修改完配置文件并生效后,会存储在 mysql 的数据库实例里,如果目录不一致,迁移过去之后会导致 mysql 实例中存储的日志路径和实际迁移的目录不一致,需要创建软链接)
-
规划好升级窗口,因为物理迁移是直接迁移 mysql 目录,正式开始迁移前,需停止原数据库和新数据库,防止数据库文件有产生读写导致迁移失败。
-
确保 mysql 配置文件(my.cnf)关键参数一致,这里主要检查 字符集和 sqlmode。
三、迁移过程 {#heading-3}
原数据库(mysql_source):10.50.x.79
新数据库(mysql_dest):10.50.x.11
-
暂停 MeterSphere 服务,暂停 mysql_source 和 mysql_dest 的数据库服务。
-
配置 Rsync (Rsync 配置可参考:rsync详解)。
-
备份 data 和 log 目录
备份 mysql_source上的 data 和 log 目录,防止迁移失败,mysql 无法启动。
cd /mysql/3306/
mv data data-bak
mv log log-bak
- 迁移
在 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
-
修改 data 和 log 目录的用户权限
- chown -R mysql:mysql data
- chown -R mysql:mysql log
-
启动 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 ,访问页面进行验证。