MySql迁移工具

1、服务概述

DRC(全称Data Replication Center)MySQL迁移工具是阿里巴巴DBA团队和RDS团队研发的数据库在线迁移工具,旨在帮助用户方便、快速地将已有MySQL数据迁移至RDS上来。通过DRC数据迁移的流程请参考下图。

2、迁移执行步骤

2.1 工具下载

1、【点此下载】RDS DRC压缩文件。或通过地址http://aliyun_portal_storage.oss.aliyuncs.com/help/rdsdrcmigrate.zip下载,目前该工具只支持64位系统。

* 文件下载解压后,请务必阅读readme文件,并按照说明修改文件属性才可使用。

2、请解压至用户任意一台Linux服务器的选定位置(需要能够访问RDS数据库以及源数据库)。DRC MySQL迁移工具包括2个部分:

  • rds目录:数据迁移工具,包含了RDS DRC 迁移工具的主体
  • drccheck目录:数据校对工具

3、本说明文档中默认的文件解压目录为/var/rdsdrcmigrate,如果用户需改变了解压路径,请按照实际解压路径进行操作

2.2迁移前数据库帐号准备

1、通过RDS控制台创建目标数据库及迁移帐号(需读写权限),数据库名需和源数据库名保持一致(帐号可以不一致),如:数据库名migrate,RDS帐号名migrate(需读写权限)。请参考下图:

2、在源数据库(用户数据库)中创建迁移,并赋予相应的权限(读写权限)
创建迁移帐号

使用MySQL root权限账户登陆源数据库(用户数据库),在数据库提示符下执行:GRANT ALL PRIVILEGES ON *.* TO 'migrate'@'%' IDENTIFIED BY ‘password’,然后执行:FLUSH PRIVILEGES刷新权限,完成创建migrate帐号并赋予读写权限,请参考下图:

3、创建数据一致性校验帐号(不推荐使用和迁移账户一个帐号做一致性校验)

在源数据库(用户数据库)提示符下执行:GRANT SELECT ON *.* TO rnd IDENTIFIED BY 'rnd123' ,然后执行:FLUSH PRIVILEGES刷新权限,完成创建rnd帐号并赋予只读权限。

在RDS管理控制台按第1步步骤创建一致性校验用户rnd,帐号类型选择只读权限。 源数据库和RDS数据库中的一致性校验的帐号和密码必须保持一致。
2.3更新RDS数据库迁移配置文件
请打开/var/rdsdrcmigrate目录下rds.conf文件,修改其中的需要迁移的库、忽略的库、本地数据库连接参数、RDS数据库连接参数、临时数据目录和日志路径的具体参数为真实的值。文件打开如下(需要修改的地方已标红):

# RDS数据库迁移配置文件
# By Alibaba DBA Team & Aliyun RDS Team
# @2012-10-31
# 数据库过滤列表
# 当存在迁移库名列表时, 只传输列表中的库, 如果某个库同时在迁移列表和忽略列表中, 该表不会被迁移
# 当不存在迁移库列表时(将MIGRATE_DBS和后续行注释掉), 迁移列表被设置为所有的数据库(通过show databases查看)
# 需要迁移的库名, 可以注释掉
MIGRATE_DBS=(
MigrateExampleDB
)

# 忽略的库名, 必须存在, 列表可以为空
IGNORE_DBS=(
test
mysql
information_schema
IgnoreExampleDB
)

# 本地数据连接参数
LOCAL_MYSQL_HOST=user_db_ip
LOCAL_MYSQL_PORT=user_db_port
LOCAL_MYSQL_USER=user_db_username
LOCAL_MYSQL_PASS=user_db_password

# RDS数据库连接参数
RDS_MYSQL_HOST=rds_connect_address
RDS_MYSQL_PORT=rds_port
RDS_MYSQL_USER=migrate_username
RDS_MYSQL_PASS=migrate_password

#临时数据目录,该目录是DRC工具安装的服务器上的目录,用于存放数据库中待迁移的数据,请保证有足够的空间
TEMP_DIR=/var/rdsdrcmigrate

#日志路径,该目录是DRC工具安装的服务器上的目录
LOG_FILE=/var/rdsdrcmigrate/migrate.log

2.4执行迁移

1、切换工作目录至/var/rdsdrcmigrate,执行命令如:
cd /var/rdsdrcmigrate

2、执行bash rds start &开始迁移。如果用户没有做过全量迁移,会自动做全量迁移,并进行增量迁移。如果曾经使用此工具执行过全量迁移,重复全量迁移并继续执行增量迁移(将覆盖所有先有RDS数据库)。

