如何使用自定义开启时间迁移我的 Amazon RDS for MySQL 数据库实例?
我想使用自定义开启时间将适用于 MySQL 数据库实例的 Amazon Relational Database Service (Amazon RDS) 迁移到另一个 MySQL 数据库实例。我该如何操作?
简短描述
要将数据从 Amazon RDS for MySQL 迁移到另一个 MySQL 数据库实例,您可以使用以下方法之一:
- 基于 Binlog 的复制
**注意:**如果您使用的是版本 MySQL 8.0.17,则在崩溃恢复期间,引擎可能不会打印最后一个二进制日志文件位置和文件名。因此,您将无法使用二进制日志复制方法来迁移数据。检查 MySQL 网站是否存在此已知问题。 - AWS DMS
解决方法
Binlog 复制
先决条件:
- Binlog 复制使用源上生成的二进制日志文件来记录正在进行的更改。将 binlog_format 参数设置为您选择的二进制日志记录格式(行、语句或混合)。
- 将二进制日志保留时间参数增加到大于当前值的值。这样,尚未传输的二进制日志将保留在源 Amazon RDS for MySQL 实例上。
- 确保可以从目标主机访问 Amazon RDS for MySQL 实例。
要使用二进制日志复制将数据从 Amazon RDS for MySQL 迁移到另一个 MySQL 数据库实例,请执行以下操作:
1. 使用自定义开始时间(或时间点值)从源 Amazon RDS 数据库实例执行时间点还原。
2. 创建时间点还原 RDS 实例的备份。
例如,您可以使用 mysqldump 来执行此任务:
mysqldump -h rdsendpoint -u username -p dbname > backupfile.sql
3. 检查时间点还原 RDS 实例的错误日志文件,记录与上次应用的二进制日志文件和位置相关的消息。
以下是一个示例日志文件消息:
[Note] InnoDB: Last MySQL binlog file position 0 456, file name mysql-bin-changelog.152707
**注意:**要进行复制,您需要访问记录二进制日志文件以及任何后续的二进制日志文件。只能使用这些文件从源 RDS 实例进行复制。RDS MySQL 中的最大二进制日志保留期限只能设置为 7 天,原定设置的值为 "NULL"。(有关更多信息,请参阅 mysql.rds_set_configuration。) 因此,请在源实例上保留这些二进制日志文件,以便在后续步骤中完成。
4. 在源 Amazon RDS for MySQL 实例上设置复制用户并向该用户授予必要的权限:
mysql> create user repl_user@'%' identified by 'repl_user'; mysql> grant replication slave, replication client on *.* to repl_user@'%'; mysql> show grants for repl_user@'%';
5. 通过登录到 MySQL-target 将该备份文件传输到目标本地部署的服务器。创建新数据库,并使用转储文件将数据库还原到新的外部数据库实例:
$ mysql -h hostname -u username -p dbname < backupfile.sql
6. 停止目标 MySQL 引擎:
$ service mysqld stop
7.修改 my.cnf 文件参数以指向您的唯一服务器 ID 和要复制的数据库。
例如:
server_id=2 replicate-do-db=testdb
如果要复制多个数据库,则可以多次使用 replicate-do-db 选项,并在单独的行中指定这些数据库,如下所示:
replicate-do-db=<db_name_1> replicate-do-db=<db_name_2> replicate-do-db=<db_name_N>
有关使用数据库名称创建复制筛选条件的更多信息,请参阅 MySQL 网站上的 replicate-do-db。
8. 保存文件并在目标 MySQL 数据库实例上重新启动 MySQL 数据库引擎。
例如,如果您使用的是 Linux 系统,则可以使用以下语法:
service mysqld restart
9. 为 MySQL 数据库实例建立源 RDS 的连接。
例如:
mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.152707', master_log_pos= 456;
**master_host:**源 Amazon RDS for MySQL 的端点。
**master_user:**复制用户的名称(在步骤 4 中创建)。
**master_password:**复制用户的密码。
**master_log_file:**步骤 3 中记录的二进制日志文件名。(在步骤 3 中,示例输出将 "mysql-bin-changelog.152707" 指示为二进制日志文件名。)
**master_log_pos:**步骤 3 中记录的二进制日志位置。(在步骤 3 中,示例输出将 "456" 指示为二进制日志文件的位置。)
10. 登录 MySQL 数据库实例的目标 RDS,然后使用以下命令开始复制:
mysql> start slave;
11. 确认复制正在源 MySQL 数据库实例的目标 RDS 和目标 MySQL 数据库实例之间进行同步:
mysql> show slave status\G
AWS DMS
在使用 AWS Database Migration Service (AWS DMS) 设置复制之前,请检查以下资源:
- 要从时间点还原的实例获取备份,请参阅 Binlog 复制部分中的步骤 1-5。最佳实践是遵循这些步骤,因为自定义开始时间可以是备份保留期内的任何(过去)时间点。从目标数据库实例还原备份后,记录在数据库恢复过程中生成的检查点日志序列号 (LSN)。您需要引用 LSN 来设置变更数据捕获 (CDC) 开启时间。要获取检查点 LSN,请在时间点还原操作完成后立即查看还原的 RDS MySQL 实例的错误日志文件。例如:
[Note] InnoDB: Log scan progressed past the checkpoint lsn 44326835524
-
要从自定义起点开启 CDC,用户可以运行 show master status 命令来返回二进制日志文件名、位置和其他几个值。 有关从自定义起点开启 CDC 的详细信息,请参阅从 CDC 起点开始执行复制。
-
要检查将 MySQL 数据库设置为 AWS DMS 复制源的先决条件,请参阅使用与 MySQL 兼容的数据库作为 AWS DMS 的源。
-
要检查将 MySQL 数据库设置为 AWS DMS 复制的目标的先决条件,请参阅使用与 MySQL 兼容的数据库作为 AWS Database Migration Service 的目标。
相关内容
- 已提问 1 年前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 1 年前