更新时间:2024-07-23
功能说明
DMP 2.1.7及以上版本的DTS支持MySQL数据库迁移,底层调用mydumper工具,完成数据的迁移,包括迁移对象结构、数据,支持全量迁移或全量+增量迁移,全量+增量意味着迁移过程中如果产生了业务数据,也是可以同步到目标库中的。
前提条件
- DMP能访问到目标端数据库,且目标数据库为由DMP部署出来的MySQL RDS。
- 目标端和源端数据库服务器网络连通,如果有防火墙,则需要放通数据库端口(如3306)。
- 源端的MySQL数据库版本为5.6、5.7、8.0。
注意事项
- MySQL迁移之前,尽量关闭源库长查询操作,否则可能导致迁移失败。
- 当前版本不会迁移触发器trigger。
- 源库是MySQL5.6.10版本时,不支持进行增量迁移。
- 禁止在目标库配置文件/etc/my.cnf设置登录密码。
- 不支持跨大版本迁移,如MySQL5.7迁移至MySQL8.0,可以MySQL5.6迁移至5.7。
- 不支持降版本迁移。
- 按库迁移单次任务最多可以选择50个库。
操作步骤
详情可以参考《数据库迁移场景》章节。
- 进入[数据库/数据库工具/数据库迁移(DTS)]页面,点击<新建迁移任务>按钮,根据需要选择“全量迁移”或者“全量+增量迁移”。
选项说明如下:
表46迁移选项说明
选项 |
说明 |
迁移类型 |
- 全量迁移:完整迁移源数据库的所选数据库表和及其完整数据,适用于能够接受较长停机时间的业务迁移、备份等场景 - 全量+增量迁移:除迁移初始全量数据外,还将实时同步增量数据至目标数据库,适用于业务连续性要求较高的业务迁移、备份等场景 |
设置迁移数据库 |
- 填写源库 IP、数据库端口,迁移用户和密码,选择目标端数据库 - 连通性测试通过后,点击<下一步> |
设置迁移参数 |
- 源数据库环境:根据实际情况选择 - 迁移范围:默认“整个实例”,可选按数据库迁移(最多选 50 个库) - 迁移对象:表是默认必选项,用户、函数与存储过程、视图、事件可选项,公有云 RDS 默认不选择事件 - 并发数:加大并发可提升迁移速度,但可能对源端性能有影响 - “SSL 安全连接”:是否启用 SSL 安全连接 - 迁移后数据校验:迁移后对库、表进行存在性以及内容校验,会延迟迁移时间,根据数量不同而时间不同 |
并发数 |
加大并发可提升迁移速度,但可能对源端性能有影响 |
迁移服务(DTS-VM)配置 |
用于执行迁移任务的工具,包括数据导出与导入、日志抽取与重放等;不会占用迁移配额,将占用少量计算和存储资源,网络要与源库、目标库、DMP 连通,默认迁移完成后将自动删除该云主机并释放对应的资源 |
- 点击<确定>按钮确认配置信息,自动创建DTSVM和进行预检查。
表47预检查项说明
检查项 |
说明 |
迁移实例检测 |
目标库实例状态检测:保证数据库处于正常运行的状态;不通过解决方案:重新选择正常运行的目标库,或者解决数据库异常。 |
正在迁移实例冲突检测 |
检测当前迁移实例是否与正在迁移的其他迁移任务产生冲突;不通过解决方案:等待冲突的迁移实例迁移结束,再执行当前迁移。 |
数据库连通性检测 |
目标库数据库连通性检测:目标库是RDS,正常情况连通性正常;目标库连通性不通过解决方案:按照连通性错误提示,检查用户密码和端口是否正常。 |
源数据库连通性检测 |
确保目标库可以通过客户端远程连接源库服务端;源库连通性不通过解决方案:按照连通性错误提示,检查用户密码和端口是否正常。 |
用户权限检测 |
检测当前源库迁移用户是否具有如下权限;警告选项:确保迁移用户拥有更多数据库权限,如果缺少,请手动进行grant |
数据库架构检测 |
源数据库架构检测:主从或者单机结构;目标数据库架构检测:主从或者单机结构。 |
数据库版本检测 |
源库版本低于5.6,禁止迁移;目标库版本低于5.6,禁止迁移;不支持从高版本到低版本进行迁移。 |
数据库字符集检测 |
禁止不同字符集数据库之间进行迁移;不通过解决方案:更改目标库字符集[character_set_server=源库字符集]。 |
存储引擎检测 |
默认存储引擎检测:检测源库和目标库的默认存储引擎default_storage_engine;警告选项:更改默认存储引擎[default_storage_engine=源库默认存储引擎]。 |
默认临时存储引擎检测 |
检测源库和目标库的默认存储引擎default_tmp_storage_engine;警告选项:更改默认存储引擎[default_tmp_storage_engine=源库默认临时存储引擎]。 |
InnoDB严格检查模式 |
测试目标库是否开启innodb_strict_mode;警告选项:更改参数[innodb_strict_mode=ON]。 |
系统信息检测 |
表名大小写检测:检测源库和目标库表名大小写敏感是否一致lower_case_table_names;不通过解决方案:[lower_case_table_names=源库值]。 |
迁移对象检测 |
计算每个schema的迁移数据行数,并显示。 |
SQL_MODE检测 |
检测源库和目标库的SQL_MODE约束参数是否一致;不通过:将目标库SQL_MODE参数设置与源库一致。 |
时区检测 |
对比time_zone时区参数是否一致;警告选项如果time_zone参数设置为SYSTEM,则对比system_time_zone参数;警告选项;如果源库tiem_zone参数设置未非标准时区,则自动安装扩展时区包。 |
源库信息检测 |
主从同步并发参数检测:主从迁移时,禁止slave_parallel_workers;不通过解决方案:目标库设置参数[slave_parallel_workers=0]。 |
event列表检测 |
如果源库开启event_scheduler则目标库必须开启此参数;不通过解决方案:目标库设置参数[event_scheduler=ON]。 |
目标库信息检测 |
检测目标库是否存在自建user;如果存在,给予警告,确保目标库是初始数据库;检测目标库是否存在自建database;如果存在,给予警告,确保目标库是初始数据库。 |
日志检测 |
binlog日志自动清理时间:建议expire_logs_days时间设置3天以上。 |
源库参数log_slave_updates检测 |
当数据库是主从时,建议开启log_slave_updates;不通过解决方案:开启参数[log_slave_update=on]。 |
目标库参数log_slave_updates检测 |
当数据库是主从时,建议开启log_slave_updates;不通过解决方案:开启参数[log_slave_update=on]。 |
server_id检测 |
server_id:数据库server_id 确保源库和目标库不一致;不通过解决方案:修改目标库server_id,并重启数据库服务; server_uuid: 数据库server_uuid确保源库和目标库不一致;(克隆的机器server_uuid可能一致)。 |
GTID检测 |
源库GTID_MODE检测:确保开启GTID_MODE。不通过:开启GTID_MODE=ON; 源库enforce_gtid_consistency检测:确保开启enforce_gtid_consistency。不通过:开启enforce_gtid_consistency=ON; 目标库库GTID_MODE检测:确保开启GTID_MODE。不通过:开启GTID_MODE=ON; 目标库enforce_gtid_consistency检测:确保开启enforce_gtid_consistency。不通过:开启enforce_gtid_consistency=ON。 |
binlog检测 |
源库log_bin检测:确保开启log_bin;不通过:开启log_bin=on。 源库binlog_format检测:建议binlog_format=ROW,否则提示警告。源库binlog_row_image检测:确保binlog_row_image=FULL;不通过:更改参数[binlog_row_image=FULL]。 目标库log_bin检测:确保开启log_bin;不通过:开启log_bin=on。 目标库binlog_format检测:建议binlog_format=ROW,否则提示警告。目标库binlog_row_image检测:确保binlog_row_image=FULL;不通过:更改参数[binlog_row_image=FULL]。 |
事务隔离性检测 |
检测源库和目标库事务隔离性是否一致;不通过:设置目标库隔离性为源库隔离性。 |
迁移用户建议使用 root (或者拥有最大权限的用户);若使用普通用户,如下为迁移所需的最小权限:dtsuser 为示例用户,可以替换成其他用户名
MySQL5.7 全量迁移用户权限
mysql> create user dtsuser@'%' identified by 'dtspassword';
mysql> grant select,event,show view,lock tables,replication slave,replication client,reload on *.* to dtsuser@'%';
MySQL5.7 全量+增量迁移用户权限
mysql> create user dtsuser@'%' identified by 'dtspassword';
mysql> grant select,event,show view,lock tables,replication slave,replication client,reload on *.* to dtsuser@'%';
MySQL8.0 全量迁移用户权限
mysql> create user dtsuser@'%' identified with mysql_native_password by 'dtspassword';
mysql> grant select,event,show view,lock tables,replication slave,replication client,reload,backup_admin on *.* to dtsuser@'%';
MySQL8.0 全量+增量迁移用户权限
mysql> create user dtsuser@'%' identified with mysql_native_password by 'dtspassword';
mysql> grant select,event,show view,lock tables,replication slave,replication client,reload,backup_admin on *.* to dtsuser@'%';
- 进入[数据库/数据库工具/数据库迁移(DTS)]界面,找到相应的迁移任务,点击任务名称,进入[任务详情]页面,根据预检查告警,调整源库或目标库配置,并重新检查。预检查通过后,点击<开始迁移>按钮。
- 此步骤仅限增量迁移。在数据库迁移列表页面,迁移进度显示为无延迟的状态下, 点击<完成>来结束迁移过程,后续主库的数据不会再同步到备库中。
- 在任务中心观察迁移任务的进度,当任务完成后进度状态为“已完成”。