Database Migration Service 将数据库迁移到Cloud SQL for MySQL

作者:MeshCloud脉时云公有云架构师 张东升

1、引言

数据库迁移服务(Database Migration Service 简称DMS),它提供了一种独特的迁移方法,使用MySQL和PostgreSQL的复制能力进行数据迁移,并最大限度地提高数据的安全性、完整性和保真度。数据库迁移服务支持从源数据库到 Cloud SQL 目标数据库的一次性和持续性迁移。

2、整体架构

此次实践的是实例上自建MySQL到Cloud SQL for MySQL的数据迁移,涉及的迁移类型有一次性迁移和持续性迁移实践。

3、 技术简介

数据库迁移服务(DMS)帮助您将MySQL和PostgreSQL工作负载提升并转移到Cloud SQL中,数据库迁移服务简化了网络工作流程,管理初始快照和正在进行的复制,并为您提供迁移操作的状态。DMS支持两种类型的迁移,一次性迁移和持续性迁移。

一次性迁移:数据库的单个时间点快照,从源获取并应用于目标。本质上是一个转储和加载,当加载完成时,目的地就可以使用,在迁移的过程中,禁止DDL操作在源库中执行,防止数据不一致情况。

连续性迁移:在初始完全转储和加载之后从源到目标的连续变化流。在迁移的情况下,当切换到使用目标进行读写时,执行promote操作。此时目标云SQL实例与源实例断开连接,并从副本实例升级到主实例。

4、 目标

自建MySQL的数据全量和增量迁移到Cloud SQL for MySQL,自建MySQL数据源端和目标端Cloud SQL for MySQL实例数据一致性。

5、准备工作

5.1、创建云实例,请参阅创建并启动虚拟机

5.2、MySQL RPM包(
mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar),安装包下载地址请参阅:
https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

6、实施步骤

6.1、安装部署自建MySQL

wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

tar -xvf mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar

rpm -qa|grep mariadb-libs

rpm -e mariadb-libs(需要卸载mariadb-libs包,与
mysql-community-common-5.7.20- 1.el7.x86_64.rpm安装时候有冲突)

rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm

rpm -ivh mysql-community-devel-5.7.20-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm

6.2、做DMS数据迁移对源端数据库有如下相应的配置要求

  • 必须设置server-id选项为 1 或更大的值【server-id=1】
  • 必须配置用于连接到源数据库的用户接受来自任何地方的连接 【host = %】
  • 要执行一次性或连续迁移,请确保在源数据库上启用二进制日志【log-bin=mysql-bin】
  • 使用基于行的二进制日志记录 【binlog_format=ROW】
  • 二进制日志保留足够长的时间以支持数据库迁移,一般一周 【expire_logs_day=7】
  • 所有表(系统数据库中的表除外)都使用 InnoDB 存储引擎
  • 用于连接源数据库的用户帐户密码长度不得超过 32 个字符

6.3、插入测试数据并验证DDL操作脚本用法

  • 插入测试数据
  • 验证DDL操作脚本用法,模拟插入一条数据就会有在binlog日志中匹配到INSERT操作

6.4、创建源连接配置文件

  • Database engine 选择MySQL并填写数据源端MySQL的远程连接信息,点击create完成源连接配置文件创建

6.5、创建迁移作业【一次性迁移】

  • Source database engine选择MySQL、Migration job type选择One-time【一次性迁移类型】
  • Select source connection profile选择TestDMS,关联6.4创建的源连接配置文件
  • 创建目标端Cloud SQL实例、填写实例密码、实例版本【目标端的实例版本只能和数据源端版本相同或者更高版本】
  • 实例的具体配置
  • Connectivity method选择IP allowlist,创建的实例连接到数据源库的方式
  • 点击CREATE JOB创建迁移作业,选定TestDMSJob的迁移作业,点击START开启迁移作业
  • 查看作业的运行状态,此时状态已经是Completed完成状态。

6.6、创建迁移作业【持续性迁移类型】

  • Migration job type选择Continuous【持续性迁移】,其他配置与创建一次性迁移Job的配置相同

7、 验证

7.1、验证一次性迁移类型Job运行结果

7.2、验证持续性迁移类型Job运行结果

  • 模拟在数据源端库插入三条数据
  • Cloud SQL for MySQL端验证数据是否同步完成

8、补充工作

8.1、支持的数据库版本

支持的源数据库

  • RDS 5.6、5.7、8.0
  • 自我管理(本地或任何云虚拟机)5.5、5.6、5.7、8.0
  • Cloud SQL 5.6、5.7、8.0
  • Amazon Aurora 5.6、5.7

支持的目标数据库

  • 适用于 MySQL 5.6、5.7、8.0 的 Cloud SQL

8.2、一次性迁移要求

  • 在初始完全转储阶段,对源的 DDL 操作可能会中断迁移过程,当迁移状态变为 Running时,请确保停止对源的所有 DDL 操作。

8.3、跨版本支持

  • 数据库迁移服务支持 MySQL 到 Cloud SQL 迁移,其中目标版本与源数据库相同或高一个版本。例如,将 MySQL 5.6 源数据库迁移到 Cloud SQL 5.6 或 5.7 目标端。

8.4、未迁移的内容

  • 迁移 MySQL 数据库时,不会迁移 MySQL 系统数据库,这些数据库包含有关用户和权限信息。用户帐户登录信息需要在目标 Cloud SQL 数据库实例中进行管理。

9、常见问题

9.1、数据源端的配置不符合相应的配置要求

9.2、创建源连接配置文件无法连接源端数据

9.3、针对一次性迁移,作业在运行的过程中,源库有DDL操作执行

9.4、针对跨版本支持,版本选择有误

  • 针对以上情况,都会造成数据迁移失败或者数据迁移两端数据不一致

发表评论

您的电子邮箱地址不会被公开。