培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。
备注
本文包含对术语“从属”的引用,这是 Microsoft 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。
可以使用 MySQL 转储和还原、MySQL Workbench 导出和导入或 Azure 数据库迁移服务等方法,将 MySQL 数据库迁移到 Azure Database for MySQL 灵活服务器。 可以通过将 mysqldump 或 mydumper 和 myloader 等开源工具和数据传入复制结合使用,在尽量减少停机时间的情况下迁移工作负荷。
数据传入复制是基于二进制日志文件定位方法将源服务器中的数据更改复制到目标服务器的技术。 在此方案中,作为源(数据库更改的来源位置)运行的 MySQL 实例将更新和更改作为“事件”写入二进制日志。 二进制日志中的信息根据所记录的数据库更改以不同的日志记录格式进行存储。 副本配置为从源读取二进制日志,并执行副本的本地数据库上的二进制日志中的事件。
设置将数据复制到 Azure Database for MySQL 灵活服务器,以将数据从源 MySQL 服务器同步到目标 MySQL 服务器。 可以选择性地将应用程序从主服务器(或源数据库)直接转换到副本服务器(或目标数据库)。
本教程介绍如何在运行 Amazon Relational Database Service (RDS) for MySQL 的源服务器和运行 Azure Database for MySQL 灵活服务器的目标服务器之间设置数据传入复制。
在开始本教程之前,请考虑用于执行操作的客户端计算机的位置和容量对性能的影响。
从与数据库服务器在同一位置启动的客户端计算机执行转储或还原操作:
无论客户端计算机位于何处,它都需要足够的计算、I/O 和网络容量来执行请求的操作。 一般建议:
要完成本教程,需要:
在客户端计算机上安装 mysqlclient 以创建转储,并在目标 Azure Database for MySQL 灵活服务器实例上执行还原操作。
对于较大的数据库,请安装 mydumper 和 myloader 以并行转储和还原数据库。
备注
Mydumper 只能在 Linux 发行版上运行。 有关详细信息,请参阅如何安装 mydumper。
创建运行版本 5.7 或 8.0 的 Azure Database for MySQL 灵活服务器实例。
重要
如果目标是具有区域冗余高可用性 (HA) 的 Azure Database for MySQL 灵活服务器,请注意此配置不支持数据传入复制。 解决方法是在创建服务器期间设置区域冗余 HA:
确保正确配置并设置多个参数和功能,如下所述:
wait_timeout
参数设置为合理的时间。 该时间取决于要导入或迁移的数据或工作负载数量。CREATE TABLE
语句不包括辅助键定义。 在导入数据后重新创建辅助索引,以避免在还原期间出现性能损失。最后,若要准备数据传入复制,请执行以下操作:
重要
如果源 Amazon RDS for MySQL 实例的 GTID_mode 设置为 ON,则 Azure Database for MySQL 灵活服务器目标实例的 GTID_mode 也必须设置为 ON。
若要配置 Azure Database for MySQL 灵活服务器的目标实例(数据传入复制的目标),请执行以下步骤:
将 max_allowed_packet
参数值设置为最大值 1073741824(即 1 GB)。 此值可以防止出现任何与长行相关的溢出问题。
在迁移期间将 slow_query_log
、general_log
、audit_log_enabled
和 query_store_capture_mode
参数设置为 OFF,以帮助消除任何与查询日志记录相关的开销。
将目标 Azure Database for MySQL 灵活服务器实例的计算大小纵向扩展到最大值(64 个 vCore)。 此大小在还原源服务器的数据库转储时提供额外的计算资源。
迁移完成后,始终可以根据应用程序需求缩减计算。
纵向扩展存储大小,以便在迁移期间获得更多的 IOPS,或增加用于迁移的最大 IOPS。
备注
可用的最大 IOPS 取决于计算大小。 有关详细信息,请参阅 Azure Database for MySQL 灵活服务器中的计算和存储选项中的“IOPS”部分。
若要准备和配置 Amazon RDS 中托管的 MySQL 服务器(数据传入复制的“源”),请执行以下步骤:
确认是否在源 Amazon RDS for MySQL 服务器上启用了二进制日志记录。 检查是否已启用自动备份,或确保源 Amazon RDS for MySQL 服务器存在只读副本。
确保源服务器上的二进制日志文件保留到在 Azure Database for MySQL 灵活服务器的目标实例上应用了更改为止。
如果使用数据传入复制,则 Azure Database for MySQL 灵活服务器无需管理复制过程。
若要检查源 Amazon RDS 服务器上的二进制日志保留期以确定二进制日志的保留小时数,请调用 mysql.rds_show_configuration
存储过程:
call mysql.rds_show_configuration;
+------------------------+-------+-----------------------------------------------------------------------------------------------------------+
| name | value | description |
| +------------------------+-------+-----------------------------------------------------------------------------------------------------------+ |
| binlog retention hours | 24 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
| source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. |
| target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. |
| +------------------------+------- +-----------------------------------------------------------------------------------------------------------+ |
| 3 rows in set (0.00 sec) |
若要配置二进制日志保留期,请运行 rds_set_configuration
存储过程,以确保在源服务器上将二进制日志保留所需的时间。 例如:
Call mysql.rds_set_configuration('binlog retention hours', 96);
如果你要创建转储并进行还原,则上述命令可帮助你快速与增量更改同步。
备注
确保有足够的磁盘空间用于根据定义的保留期在源服务器上存储二进制日志。
可通过两种方法从源 Amazon RDS for MySQL 服务器捕获数据转储。 其中一种方法涉及到直接从源服务器捕获数据转储。 而另一种方法涉及到从 Amazon RDS for MySQL 只读副本捕获转储。
若要直接从源服务器捕获数据转储,请执行以下操作:
确保停止从应用程序写入几分钟,以获取事务性一致性数据转储。
还可以暂时将 read_only
参数设置为值 1,以便在捕获数据转储时不会处理写入。
停止源服务器上的写入后,通过运行命令 Mysql> Show master status;
来收集二进制日志文件名称和偏移量。
保存这些值,以从 Azure Database for MySQL 灵活服务器实例启动复制。
若要创建数据转储,请运行以下命令执行 mysqldump
:
$ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
如果无法停止源服务器上的写入,或者在源服务器上转储数据造成的性能影响不可接受,请捕获副本服务器上的转储:
使用与源服务器相同的配置创建 Amazon MySQL 只读副本。 然后在该副本中创建转储。
让 Amazon RDS for MySQL 只读副本与源 Amazon RDS for MySQL 服务器同步。
如果只读副本上的副本滞后时间达到 0,请调用 mysql.rds_stop_replication
存储过程来停止复制。
call mysql.rds_stop_replication;
复制停止后,连接到副本。 然后运行 SHOW SLAVE STATUS
命令从 Relay_Master_Log_File 字段检索当前二进制日志文件名称,并从 Exec_Master_Log_Pos 字段检索日志文件位置。
保存这些值,以从 Azure Database for MySQL 灵活服务器实例启动复制。
若要从 Amazon RDS for MySQL 只读副本创建数据转储,请运行以下命令执行 mysqldump
:
$ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
备注
还可以使用 mydumper 从源 Amazon RDS for MySQL 数据库捕获数据的并行化转储。 有关详细信息,请参阅使用 mydumper/myloader 将大型数据库迁移到 Azure Database for MySQL 灵活服务器。
若要使用 mysql 本机还原来还原数据库,请运行以下命令:
$ mysql -h <target_server> -u <targetuser> -p < dumpname.sql
备注
如果要改用 myloader,请参阅使用 mydumper/myloader 将大型数据库迁移到 Azure Database for MySQL 灵活服务器。
登录源 Amazon RDS for MySQL 服务器,并设置复制用户。 然后向此用户授予所需的特权。
如果使用 SSL,请运行以下命令:
CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL;
SHOW GRANTS FOR syncuser@'%';
如果未使用 SSL,请运行以下命令:
CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
SHOW GRANTS FOR syncuser@'%';
存储过程执行所有数据传入复制函数。 有关所有过程的信息,请参阅数据传入复制存储过程。 可以在 MySQL shell 或 MySQL Workbench 中运行这些存储过程。
若要链接 Amazon RDS for MySQL 源服务器和 Azure Database for MySQL 灵活服务器目标服务器,请登录目标 Azure Database for MySQL 灵活服务器实例。 运行以下命令将 Amazon RDS for MySQL 服务器设置为源服务器:
CALL mysql.az_replication_change_master('source_server','replication_user_name','replication_user_password',3306,'<master_bin_log_file>',master_bin_log_position,'<master_ssl_ca>');
若要在源 Amazon RDS for MySQL 服务器和目标 Azure Database for MySQL 灵活服务器实例之间开始复制,请运行以下命令:
CALL mysql.az_replication_start;
若要检查复制状态,请在副本服务器上运行以下命令:
show slave status\G
如果 Slave_IO_Running
和 Slave_SQL_Running
参数的状态为 Yes,则表示复制已启动并处于运行中状态。
检查 Seconds_Behind_Master
参数的值以确定目标服务器的延迟程度。
如果该值为 0,则表示目标已处理来自源服务器的所有更新。 如果该值不为 0,则表示目标服务器仍在处理更新。
若要确保切换成功,请执行以下操作:
show slave status
返回的 Seconds_Behind_Master
值为 0。mysql.az_replication_stop
以停止复制,因为所有更改已复制到目标 Azure Database for MySQL 灵活服务器实例。mysql.az_replication_remove_master
以删除数据传入复制配置。此时迁移已完成。 你的应用程序已连接到运行 Azure Database for MySQL 灵活服务器的服务器。
培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。