前言
数据库迁移到 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