2.8. 复制具有 TLS 加密的 MySQL


MySQL 为复制提供了各种配置选项,范围从基本到高级。这部分论述了使用全局事务标识符(GTID)在新安装的 MySQL 服务器上的 MySQL 中进行复制的基于事务的方法。使用 GTID 简化了事务识别和一致性验证。

重要

如果要使用现有的 MySQL 服务器进行复制,您必须首先同步数据。如需更多信息,请参阅 上游文档

2.8.1. 配置 MySQL 源服务器

您可以设置 MySQL 源服务器所需的配置选项,以便通过 TLS 协议正确地运行并复制数据库服务器上所做的所有更改。

先决条件

  • 源服务器已安装。
  • 源服务器有 TLS 设置

    重要

    源和目标证书必须由同一证书颁发机构签名。

流程

  1. 包括 /etc/my.cnf.d/mysql-server.cnf 文件中 [mysqld] 部分下的以下选项:

    • bind-address=source_ip_adress

      从副本到源的连接需要这个选项。

    • server-id=id

      id 必须是唯一的。

    • log_bin=path_to_source_server_log

      此选项定义 MySQL 源服务器的二进制日志文件的路径。例如:log_bin=/var/log/mysql/mysql-bin.log

    • gtid_mode=ON

      此选项在服务器上启用全局事务标识符(GTID)。

    • enforce-gtid-consistency=ON

      服务器通过仅允许执行可使用 GTID 安全记录的语句来强制实施 GTID 一致性。

    • 可选: binlog_do_db=db_name

      如果您只想复制所选的数据库,则使用这个选项。要复制多个所选的数据库,请分别指定每个数据库:

      binlog_do_db=db_name1
      binlog_do_db=db_name2
      binlog_do_db=db_name3
      Copy to Clipboard Toggle word wrap
    • 可选: binlog_ignore_db=db_name

      使用此选项从复制中排除特定的数据库。

  2. 重启 mysqld 服务:

    # systemctl restart mysqld.service
    Copy to Clipboard Toggle word wrap

2.8.2. 配置 MySQL 副本服务器

您可以设置 MySQL 副本服务器所需的配置选项,以确保成功复制。

先决条件

  • 副本服务器已安装。
  • 副本服务器有 TLS 设置

    重要

    源和目标证书必须由同一证书颁发机构签名。

流程

  1. 包括 /etc/my.cnf.d/mysql-server.cnf 文件中 [mysqld] 部分下的以下选项:

    • server-id=id

      id 必须是唯一的。

    • relay-log=path_to_replica_server_log

      中继日志是 MySQL 副本服务器在复制期间创建的一组日志文件。

    • log_bin=path_to_replica_sever_log

      此选项定义 MySQL 副本服务器的二进制日志文件的路径。例如:log_bin=/var/log/mysql/mysql-bin.log

      副本中不需要这个选项,但强烈建议使用。

    • gtid_mode=ON

      此选项在服务器上启用全局事务标识符(GTID)。

    • enforce-gtid-consistency=ON

      服务器通过仅允许执行可使用 GTID 安全记录的语句来强制实施 GTID 一致性。

    • log-replica-updates=ON

      这个选项可确保从源服务器接收的更新记录在副本的二进制日志中。

    • skip-replica-start=ON

      此选项可确保在副本服务器启动时不启动复制线程。

    • 可选: binlog_do_db=db_name

      如果您只想复制某些数据库,则使用这个选项。要复制多个数据库,请分别指定每个数据库:

      binlog_do_db=db_name1
      binlog_do_db=db_name2
      binlog_do_db=db_name3
      Copy to Clipboard Toggle word wrap
    • 可选: binlog_ignore_db=db_name

      使用此选项从复制中排除特定的数据库。

  2. 重启 mysqld 服务:

    # systemctl restart mysqld.service
    Copy to Clipboard Toggle word wrap

2.8.3. 在 MySQL 源服务器上创建复制用户

您必须创建一个复制用户,并授予这个用户所需的复制流量的权限。此流程演示了如何创建具有适当权限的复制用户。仅在源服务器上执行这些步骤。

先决条件

流程

  1. 创建复制用户:

    mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
    Copy to Clipboard Toggle word wrap
  2. 授予用户复制权限:

    mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';*
    Copy to Clipboard Toggle word wrap
  3. 重新在 MySQL 数据库中载入授权表:

    mysql> FLUSH PRIVILEGES;
    Copy to Clipboard Toggle word wrap
  4. 将源服务器设置为只读状态:

    mysql> SET @@GLOBAL.read_only = ON;
    Copy to Clipboard Toggle word wrap

2.8.4. 将 MySQL 副本服务器连接到源服务器

在 MySQL 副本服务器上,您必须配置凭证和源服务器的地址。使用以下流程实现副本服务器。

先决条件

流程

  1. 将副本服务器设置为只读状态:

    mysql> SET @@GLOBAL.read_only = ON;
    Copy to Clipboard Toggle word wrap
  2. 配置复制源:

    mysql> CHANGE REPLICATION SOURCE TO
           SOURCE_HOST='source_hostname',
           SOURCE_USER='replication_user',
           SOURCE_PASSWORD='password',
           SOURCE_AUTO_POSITION=1,
           SOURCE_SSL=1,
           SOURCE_SSL_CA='path_to_ca_on_source',
           SOURCE_SSL_CAPATH='path_to_directory_with_certificates',
           SOURCE_SSL_CERT='path_to_source_certificate',
           SOURCE_SSL_KEY='path_to_source_key';
    Copy to Clipboard Toggle word wrap
  3. 在 MySQL 副本服务器中启动副本线程:

    mysql> START REPLICA;
    Copy to Clipboard Toggle word wrap
  4. 在源和目标服务器上取消只读状态的设置:

    mysql> SET @@GLOBAL.read_only = OFF;
    Copy to Clipboard Toggle word wrap
  5. 可选:检查副本服务器的状态以进行调试:

    mysql> SHOW REPLICA STATUS\G;
    Copy to Clipboard Toggle word wrap
    注意

    如果复制服务器启动或连接失败,您可以跳过 SHOW MASTER STATUS 命令的输出中显示的二进制日志文件位置后的某些事件。例如,从定义的位置跳过第一个事件:

    mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    Copy to Clipboard Toggle word wrap

    之后,尝试再次启动副本服务器。

  6. 可选:停止副本服务器中的副本线程:

    mysql> STOP REPLICA;
    Copy to Clipboard Toggle word wrap

2.8.5. 验证 MySQL 服务器上的复制

在多个 MySQL 服务器中配置复制后,您应该验证它是否正常工作。

流程

  1. 在源服务器上创建一个示例数据库:

    mysql> CREATE DATABASE test_db_name;
    Copy to Clipboard Toggle word wrap
  2. 验证 test_db_name 数据库是否在副本服务器上进行复制。
  3. 在源或副本服务器上执行以下命令,显示 MySQL 服务器的二进制日志文件的状态信息:

    mysql> SHOW MASTER STATUS;
    Copy to Clipboard Toggle word wrap

    Executed_Gtid_Set 列,针对在源上执行的事务显示一组 GTID,它不能为空。

    注意

    当在副本服务器上使用 SHOW REPLICA STATUS 时,Executed_Gtid_Set 行中会显示同样的 GTID 集合。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat