OpenAnolis8配置MySQL5.7主从复制

OpenAnolis8配置MySQL5.7主从复制🍒


MySQL5.7有多种主从复制方式,本文使用GTID方式做主从复制。

一、GTID主从复制的核心原理

  1. GTID的组成
    GTID由两部分组成:

    • server_uuid:MySQL实例的唯一标识符,存储在数据目录的auto.cnf文件中。

    • transaction_id:事务提交时生成的递增序列号,保证同一实例内唯一。

  2. 工作流程

    • 主库事务提交:主库为每个事务生成GTID并记录到二进制日志(binlog)中。

    • 从库同步

      • I/O线程:从库通过I/O线程拉取主库的binlog并写入本地中继日志(relay log)。

      • SQL线程:从库读取relay log中的GTID,检查本地gtid_executed集合。若该GTID未执行,则执行事务并记录到自身binlog;若已存在则跳过。

    • 自动定位:通过MASTER_AUTO_POSITION=1参数,从库自动向主库请求缺失的GTID事务,无需手动指定log_filelog_pos

  3. 核心优势

    • 简化故障转移:无需手动查找binlog位置,直接基于GTID自动同步。

    • 数据一致性:GTID连续无空洞,确保主从数据一致。

    • 安全性:每个GTID仅执行一次,避免重复执行导致数据混乱。


二、GTID主从复制的部署步骤

1. 环境准备

  • 主库(Master):IP 192.168.66.189,MySQL 5.6及以上版本。

  • 从库(Slave):IP 192.168.66.244,MySQL版本需与主库一致。

  • 确保主从服务器时间同步(如使用Chrony服务,见chrony时间同步)。

2. 主库配置

   部署MySQL见 MySQL5.7部署,这里不再赘述。

修改配置文件/etc/my.cnf,添加GTID配置信息。

[root@localhost ~]# vim /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set = utf8mb4
socket=/var/lib/mysql/mysql.sock

[mysqld]
user=mysql
socket=/var/lib/mysql/mysql.sock
port=3306
pid-file=/var/lib/mysql/mysql.pid
basedir=/usr/local/mysql5.7
datadir=/var/lib/mysql

# GITD配置
server-id = 1
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = ON
binlog_format = ROW
skip_slave_start = 1

lower_case_table_names = 1
explicit_defaults_for_timestamp = 1

#日志配置
log-error = /var/log/mysql/error.log
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 2
expire_logs_days = 7

# 字符集设置及排序规则
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

重启MySQL

[root@localhost ~]# systemctl restart mysql

创建复制用户

[root@localhost ~]# mysql -uroot -p
mysql> CREATE USER 'repl'@'192.168.66.244' IDENTIFIED BY 'Noleaf';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.66.244';
mysql> FLUSH PRIVILEGES;

 3. 从库配置

修改配置文件,添加GTID配置信息。

[root@localhost ~]# vim /etc/my.cnf
[client]
# 默认连接 MySQL 时使用的字符集
default-character-set = utf8mb4
socket=/var/lib/mysql/mysql.sock

[mysqld]
user=mysql
socket=/var/lib/mysql/mysql.sock
port=3306
pid-file=/var/lib/mysql/mysql.pid
basedir=/usr/local/mysql5.7
datadir=/var/lib/mysql

# GITD配置
server-id = 2
log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = ON
binlog_format = ROW
skip_slave_start = 1

lower_case_table_names = 1
explicit_defaults_for_timestamp = 1

#日志配置
log-error = /var/log/mysql/error.log
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 2
expire_logs_days = 7

# 字符集设置及排序规则
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

重启MySQL

[root@localhost ~]# systemctl restart mysql

4. 数据同步

导出主库数据

[root@localhost ~]# mysqldump -uroot -p --all-databases --single-transaction --set-gtid-purged=ON > master_dump.sql

导入从库

[root@localhost ~]# mysql -uroot -p < master_dump.sql 

5. 启动主从复制

配置从库连接主库

[root@localhost ~]# mysql -uroot -p
mysql> CHANGE MASTER TO
       MASTER_HOST = '192.168.66.189',
       MASTER_USER = 'repl',
       MASTER_PASSWORD = 'Noleaf',
       MASTER_AUTO_POSITION = 1;

 启动复制

mysql> start slave;

验证复制状态

mysql> SHOW SLAVE STATUS\G;

主要观察以下两个线程状态

6. 总结

基于GTID的主从复制通过全局事务标识符实现了高可靠、自动化的数据同步,尤其适合复杂拓扑和高可用场景。

部署时需注意GTID模式的一致性配置及数据备份的完整性,日常运维中可通过GTID集合监控快速定位同步问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值