如何使用自定义开启时间迁移我的 Amazon RDS for MySQL 数据库实例?

2 分钟阅读
0

我想使用自定义开启时间将适用于 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

AWS 官方
AWS 官方已更新 3 年前