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 集合。