3、使用tail -f /var/rdsdrcmigrate/migrate.log查看状态,如果migrate.log中最后出现“Already sync up successfully , sleep 300 seconds”这样的信息,表示同步已经完成。

4、数据同步已完成后,请停止应用,等待5分钟左右后,migrate.log中将再次出现“Already sync up successfully , sleep 300 seconds”(使用tail -f /var/rdsdrcmigrate/migrate.log查看)。即表示迁移全部完成,即可切换应用至RDS。

附:迁移命令:

执行迁移命令:
bash rds start .....start database migrate......

查看迁移状态命令:
bash rds status .....show migrate status......

停止迁移命令:
bash rds stop .....stop database migrate......

2.5使用drccheck进行数据校对
drccheck可以对两个静态的数据库进行高速的校验,也可以对两个线上服务中的数据库动态的校验。静态校验:要求停止数据库对外服务,数据不再发生变更。优点:校验的速度快。动态校验:数据库不停止,数据表也不会被锁定。优点:不影响正常使用。缺点:速度比静态校验慢,会增加线上数据库负载,需要控制好负载参数。

1、将当前目录指向/var/rdsdrcmigrate/drccheck目录下,执行命令如:
cd /var/rdsdrcmigrate/drccheck

2、配置drccheck工具。执行vi /var/rdsdrcmigrate/drccheck/cnf.sh编辑/var/rdsdrcmigrate/drccheck/cnf.sh文件,请将标红的配置项更新成真实的值,请不要移除配置文件中的双引号,配置如下:
db="db_name" #需要一致性校验的数据库名
user="rnd" #一致性校验的帐号,为了防止发生意外错误,请使用拥有只读权限的用户
passwd="rnd123" #一致性校验帐号的密码
host_m="172.18.111.157" 源数据库(用户数据库)ip地址
port_m= 3306 源数据库(用户数据库)端口号
host_s="test.mysql.rds.aliyuncs.com " 目标数据库(RDS数据库)连接地址
port_s= 3306 目标数据库(RDS数据库)端口号

3、生成新的一致性校验工具,执行:
bash cnf.sh > drc.cnf

4、执行校验

启动静态校验, 利用的是Checksum 语句,如果数据在变化中,可能会产生死锁,线上库不建议使用,执行命令如下:
bash check_static.sh

启动动态校验, 读取数据,逐行校验,不锁库,不锁表,但是要注意配置负载参数(请参考下文中负载参数说明),避免对线上负载影响过大,执行命令如下:
bash check_dynamical.sh

对于上一次校验失败的表再次从新校验,执行命令如下:

bash check_again.sh

中途停止校验,执行命令如下:

bash killall.sh

5、查看报告

测试汇总报告会呈现在控制台界面上,同时会保留在文件中。

report_dynamical_check.txt 动态校验结果报告
report_static_check.txt 静态校验结果报告
report_check_again.txt 重复校验结果报告

上一次的测试结果会备份在*.old文件和目录中,请即时备份需要的文件,上上次测试结果会被删除。

具体差异报告会保留在目录 ./diff

修复SQL语句会保留在目录 ./sql

修复SQL语句的命名规则为:

应在源数据库上执行的修复语句为: 表名.hostname.master.sql

应在目标数据库上执行的修复语句为: 表名.hostname.slave.sql

一般情况下是不需要修改源数据库的,如果源数据库和目标数据库记录有差异,是以源数据库为参考,修改目标库数据。但是如果目标数据库中有源数据库没有的记录,那么源数据库的修复SQL文件才会产生。

附:目录说明及负载参数说明

./tmp 目录只是一个临时目录

./scandiff 文件是一个C语言编写的逐行扫描程序,用来校验两个表之间的具体差异,它的源文件在./src目录中

数据库负载和校验速度调优的相关配置,在校验启动脚本check_dynamical.sh中,有三个参数,参考设置如下(适合于采用纯SAS硬盘的服务器,其他的服务器可以酌情调整),请用户根据自己的实际情况灵活调节:

MAX_CHECK_DETAIL_PROCESS=3 校验启动的进程数,每个进程负责校验一个表

CHECK_DETAIL_THREAD_COUNT=4 每个校验进程的最大线程数

CHECK_ROUND=15 对于不同的记录,重复校验的次数(每次重复间隔时间不少于5秒)

这三个数值越大,校验的速度越快,数据库负载越大。数值越小数据库负载越小,对其他访问数据库的程序影响就更小。

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