项目业务需要异地迁移数据库mysql5.7,几种方案线上dump下载本地还原,硬盘邮递,线上dts迁移,实际用到了阿里云的dts业务迁移。
前期用一个测试库5G数据做迁移测试,阿里云业务找到dts数据迁移功能,新建任务,填写源库和目标库信息,阿里有支持的云平台,不支持的平台和个人公网源库接入方式直接选择公网IP,需要合作伙伴做好源库的公网IP和端口开放及添加阿里云按照几个大区华东,华南等区一大堆的白名单。需要权限:
后面选择需要迁移的数据库>箭头拉过去,确认好配置源库及目标库信息以后开始高级配置基本上 默认的选项:一般线上数据还是要增量校验的,整体同步以后增量运行一段时间做同步。
一路下来做最后预检查,一般会全部通过,这样的需要改源库的binlog格式
接着购买链路规格
开启任务
任务校验:
多个实例同时迁移互不影响,dts迁移速度取决于公网速度。
迁移完成释放实例:
释放实例完成以后dts传输完成,需要检验一下数据;DBA不在粗略检验一下表数据;
#!/bin/bash
echo -n "mysql username: ";read username
echo -n "mysql host: ";read host
echo -n "mysql port: ";read port
echo -n "mysql password: " ; stty -echo ; read password; stty echo ; echo
mysql -u $username -p"$password" -h$host -p$port -NBe "show databases;" |grep -v 'information_schema'|grep -v 'performance_schema'|grep -v 'mysql'| while read database;do
mysql -u $username -p"$password" -h$host -p$port -NBe "show tables;" $database |while read -a row ;do
tablename=${row[0]}
countline=`mysql -u$username -p"$password" -h$host -p$port -NBe "select count(*) from $database.$tablename"`
\#counttables=`mysql -u$username -p"$password" -NBe "select count(*) from information_schema.tables where table_schema like '%_db_abc%'"`
echo "$database.$tablename count is $countline" >>count1.csv
done
counttables=`mysql -u$username -p"$password" -h$host -p$port -NBe "select count(*) from information_schema.tables where table_schema like '%_db_abc%'"`
echo "$database-----tables count is $counttables">>count1.csv
done
结果类似这样:
源库和目标库对比一下应该是完全对上的,至此mysql数据库迁移完成。