2.8. 复制具有 TLS 加密的 MySQL
MySQL 为复制提供了各种配置选项,范围从基本到高级。这部分论述了使用全局事务标识符(GTID)在新安装的 MySQL 服务器上的 MySQL 中进行复制的基于事务的方法。使用 GTID 简化了事务识别和一致性验证。
如果要使用现有的 MySQL 服务器进行复制,您必须首先同步数据。如需更多信息,请参阅 上游文档。
2.8.1. 配置 MySQL 源服务器
您可以设置 MySQL 源服务器所需的配置选项,以便通过 TLS 协议正确地运行并复制数据库服务器上所做的所有更改。
先决条件
- 源服务器已安装。
- 源服务器有 TLS 设置。 重要- 源和目标证书必须由同一证书颁发机构签名。 
流程
- 包括 - /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 - binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选: - binlog_ignore_db=db_name- 使用此选项从复制中排除特定的数据库。 
 
- 重启 - mysqld服务:- systemctl restart mysqld.service - # systemctl restart mysqld.service- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
2.8.2. 配置 MySQL 副本服务器
您可以设置 MySQL 副本服务器所需的配置选项,以确保成功复制。
先决条件
- 副本服务器已安装。
- 副本服务器有 TLS 设置。 重要- 源和目标证书必须由同一证书颁发机构签名。 
流程
- 包括 - /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 - binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选: - binlog_ignore_db=db_name- 使用此选项从复制中排除特定的数据库。 
 
- 重启 - mysqld服务:- systemctl restart mysqld.service - # systemctl restart mysqld.service- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
2.8.3. 在 MySQL 源服务器上创建复制用户
您必须创建一个复制用户,并授予这个用户所需的复制流量的权限。此流程演示了如何创建具有适当权限的复制用户。仅在源服务器上执行这些步骤。
先决条件
- 源服务器已安装并配置,如 配置 MySQL 源服务器 中所述。
流程
- 创建复制用户: - mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password'; - mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 授予用户复制权限: - mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';* - mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';*- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新在 MySQL 数据库中载入授权表: - mysql> FLUSH PRIVILEGES; - mysql> FLUSH PRIVILEGES;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将源服务器设置为只读状态: - mysql> SET @@GLOBAL.read_only = ON; - mysql> SET @@GLOBAL.read_only = ON;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
2.8.4. 将 MySQL 副本服务器连接到源服务器
在 MySQL 副本服务器上,您必须配置凭证和源服务器的地址。使用以下流程实现副本服务器。
先决条件
- 源服务器已安装并配置,如 配置 MySQL 源服务器 中所述。
- 副本服务器已安装并配置,如 配置 MySQL 副本服务器 中所述。
- 您已创建了复制用户。请参阅 在 MySQL 源服务器上创建复制用户。
流程
- 将副本服务器设置为只读状态: - mysql> SET @@GLOBAL.read_only = ON; - mysql> SET @@GLOBAL.read_only = ON;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 配置复制源: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在 MySQL 副本服务器中启动副本线程: - mysql> START REPLICA; - mysql> START REPLICA;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在源和目标服务器上取消只读状态的设置: - mysql> SET @@GLOBAL.read_only = OFF; - mysql> SET @@GLOBAL.read_only = OFF;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:检查副本服务器的状态以进行调试: - mysql> SHOW REPLICA STATUS\G; - mysql> SHOW REPLICA STATUS\G;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果复制服务器启动或连接失败,您可以跳过 - SHOW MASTER STATUS命令的输出中显示的二进制日志文件位置后的某些事件。例如,从定义的位置跳过第一个事件:- mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; - mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 之后,尝试再次启动副本服务器。 
- 可选:停止副本服务器中的副本线程: - mysql> STOP REPLICA; - mysql> STOP REPLICA;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
2.8.5. 验证 MySQL 服务器上的复制
在多个 MySQL 服务器中配置复制后,您应该验证它是否正常工作。
流程
- 在源服务器上创建一个示例数据库: - mysql> CREATE DATABASE test_db_name; - mysql> CREATE DATABASE test_db_name;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
							验证 test_db_name数据库是否在副本服务器上进行复制。
- 在源或副本服务器上执行以下命令,显示 MySQL 服务器的二进制日志文件的状态信息: - mysql> SHOW MASTER STATUS; - mysql> SHOW MASTER STATUS;- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Executed_Gtid_Set列,针对在源上执行的事务显示一组 GTID,它不能为空。注意- 当在副本服务器上使用 - SHOW REPLICA STATUS时,- Executed_Gtid_Set行中会显示同样的 GTID 集合。