背景
由于MySQL数据库是自建在K8s上的,现在有三个痛点。
- 数据库扩容影响全部访问数据库的功能模块。
- 数据库维护需要运维人力,例如数据库定时备份方案,高可用。
后续又引入双云灾备的需求,双云数据库的同步又是一个问题。所以急需将数据库迁移到云商,通过数据传输方案进行数据同步。
流程
把本地切换到云商
- 整理所有mysql数据库连接
- mysql数据库修改配置,支持binlog
- 数据同步
- 修改配置文件数据库相关配置,完成切换
云商 数据迁移 云商
- 新建 数据全量+实时迁移 任务
- 新建 切换前 数据全量迁移 任务 (注意事项:订单库不迁移,冷备切换时迁移)
- 切换验证
1 验证可行性
首先在 测试环境 验证本地数据库迁移至云商的可行性以及各个步骤。
1.1 获取所有 MySQL 数据库连接的服务
这里使用 mysql 作为 grep 的关键词是因为所有的自建数据库的名字都是包含 mysql 的。
这一步的目的:根据实际情况手动筛选出来,迁移到云商MySQL之后,需要修改配置文件的服务。
#!/bin/bash
# 命名空间
namespace='mingzhu-simulation'
# 文件
filename="mysql.txt"
# 获取cm列表
for i in $(kubectl get cm -n ${namespace} | grep -v 'NAME' | awk -F ' ' '{print $1}'); do
if [ -z "$(kubectl get cm ${i} -n ${namespace} -o yaml | grep mysql)" ]; then
continue
else
echo "====${i}=====" >> ${filename}
kubectl get cm ${i} -n ${namespace} -o yaml | grep mysql >> ${filename}
echo "" >> ${filename}
echo "" >> ${filename}
fi
done
获取到了服务的列表。
1.2 获取所有数据库实例的所有库
实际环境有4个mysql数据库。需要统计四个数据库分别需要哪些库需要同步,哪些库因为业务关系不能同步。
console-mysql-lstest
xxx
xxx
xxx
compass-mysql-latest
xxx
xxx
xxx
...
1.3 迁移工具迁移到云商
各个云商的应该都有这个数据迁移的工具。使用方法大致一样。
- 根据实际数据量购买合适规格的产品。
- 根据实际情况选择全量 ,全量+增量,还是双向等方案。并配置好两边数据库的连接方式。
需要对数据库开启外网访问,并且开启白名单。
- 点击购买,会进行预检查。提示没有开始binlog,不能进行增量备份。
1.4 开启 binlog
- 修改MySQL的配置文件
mysql.cnf: |-
[mysqld]
# 新增以下配置
server_id=2
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 30
- 再次预检查,就通过了。
- 开启数据同步
- 数据同步完成,并增量已经同步,会有已同步的标记。
1.5 修改和验证 服务数据库连接配置
测试环境可以直接操作修改,生产环境需要申请窗口期进行配置修改。
例如:
mysql.yaml: |
dsn: xxuserxxx:xxxpassxxx@tcp(console-mysql-latest:3306)/utc_biz?charset=utf8&parseTime=True&loc=UTC
修改为:
mysql.yaml: |
dsn: xxuserxxx:xxxpassxxx@tcp(10.1.2.3:3306)/utc_biz?charset=utf8&parseTime=True&loc=UTC
并重启服务,并验证数据库是否可以正常访问。
注意⚠️:
- 每个云商的数据迁移服务的功能都有差异,需要分别验证。
- 需要验证迁移两个自建mysql实例到一个云商mysql的可行性。
- 还需要验证双云mysql之间数据同步的可行性。
2 实际两个环境上云操作
- 先将主环境的数据库同步到云商mysql
- 修改主环境的mysql连接配置到云商mysql
- 将主环境的云商mysql数据同步到备环境的云商mysql
- 配置备环境的mysql连接配置到云商mysql
- 建立双向的数据库同步
2.1 准备工作
- 获取所有 MySQL 数据库连接的服务。(参考1.1)
- 获取所有数据库实例的所有库。(参考1.2)
- 开启所有数据库实例的外网连接方式和开启白名单。
- 购买同地区的MySQL实例。
2.2 申请操作窗口
根据业务运营协调出可以操作的时间窗口。
2.3 开启binlog,数据全量+增量同步
- 在可操作窗口内进行修改数据库的配置,开启binlog。(参考1.4)
- 使用迁移工具将数据迁移至云商。(参考1.3)
2.4 修改服务配置
- 根据数据量多少,决定和开启binlog一次完成还是分开两次申请。(参考2.2)
- 修改服务连接MySQL数据库的配置。(参考1.5)
重点关注⚠️:
所有的任务状态均变成已同步,才可以修改mysql配置。
优化mysql连接的配置:将原来使用root用户登录的mysql连接修改为子用户的方式。
CREATE USER 'utc_transdispatch'@'%' IDENTIFIED BY 'utc_transdispatch';
GRANT ALL ON utc_transdispatch.* TO 'utc_transdispatch'@'%';
FLUSH PRIVILEGES;
如果只是上云,到这一步已经完成了。如果还要做双云数据库同步,还需要继续配置数据迁移的操作。
3 双云数据库同步
待补充。。
参考:
踩坑:
自建mysql使用5.7和8.0两个版本的mysql。导致服务连接mysql启动报错:authentication plugin 'caching_sha2_password'。
修改用户登录的加密方式:
https://www.cnblogs.com/YorkZhangYang/p/17705230.html
ALTER USER 'maintenance_test'@'%' IDENTIFIED WITH mysql_native_password BY 'maintenance_test';