如何配置 Azure Database for MySQL - 灵活服务器数据传出复制

本文介绍如何通过配置源服务器和副本服务器在 Azure Database for MySQL 灵活服务器中设置数据传出复制。 本文假设读者在 MySQL 服务器和数据库方面有一定的经验。

对于数据传出复制,源始终是 Azure Database for MySQL 灵活服务器。 副本可以是位于其他云提供商、本地计算机或虚拟机上的任何外部 MySQL 服务器。 在执行本文中的步骤之前,请查看数据传出复制的限制和要求。

注意

本文引用了术语“从属”,这是 Microsoft 不再使用的术语。 在从软件中删除该术语后,我们会将其从本文中删除。

创建要用作源的 Azure Database for MySQL 灵活服务器实例。

  1. 创建一个新的 Azure Database for MySQL 灵活服务器实例(例如,sourceserver.mysql.database.chinacloudapi.cn)。 请参阅快速入门:使用 Azure 门户创建 Azure Database for MySQL 的实例。 该服务器是用于数据传出复制的“源”服务器。

  2. 创建重复的用户帐户和对应的特权。

    1. 用户帐户不会从源服务器复制到副本服务器。 假设你计划为用户提供对副本服务器的访问权限。 在这种情况下,必须在这个新建的 Azure Database for MySQL 灵活服务器实例上手动创建所有帐户和相应的特权。

配置源 MySQL 服务器

以下步骤准备并配置充当源的 Azure Database for MySQL 灵活服务器实例。

  1. 网络要求

    确保已建立网络设置,以便源服务器和副本服务器可以无缝通信。
    如果源服务器处于公共访问状态,请确保防火墙规则允许副本服务器 IP 地址。 如果副本服务器托管在 Azure 上,请确保从 Azure 门户的网络页中选择允许从任何 Azure 服务公开访问此副本服务器的选项。 如果源服务器处于专用访问状态,请确保副本服务器可以通过 Vnet 对等互连或 VNet 到 VNet VPN 网关连接来连接到源。

    注意

    有关详细信息,请参阅 Azure Database for MySQL 灵活服务器的连接和网络概念

  2. 启用二进制日志记录

    运行以下命令以检查是否已在源服务器上启用了二进制日志记录:

    SHOW VARIABLES LIKE 'log_bin';
    

    如果返回的变量 log_bin 的值为“ON”,则表明已在服务器上启用二进制日志记录。

  3. 创建新的复制角色并设置权限

    在所配置的源服务器上创建一个具有复制特权的用户帐户。 可通过 SQL 命令或 MySQL Workbench 等工具实现此目的。 考虑是否打算使用 SSL 进行复制,因为这需要在创建用户时指定。 请参阅 MySQL 文档,了解如何在源服务器上添加用户帐户

    在以下命令中,新的复制角色可从任何计算机访问源服务器,而不仅仅可从托管源服务器本身的计算机进行访问。 这可以通过在创建用户的命令中指定“syncuser@'%'”来完成。 请参阅 MySQL 文档,详细了解如何设置帐户名

    有一些工具可用来设置帐户名。 请选择最适合你的环境的一种工具。

使用 SSL 复制

如果所有用户连接都要求 SSL,请使用以下命令来创建用户:

CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%' REQUIRE SSL;

不使用 SSL 复制

如果并非所有连接都要求 SSL,请使用以下命令来创建用户:

CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';

转储并还原源服务器。

如果是新创建的源服务器,并且其中没有要迁移到副本的现有数据,请跳过此部分。 此时,可以解锁表:

SET GLOBAL read_only = OFF;
UNLOCK TABLES;

如果源服务器具有要迁移到副本的现有数据,请执行以下步骤。

  1. 确定要将哪些数据库和表复制到 Azure Database for MySQL 灵活服务器并从源服务器执行转储。 可以使用 mysqldump 从主服务器转储数据库。 有关更多详细信息,请访问转储和还原。 不需转储 MySQL 库和测试库。

  2. 将源服务器设置为读/写模式。

转储数据库后,将源 Azure Database for MySQL 灵活服务器实例更改为读/写模式。

SET GLOBAL read_only = OFF;
UNLOCK TABLES;
  1. 将转储文件还原到新服务器。 将转储文件还原到在 Azure Database for MySQL 灵活服务器中创建的服务器。 关于如何将转储文件还原到 Azure Database for MySQL 灵活服务器实例,请参阅“转储和还原”。 如果转储文件较大,请将它上传到副本服务器所在区域的 Azure 中的虚拟机。 将它从虚拟机还原到 Azure Database for MySQL 灵活服务器实例。

注意

如果想要避免在转储和还原时将数据库设置为只读模式,可以使用 mydumper/myloader

配置副本服务器以启动数据传出复制。

  1. 筛选

    假设要设置的是 Azure Database for MySQL 灵活服务器与位于其他云提供商或本地的外部 MySQL 之间的数据传出复制。 在这种情况下,必须使用复制筛选器筛选出副本服务器上的 Azure 自定义表。 为此,可以设置 Replicate_Wild_Ignore_Table = "mysql.__%" 来筛选 Azure Database for MySQL 灵活服务器 mysql 内部表。 有关修改此服务器参数的更多详细信息,请参阅 MySQL :: MySQL 5.7 参考手册 :: 13.4.2.2 CHANGE REPLICATION FILTER 语句

  2. 通过连接到副本服务器并在副本服务器上打开 MySQL shell 来设置副本服务器。 在提示符下运行以下操作,这将同时配置多个 MySQL 复制设置:

    CHANGE THE REPLICATION SOURCE TO
    SOURCE_HOST='<master_host>',
    SOURCE_USER='<master_user>',
    SOURCE_PASSWORD='<master_password>',
    SOURCE_LOG_FILE='<master_log_file>',
    SOURCE_LOG_POS=<master_log_pos>
    
    • master_host:源服务器的主机名(例如 'source.mysql.database.chinacloudapi.cn')
    • master_user:源服务器的用户名(例如 - 'syncuser'@'%')
    • master_password:源服务器的密码
    • master_log_file:运行 show master status 后显示的二进制日志文件名
    • master_log_file:运行 show master status 后显示的二进制日志位置

    注意

    若要对连接使用 SSL,请将属性 SOURCE_SSL=1 添加到该命令。 有关在复制上下文中使用 SSL 的详细信息,请访问 - https://dev.mysql.com/doc/refman/8.0/en/change-replication-source-to.html

  3. 使用以下命令激活副本服务器。

    START REPLICA;
    

    此时,副本实例开始复制对源服务器数据库所做的任何更改。 可以通过在源数据库上创建示例表并检查它是否成功复制来测试此表。

  4. 检查复制状态。

    在副本服务器上调用 show slave status\G 命令来查看复制状态。

     show slave status;
    

    如果 Slave_IO_Running 和 Slave_SQL_Running 的状态为 yes,Seconds_Behind_Master 的值为 0,则表示复制在正常进行。 Seconds_Behind_Master 指示副本的滞后程度。 如果该值不是 0,则表示副本正在处理更新。

    如果源服务器托管在 Azure VM 中,请在源服务器上将“允许访问 Azure 服务”设置为“启用”,以允许源服务器和副本服务器相互通信。 可以从连接安全性选项更改此设置。 有关详细信息,请参阅使用 Azure 门户管理 Azure Database for MySQL 灵活服务器的防火墙规则

    如果已使用 mydumper/myloader 转储了数据库,则可以从 /backup/metadata 文件获取 master_log_file 和 master_log_pos。