暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB MySQL版数据迁移方案

原创 junyuan 2024-07-22
349

产品简介

PolarDB MySQL版是阿里巴巴自研的云原生HTAP数据库。PolarDB MySQL版100%兼容原生MySQL的多个版本,包括MySQL 5.6、MySQL 5.7和MySQL 8.0。PolarDB MySQL版的企业版基于云原生架构、计算存储分离、软硬件一体化设计,为用户提供具备超高弹性和性能、高可用和高可靠保障、高性价比的数据库服务。

核心功能

超级MySQL

  • 100%兼容原生MySQL和阿里云RDS MySQL,您可以在不修改应用程序任何代码和配置的情况下,将MySQL数据库迁移至PolarDB MySQL版。
  • 持续提供高价值特性:一写多读或多写多读、共享存储、60亿行数据稳定运行、秒级DDL、主从切换无闪断、闪回查询等。

原生HTAP

  • 一套系统同时支持交易和分析,降低开发和运维成本。
  • 无需ETL,数据分析更实时更稳定。

多主多写(多主集群)

  • 所有节点同时支持读写服务,写负载可线性扩展。
  • 节点之间切换5~10s,在途事务不中断。

全球多活容灾

  • 跨地域容灾,地域级故障可继续提供服务。
  • 高资源利用率,容灾集群可提供读写服务。
  • 全球本地化访问,提升业务性能。

迁移方案简述

PolarDB提供了多种数据迁移方案,可满足不同上云、迁云的业务需求,可以支持用户在不停机情况下平滑的实现引擎间的数据迁移。通过使用阿里云数据传输服务(DTS),还可以实现PolarDB的结构迁移和全量迁移。

