数据迁移工具

云数据库 RDS 在线数据迁移

概述

针对云数据库 RDS for MySQL 提供在线数据迁移方法,该方法通过控制台完成数据库的迁移。用户不停服务即可完成数据库的在线迁移,此功能支持 MySQL 5.1 以上版本的数据库迁移。

云数据库 RDS 在线数据迁移分为两种方案:全量数据迁移、(全量+增量)数据迁移。

全量数据迁移

云数据库 RDS 用户从自建数据库中将数据完整迁移到云数据库 RDS 中。

(全量+增量)数据迁移

云数据库 RDS 用户不仅可以从自建数据库中将数据完整迁移到云数据库 RDS 中,还可以导入自建数据库中的增量数据,即使云数据库 RDS 中的数据与用户自建数据库中的数据保持实时一致。

在线迁移注意事项

1.云数据库 RDS 不允许以保留关键字命名数据库,因此不支持用户对以保留关键字命名的自建数据库进行迁移,全部保留关键字如下所示,这些数据库将不会显示在迁移列表中。

admin,aurora,replicator,xtrabak,root,mysql,test,eagleye,information_schema,guest,add,analyze,asc,between,blob,call,change,check,condition,continue,cross,current_timestamp,database,day_microsecond,dec,default,desc,distinct,double,each,enclosed,exit,fetch,float8,foreign,goto,having,hour_minute,ignore,infile,insensitive,int1,int4,interval,iterate,keys,leading,like,lines,localtimestamp,longblob,low_priority,mediumint,minute_microsecond,modifies,no_write_to_binlog,on,optionally,out,precision,purge,read,references,rename,require,revoke,schema,select,set,spatial,sqlexception,sql_big_result,ssl,table,tinyblob,to,true,unique,update,using,utc_timestamp,varchar,when,with,xor,all,and,asensitive,bigint,both,cascade,char,collate,connection,convert,current_date,current_user,databases,day_minute,decimal,delayed,describe,distinctrow,drop,else,escaped,explain,float,for,from,grant,high_priority,hour_second,in,inner,insert,int2,int8,into,join,kill,leave,limit,load,lock,longtext,match,mediumtext,minute_second,natural,null,optimize,or,outer,primary,raid0,reads,regexp,repeat,restrict,right,schemas,sensitive,show,specific,sqlstate,sql_calc_found_rows,starting,terminated,tinyint,trailing,undo,unlock,usage,utc_date,values,varcharacter,where,write,year_month,alter,as,before,binary,by,case,character,column,constraint,create,current_time,cursor,day_hour,day_second,declare,delete,deterministic,div,dual,elseif,exists,false,float4,force,fulltext,group,hour_microsecond,if,index,inout,int,int3,integer,is,key,label,left,linear,localtime,long,loop,mediumblob,middleint,mod,not,numeric,option,order,outfile,procedure,range,real,release,replace,return,rlike,second_microsecond,separator,smallint,sql,sqlwarning,sql_small_result,straight_join,then,tinytext,trigger,union,unsigned,use,utc_time,varbinary,varying,while,x509,zerofill,performance_schema

2.自建数据库与目标云数据库 RDS 目标实例中的数据库同名且非空时,不可进行在线迁移。

3.云数据库 RDS 支持识别的字符集为utf8gbklatin1

4.迁移过程中,建议用户暂停使用DDL操作例如:创建表、删除表、修改索引等操作,非强制性需求。

5.用户自建数据库在线迁入的云数据库 RDS 实例需要开通公网权限,开通方法参考使用云数据库 RDS 实例

6.一次批量数据库迁移最多支持对 10 个数据库进行迁移,并且同时进行迁移的数据库需要具有相同的字符集。

迁移步骤

在自建数据库中创建迁移账号

用户可参考如下命令:

grant all privileges on ${db_name}.* to '${user}'@'%' identified by '${password}';

参数说明:

参数 说明
${user} 用户本地自建数据库用户名
${password} 用户本地自建数据库密码
${db_name} 用户本地自建数据库名

设置迁移账号权限

用户可参考如下命令:

grant select,reload,super,lock tables,replication client,replication slave ON *.* TO '${user}'@'%';

注意:

1.该命令对数据库账号${user}赋予select、reload、super、lock tables、replication client、replication slave权限。

2.当用户在在线迁移的时候,若需要进行锁表则自建数据库需要具有lock tables权限。

3.当用户在在线迁移的时候,若选择(全量+增量)迁移则自建数据库需要具有 replication client、replication slave 权限。

数据导入检查项

云数据库 RDS 数据在线迁移方式分为两种:全量迁移、(全量+增量)迁移。针对不同的迁移方式,数据导入的检查项也略有出入,如下表所示:

