乐趣区

数据迁移到aurora-mysql数据库

前言

数据库迁移到 aurora mysql 的方式有以下几种:
1)Rds mysql 迁移到 aurora mysql

  • 使用 rds mysql 快照迁移
  • 使用 rds mysql 只读副本迁移

上述两种迁移方式非常简单,只需在 aws rds 控制台操作即可,本片就不再进行具体演练,具体可参考文档

快照迁移:https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.RDSMySQL.Import.html

只读副本迁移:https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.RDSMySQL.Replica.html

2)外部 mysql 数据库前哟 aurora mysql

  • 使用 mysqldump 实用程序创建数据的转储,然后将该数据导入现有的 aurora mysql 数据库集群。
  • 将完整备份文件和增量文件从数据库复制到 S3 存储桶,然后从这些文件还原 aurora mysql 数据库集群,速度可能比使用 mysqldump 迁移数据要快。

1 使用 mysqldump 实用程序创建数据库的转储,然后将该数据导入现有 aurora mysql 数据库集群

因为 aurora mysql 与 mysql 兼容,所以该过程与将 mysql 数据导入 rds mysql 的过程类似,可参考文档 https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html。

其整体架构如下图所示:

1.1 安装并配置好 mysql 数据库

我在光环云裸金属服务器上部署了 mysql 数据库,具体部署过程略,可以百度。

1.2 创建 mysql 数据库的副本
1.2.1 设置复制选项

编辑文件 /etc/my.cnf sudo vi /etc/my.cnf
更新 [mysqld] 字段如下:
[mysqld]
log-bin=mysql-bin
server-id=1

重启 mysql 服务 service mysqld restart

1.2.2 创建现有数据库的备份副本

上图中新建了一个数据库 schema_xuyi,现在将 schema_xuyi 进行备份,执行如下命令:

mysqldump \
--databases  schema_xuyi \
--master-data=2  \
--single-transaction \
--order-by-primary \
-r backup.sql \
-u  local_user \
-p 

图中可见生成了备份文件 backup_xuyi.sql

1.3 创建 aurora mysql 数据库

具体创建过程省略,注意与此前的 mysql 数据库版本尽量一致。

远程连接到 aurora mysql 数据库,其初始状态如下图:

1.4 使用 mysql 命令远程连接到 aurora mysql 数据库并导入此前的 sql 文件

执行命令:

mysql -h aurora-1-instance-1.cbgpcbkn8knw.us-east-1.rds.amazonaws.com -P 3306 -u admin -p

其中 aurora-1-instance-1.cbgpcbkn8knw.us-east-1.rds.amazonaws.com 部分是 aurora mysql 数据库的终端节点,连接成功

执行命令 source backup_xuyi.sql;

Workbench 的刷新操作没找到,重新连接了一下 aurora mysql 数据库,可见其状态如下:

其中已经有了 schema_xuyi 的库,说明 mysqldump 导入成功,本次测试只是为了验证从外部 mysql 导入到 aurora 的过程,至此本次操作完成。

2 将完整备份文件和增量文件从数据库复制到 S3 存储桶,然后从这些文件还原 aurora mysql 数据库集群

参考文档:https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3

2.1 准备工作
2.1.1 在本地服务器上安装 percona

本地数据库版本是 mysql5.7,建议 percona 版本为 Percona XtraBackup 2.4

执行以下命令:

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install -y percona-xtrabackup-24.x86_64

从上图可见 Percona-xtrabackup 安装成功。

2.1.2 准许 aurora mysql 访问 S3 存储桶
  • 在跟 aurora mysql 数据库相同的区域中创建一个存储桶

过程比较简单,省略。

  • 创建 IAM 策略以访问 S3 资源

可以通过 IAM 控制台来创建相应的策略,具体过程省略,可以授予 aurora 访问 S3 的所有权限。

  • 创建 IAM 角色以允许 aurora mysql 访问 AWS 服务

具体创建角色的过程省略,可以参考文档:https://docs.aws.amazon.com/z…
如下图所示,创建了一个角色 role_aurora_to_s3,并将上一步的策略附加到了该角色上。

  • 将角色与 aurora mysql 数据库关联

具体操作过程见文档 https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html

如上图所示,已经将角色与 aurora mysql 数据库相关联。为了让角色生效还需要修改参数组,我们选择新建一个参数组

其中参数“aurora_load_from_s3_role”的值更新为前面所创建角色的 ARN。

再修改数据库实例的数据库选项

应用修改,立即重启数据库。

2.2 备份要还原为 aurora mysql 的数据库的文件
2.2.1 准备工作

为了跟之前的数据库内容区别开来,特意新建了库 schema_test, 并在其中新建了一张表 table_test,如下图所示:

2.2.2 使用 percona xtrabackup 创建备份

全量备份

xtrabackup --user=root --password=XY-zte110 --backup --target-dir=/root/backupfiles

可见在当前目录下生成了一个 backupfiles 目录,该类目下的内容如上图所示。

通过 aws CLI 将备份文件夹整个上传到 s3 存储桶(具体上传的过程省略),登录 s3 控制台可见

2.3 从 S3 存储桶还原 aurora mysql 数据库

登录 aurora 控制台,进入数据库页面

在数据库页面点击“从 S3 还原”,
引擎选项 ->aurora
版本 -> 我们选择的是 mysql5.7

点击“下一步”

下一步,进入数据库详细信息页面进行设置,具体内容与新建 aurora 实例的过程相似

下一步,配置高级设置

从这个配置的过程来看,跟创建一个新的 aurora 实例完全相同,由此可以断定 aurora 从 s3 还原实际上是重新起了一个 aurora 实例。最后点击“创建数据库”

确实是新生成一个数据库实例,耐心等待吧。
切换到数据库页面,可以看到有两个 aurora 实例

上图中的实例 aurora-instance-xuyi-copy 就是从 s3 还原出来的新的 aurora 实例,已经成功创建。现在远程到该实例查看数据库状况

可见全量复制成功。
至此通过 S3 还原 aurora 数据库完成。

3 总结

首先,最大的区别是使用 s3 还原是重新生成了一个新的数据库实例,而使用 mysqldump 不会新建数据库实例。
其次,mysqldump 属于逻辑复制,备份成 sql 脚本文件,而通过 S3 还原是使用 xtrabackup 工具进行备份,属于物理复制。
最后,官网文档说使用 s3 速度会快一些,本次实践没有考虑性能,故无法实际比较迁移速度。

附:关于 mysqldump 和 xtrabackup 的比较 https://blog.51cto.com/11257187/2119413

退出移动版