PolarDB提供的迁移方案适用于以下场景:

  1. 从RDS迁移至PolarDB
  • 一键升级RDS MySQL至PolarDB MySQL版
    适用场景:适用于希望将RDS数据库迁移至PolarDB的场景
    一键升级RDS至PolarDB时支持带地址切换,系统会自动交换RDS和PolarDB上的连接地址,无需在应用程序端修改任何配置即可自动连接到PolarDB。一键升级RDS至PolarDB时支持带地址切换,系统会自动交换RDS和PolarDB上的连接地址,您无需在应用程序端修改任何配置即可自动连接到PolarDB。选择该切换方式后,RDS连接地址对应的PolarDB连接地址如下图所示。
    image.png
    使用带地址切换功能时,需注意以下几点:
    • 带地址切换只会切换RDS和PolarDB的域名,Vswitch、Vip等配置不会切换。
    • 仅当源RDS和目标PolarDB集群同时存在的连接地址才支持相互切换,默认情况下仅私网主地址支持带地址切换。
    • 带地址切换时,RDS和PolarDB的主地址一定会切换,RDS的独享代理地址及只读地址可以和PolarDB的默认集群地址及自定义地址切换,可以选择不切换或切换多组。由于PolarDB最多可以创建7个集群地址,因此最多只支持7组RDS独享代理地址及只读地址的切换。
    • 如需切换其他连接地址,您需在切换前创建好对应的连接地址,否则不会切换。关于如何为PolarDB集群和RDS实例创建连接地址,请参见管理连接地址和设置连接地址。
    • 当前不支持IPv6的地址带地址切换。
    • 带地址切换不会切换端口,请确保RDS和PolarDB的连接端口一致(PolarDB和RDS默认使用的端口号均为3306),如需修改端口,请参见修改内外网地址和端口(RDS)或修改连接地址和端口(PolarDB)。
    • 切换域名后,可能会存在DNS解析缓存问题,在缓存过期时间内可能会出现连接不上数据库或数据库只支持读操作无法执行写入操作等情况,建议您刷新一下服务器的DNS缓存。
    • 切换域名后,如果您需要使用DMS登录PolarDB数据库,必须使用新版本的DMS并且使用集群ID来进行登录,连接串无法登录。
  • 一键克隆RDS MySQL至PolarDB MySQL版
    适用场景:适用于临时将RDS数据迁移到PolarDB做测试的场景
    通过一键克隆方式迁移到PolarDB集群,源RDS实例的增量数据不会同步到PolarDB集群。
    PolarDB支持从RDS MySQL一键克隆数据至新的PolarDB MySQL版集群。一键克隆功能将会新建一个与源RDS实例的数据相同的PolarDB集群,PolarDB集群包含源RDS实例的账号、数据库、IP白名单和必要的参数。当前支持一键克隆的源RDS MySQL的版本和存储类型,以及目标PolarDB MySQL版的版本情况如下:
    • 支持源RDS MySQL所有版本以及所有存储类型实例的迁移。不管是RDS MySQL 5.6、5.7还是8.0,本地SSD盘还是云盘存储,都支持一键克隆至PolarDB MySQL版。
    • 支持迁移RDS MySQL至相同或不同版本的PolarDB MySQL版。如支持RDS MySQL 5.6一键克隆至PolarDB MySQL版 5.6,也支持RDS MySQL 5.6克隆至PolarDB MySQL版 8.0。
      方案优势
    • 克隆过程完全免费
    • 克隆过程数据0丢失
      使用克隆实例功能将RDS MySQL版迁移到PolarDB MySQL版有如下限制:
    • 仅支持将RDS MySQL一键克隆至相同版本或更高版本的PolarDB MySQL版,不支持降版本克隆。
    • 如:不支持从RDS MySQL 5.7一键克隆至PolarDB MySQL版 5.6,不支持从RDS MySQL 8.0.2一键克隆至PolarDB MySQL版 8.0.1。
    • 暂不支持跨地域迁移。
    • 迁移期间不允许对源RDS实例执行参数设置的操作。
    • 源库待同步的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
    • 源库如同步对象为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。
    • 源库Binlog日志:需开启Binlog,开启方法请参见设置实例参数,并且binlog_row_image为full。否则预检查阶段提示报错,且无法成功启动数据同步任务。
  1. PolarDB间的数据迁移
    PolarDB MySQL版集群之间的数据迁移可以用以下两种方式:
  • 通过数据传输服务DTS(Data Transmission Service),可以帮助您实现PolarDB MySQL版集群间的数据迁移,适合线上集群间数据迁移或业务迁移割接场景。跨版本迁移时,建议创建一个按量付费的PolarDB MySQL版集群来测试兼容性,测试完成后可释放该集群。
    注意事项:
    在库表结构迁移过程中,DTS会将源数据库中的外键迁移到目标数据库。在全量迁移和增量迁移过程中,DTS会以Session级别暂时禁用约束检查以及外键级联操作。若任务运行时源库存在级联更新、删除操作,可能会导致数据不一致。
    该方案支持结构迁移、全量数据迁移、增量数据迁移,适用于希望迁移过程可以平滑切换的场景。
    支持增量迁移的SQL操作:
    • DML:INSERT、UPDATE、DELETE
    • DDL:ALTER TABLE、ALTER VIEW、CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW、DROP INDEX、DROP TABLE、RENAME TABLE、TRUNCATE TABLE
  • 用mysqldump来进行集群间数据迁移,适合一次性的数据临时迁移和测试环境构建场景
  1. 从其它数据库迁移至PolarDB
  • 自建MySQL迁移至PolarDB MySQL版
    通过数据传输服务DTS(Data Transmission Service),可以帮助您将自建MySQL数据库迁移至PolarDB MySQL版集群。MySQL与PolarDB MySQL版集群间的迁移,支持源数据库MySQL为以下类型。本文以有公网IP的自建数据库为例介绍配置流程,其他类型的源数据库配置流程与本案例类似。支持自建MySQL数据库版本为5.1、5.5、5.6、5.7或8.0版本,支持以下类型的自建数据库:

    • 有公网IP的自建数据库。
    • ECS上的自建数据库。
    • 通过专线、VPN网关或智能网关接入的自建数据库。
    • 通过数据库网关接入的自建数据库。
  • 从自建MySQL迁移至PolarDB MySQL版(mysqldump工具)
    支持使用mysqldump工具将自建MySQL数据库迁移至PolarDB MySQL版。
    使用mysqldump导出自建数据库的数据、存储过程、触发器和函数。
    命令格式:
    mysqldump -h <自建数据库的连接地址> -u user -p --opt --default-character-set=utf8 --hex-blob <自建数据库名> --skip-triggers --skip-lock-tables > /tmp/<自建数据库名>.sql
    mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <自建数据库名> -R | sed -e ‘s/DEFINER[ ]=[ ][^]*/*/’ > /tmp/<自建数据库名>Trigger.sql

命令示例:
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers --skip-lock-tables > /tmp/testdb.sql
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e ‘s/DEFINER[ ]=[ ][^]*/*/’ > /tmp/testdbTrigger.sql