检查项 检查方法 全量迁移 (全量+增量)迁移
检查云数据库 RDS 实例公网权限 检查云数据库 RDS 实例是否开通公网访问 需要 需要
检查云数据库 RDS 实例连通性 检查云数据库 RDS 实例是否可以正常连接 需要 需要
检查云数据库 RDS 实例数据库 检查云数据库 RDS 实例待迁移数据库是否不存在,或者存在是否为空 需要 需要
检查用户自建数据库连通性 根据用户提供的IP、端口、用户名、密码验证自建数据库的连通性 需要 需要
检查用户自建数据库版本 导出的自建数据库版本需大于或等于云数据库 RDS 数据库版本,(全量+增量)迁移方法的自建数据库版本必须在MySQL 5.1以上(含) 需要 需要
检查用户自建数据库账号权限 select、reload,super,replication client,replication slave 只需要select 需要全部列出权限
检查用户自建库、自建表是否可读 SELECT /!40001 SQL_NO_CACHE / * FROM '${db_name}'.'$(table_name)' limit 1 可读 可读
检查自建库具有导入数据库表锁权限 导入账号具备具有导入数据库表锁权限,具备lock tables权限 锁表状态需要 锁表状态需要
检查自建库开启binlog log_bin = on 不需要 需要
检查自建库设置binlog_format为statement模式 binlog_format = statement 不需要 需要
迁移数据库最大不超过10个 检查用户单次迁移数据库数量不超过10个 需要 需要
检查自建库字符集 检查用户自建数据库的字符集是否为utf8、gbk、latin1 需要 需要
检查批量导入任务的自建库字符集是否一致 用户新增一次批量发起导入任务的所有数据库需要有相同的字符集 需要 需要

将自建数据库迁移至云数据库 RDS

具体操作步骤用户请参考《操作指南 数据库迁移

云数据库 RDS 离线数据迁移

简介

云数据库 RDS 支持用户使用离线的方式完成对自建数据库迁移的需求,离线数据迁移目前区分两种数据源:MySQL 和任意源。针对数据源为 MySQL 的自建数据库推荐用户使用 mysqldump 工具实现迁移,针对数据源为任意源的自建数据库建议用户创建文本文件使用 mysqlimport 工具实现迁移。为了保证数据的同步性,建议用户在使用离线迁移的时候执行停机操作。

数据源为 MySQL

概述

当用户需要迁移的数据源基于 MySQL 数据库时,由于云数据库 RDS 提供的关系型数据库服务与 MySQL 数据库完全兼容,用户将原有数据库迁移到云数据库 RDS 实例的过程,类似于将一个 MySQL 服务器迁移到另一个 MySQL 服务器的过程。这个过程可以使用 mysqldump 工具来实现。

迁移步骤

创建云数据库 RDS 实例

用户创建云数据库 RDS 实例后,系统会为用户提供云数据库 RDS 实例的域名和端口,如:mysql51.example.rds.bj.baidubce.com:3306。具体内容请参考《云数据库 RDS 操作指南 创建云数据库 RDS 实例》。

创建数据库和账号

用户在控制台创建云数据库 RDS 实例之后,继续在其中创建需要的数据库和账号并分配对应的读写权限。具体内容请参考《云数据库 RDS 操作指南 创建数据库》和《云数据库 RDS 操作指南 创建普通账号

用户数据导出

1.利用 mysqldump 导出用户数据

使用 mysqldump 工具从用户的 MySQL 数据源中导出需要导入云数据库 RDS 实例中的数据文件(本步骤仅导出数据,不包括存储过程、触发器及函数)。命令格式如下:

${mysqldir}/bin/mysqldump -h${ip} -P${port} -u${user} -p${password}  --opt --default-character-set=utf8 --hex-blob --tz-utc=0 --compress ${db_name} --skip-lock-tables --skip-triggers > ${datadir}/${db_name}.sql

参数说明:

参数 说明
${mysqldir} 用户本地安装 MySQL 的路径
${ip} 用户本地 MySQL 服务的 IP 地址
${port} 用户本地 MySQL 服务的端口
${user} 用户本地 MySQL 数据库用户名
${password} 用户本地 MySQL 数据库密码
${db_name} 用户本地需要迁移的自建数据库名
${datadir} 用户本地备份生成的文件路径
${db_name}.sql 用户本地备份生成的文件名

2.利用 mysqldump 导出存储过程、触发器和函数

使用 mysqldump 工具从用户的 MySQL 数据源中导出需要导入云数据库 RDS 实例中的存储过程、触发器和函数(若数据库中没有使用存储过程、触发器和函数,可跳过此步骤),在导出存储过程、触发器和函数时,需要将 definer 去掉。命令格式如下:

${mysqldir}/bin/mysqldump -h${ip} -P${port} -u${user} -p${password}  --opt --default-character-set=utf8 --hex-blob --tz-utc=0 --compress ${db_name} -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > ${datadir}/triggerProcedure.sql

有关 mysqldump 的更多信息,请参考 MySQL 文档中的