3.9. 使用 TLS 加密复制 MySQL
MySQL 为复制提供各种配置选项,范围从基本到高级。这部分描述了使用全局事务标识符(GTID)在新安装的 MySQL 服务器上在 MySQL 中进行复制的一种基于事务的方法。使用 GTID 简化了事务识别和一致性验证。
要在 MySQL 中设置复制,您必须:
如果要使用现有的 MySQL 服务器进行复制,您必须首先同步数据。如需更多信息,请参阅 上游文档。
3.9.1. 配置 MySQL 源服务器 复制链接链接已复制到粘贴板!
您可以设置 MySQL 源服务器所需的配置选项,以便正确运行,并复制通过 TLS 协议对数据库服务器所做的所有更改。
先决条件
- 源服务器已安装。
源服务器有 TLS 设置。
重要源和副本证书必须由同一证书颁发机构签名。
流程
包括
/etc/my.cnf.d/mysql-server.cnf文件中[mysqld]部分下的以下选项:bind-address=source_ip_adress从副本到源的连接需要这个选项。
server-id=idid 必须是唯一的。
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_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:
binlog_ignore_db=db_name使用此选项从复制中排除特定的数据库。
重启
mysqld服务:systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9.2. 配置 MySQL 副本服务器 复制链接链接已复制到粘贴板!
您可以设置 MySQL 副本服务器所需的配置选项,以确保成功复制。
先决条件
- 副本服务器已安装。
副本服务器有 TLS 设置。
重要源和副本证书必须由同一证书颁发机构签名。
流程
包括
/etc/my.cnf.d/mysql-server.cnf文件中[mysqld]部分下的以下选项:server-id=idid 必须是唯一的。
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_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:
binlog_ignore_db=db_name使用此选项从复制中排除特定的数据库。
重启
mysqld服务:systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.9.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
3.9.4. 将副本服务器连接到源服务器 复制链接链接已复制到粘贴板!
在 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
3.9.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 集合。