将导出的文件导入到目标PolarDB集群中,命令格式:
mysql -h <PolarDB集群连接地址> -P <PolarDB集群端口> -u <PolarDB集群账号> -p <PolarDB数据库名称> < /tmp/<自建数据库名>.sql
mysql -h <PolarDB集群连接地址> -P <PolarDB集群端口> -u <PolarDB集群账号> -p <PolarDB数据库名称> < /tmp/<自建数据库名>Trigger.sql
命令示例:
mysql -h polardbtest.mysql.polardb.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdb.sql
mysql -h polardbtest.mysql.polardb.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdbTrigger.sql

  • 从Amazon Aurora MySQL迁移至PolarDB MySQL版
    支持使用数据传输服务DTS(Data Transmission Service),将Amazon Aurora MySQL迁移至阿里云PolarDB MySQL版。DTS支持结构迁移、全量数据迁移以及增量数据迁移,同时使用这三种迁移类型可以实现在自建应用不停服的情况下,平滑地完成数据库迁移。
    为保障DTS可以通过公网连接至Amazon Aurora MySQL,Amazon Aurora MySQL的网络与安全配置中须将公开可用性功能设置为是。阿里云PolarDB MySQL版的存储空间须大于Amazon Aurora MySQL已使用的存储空间。
    注意事项:
    • DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。
    • 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
    • 对于数据类型为FLOAT或DOUBLE的列,DTS会通过ROUND(COLUMN,PRECISION)来读取该列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位,请确认迁移精度是否符合业务预期。
    • 如果待迁移数据库名称不符合阿里云PolarDB MySQL版的定义规范,您需要在配置迁移任务之前在阿里云PolarDB MySQL版中创建数据库。
      权限要求:
      image.png
      操作步骤:
      1、进入迁移任务的列表页面,选择迁移实例所属地域
      2、单击创建任务,配置源库及目标库信息。
      3、配置完成后,单击页面右下角的测试连接以进行下一步。
      4、如果您的自建数据库具备白名单安全设置,您需要复制弹跳框中的DTS服务器IP地址,并加入自建数据库的白名单安全设置中。然后单击测试连接以进行下一步。
      5、进行高级配置。
      6、上述配置完成后,单击页面下方的下一步保存任务并预检查。
      7、预检查通过率显示为100%时,单击下一步购买。
      8、在购买页面,选择数据迁移实例的链路规格,详细说明请参见下表。
      9、配置完成后,阅读并选中《数据传输(按量付费)服务条款》。
      10、单击购买并启动,迁移任务正式开始,您可在数据迁移界面查看具体进度。
      11、完成全量和增量迁移
      12、将业务切换至阿里云PolarDB MySQL版。
  1. 从PolarDB迁移至其它数据库
    通过数据传输服务DTS(Data Transmission Service),您可以将PolarDB MySQL版迁移至MySQL(包括自建MySQL和RDS MySQL实例)。PolarDB MySQL版除了支持迁移至RDS MySQL以外,还支持迁至以下类型的自建数据库。
    • 有公网IP的自建数据库。
    • ECS上的自建数据库。
    • 通过专线、VPN网关或智能网关接入的自建数据库。
    • 通过数据库网关接入的自建数据库。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论