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

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

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

注意

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

创建 Azure 数据库 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 服务进行公共访问的选项。 如果源服务器处于专用访问状态,请确保副本服务器可以通过 VNET 对等互连或 VNET 到 VNET VPN 网关连接连接到源。

    注意

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

  2. 启用二进制日志记录

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

    SHOW VARIABLES LIKE 'log_bin';
    

    如果变量log_bin以值ON返回,则说明服务器已启用二进制日志记录。

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

    使用 SQL 命令或 MySQL Workbench 等工具在配置的源服务器上使用复制权限创建用户帐户。 请考虑是否打算使用 TLS 进行复制:只能在创建用户期间指定它。 请参阅 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 自定义表。 设置为 “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;
    

    如果 Slave_IO_RunningSlave_SQL_Running 的状态是 yes,且 Seconds_Behind_Master 的值是 0,则复制效果良好。 Seconds_Behind_Master 指示副本的延迟程度。

    如果副本服务器托管在 Azure VM 中,请在源上设置Allow access to Azure servicesON,以便源服务器和副本服务器可以通信。 可以从连接安全性选项更改此设置。 有关详细信息,请参阅使用 Azure 门户管理 Azure Database for MySQL 灵活服务器的防火墙规则

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