位置: 文档库 > 数据库 > MySQL数据库主从同步安装与配置总结

MySQL数据库主从同步安装与配置总结

薇娅 上传于 2021-03-06 17:10

《MySQL数据库主从同步安装与配置总结》

一、引言

MySQL作为开源关系型数据库的代表,广泛应用于互联网、金融、物联网等领域。主从同步(Replication)是其核心高可用特性之一,通过将主库(Master)的数据变更实时同步到从库(Slave),可实现读写分离、数据备份、故障转移等场景。本文将系统总结MySQL主从同步的安装与配置流程,涵盖环境准备、配置调整、同步验证及常见问题处理,为DBA和开发者提供可落地的实践指南。

二、主从同步原理与架构

1. 工作原理

MySQL主从同步基于二进制日志(Binary Log)实现。主库将所有数据变更操作(DDL/DML)记录到binlog,从库通过I/O线程读取主库的binlog并保存到中继日志(Relay Log),再由SQL线程重放这些日志,最终实现数据同步。

2. 同步模式

(1)异步复制(默认):主库执行事务后立即返回,不等待从库确认,可能丢失少量数据。

(2)半同步复制:主库至少等待一个从库接收并写入Relay Log后才返回,提高数据安全性。

(3)组复制(Group Replication):基于Paxos协议的多主同步方案,适用于高可用集群。

3. 拓扑结构

(1)一主一从:基础架构,适用于小型应用。

(2)一主多从:支持读写分离,从库可分担读压力。

(3)级联复制:主→从1→从2,减少主库负载。

(4)多主复制:多个主库互相同步,需配合GTID使用。

三、环境准备

1. 服务器规划

建议主从库使用相同MySQL版本(如8.0.x),避免兼容性问题。硬件配置需考虑业务负载,从库的CPU和IO性能应不低于主库的50%。

2. 网络要求

主从库间需开通3306端口(默认),建议延迟低于50ms。可通过ping和telnet测试连通性:

ping slave_ip
telnet master_ip 3306

3. 安装MySQL

以CentOS 7为例,使用YUM安装MySQL 8.0:

# 添加MySQL YUM仓库
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
rpm -ivh mysql80-community-release-el7-6.noarch.rpm

# 安装MySQL服务器
yum install mysql-community-server

# 启动服务
systemctl start mysqld
systemctl enable mysqld

4. 初始化配置

修改/etc/my.cnf文件,主库和从库需分别配置以下参数:

主库配置(my.cnf):

[mysqld]
server-id = 1               # 唯一ID,主从不能重复
log-bin = mysql-bin         # 启用binlog
binlog-format = ROW         # 推荐使用ROW格式
binlog-do-db = testdb       # 可选:指定同步的数据库
expire-logs-days = 7        # binlog保留天数
sync-binlog = 1             # 每次事务提交都刷盘

从库配置(my.cnf):

[mysqld]
server-id = 2               # 与主库不同
relay-log = mysql-relay-bin # 启用中继日志
log-slave-updates = ON      # 从库记录变更到自身binlog(级联复制需要)
read-only = ON              # 从库只读(可选)
replicate-do-db = testdb    # 可选:指定同步的数据库

配置完成后重启服务:

systemctl restart mysqld

四、主从同步配置步骤

1. 主库创建复制账号

登录主库MySQL,执行:

CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

2. 获取主库二进制日志位置

执行以下命令获取当前binlog文件名和位置:

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      154 | testdb       |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

记录File和Position值,后续配置从库时需要使用。

3. 配置从库连接主库

登录从库MySQL,执行:

CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPassword123!',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=154;

# 如果使用GTID(推荐MySQL 5.6+)
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPassword123!',
MASTER_AUTO_POSITION=1;

4. 启动复制进程

START SLAVE;

5. 验证同步状态

SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master_ip
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              ...(其他字段省略)

关键字段说明:

(1)Slave_IO_Running: Yes —— I/O线程正常运行

(2)Slave_SQL_Running: Yes —— SQL线程正常运行

(3)Seconds_Behind_Master: 0 —— 从库延迟(秒)

五、高级配置与优化

1. 半同步复制配置

(1)主库安装半同步插件:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 10000; # 10秒超时

(2)从库安装半同步插件:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

(3)重启从库I/O线程:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

2. GTID全局事务标识

GTID可简化故障切换和主从切换操作。主库配置:

[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON

从库使用MASTER_AUTO_POSITION=1替代传统的log_file/log_pos。

3. 过滤同步数据

(1)主库过滤(不推荐):

binlog-do-db = db1          # 只同步db1
binlog-ignore-db = mysql    # 忽略mysql库

(2)从库过滤(推荐):

replicate-do-db = db1
replicate-ignore-db = mysql

4. 并行复制优化

MySQL 5.7+支持基于库、事务组或WRITESET的并行复制:

[mysqld]
slave_parallel_workers = 4   # 启用4个SQL线程
slave_parallel_type = LOGICAL_CLOCK # 基于事务组并行

六、常见问题与解决方案

1. 同步中断处理

(1)错误1032(Key not found)

原因:从库执行主库的DELETE/UPDATE时找不到对应记录。

解决方案:

# 跳过指定数量的事务
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;

(2)错误1062(Duplicate entry)

原因:从库存在主库已删除的重复数据。

解决方案:手动删除冲突数据后重启SQL线程。

2. 主从数据不一致检测

使用pt-table-checksum工具检测差异:

pt-table-checksum --replicate=test.checksums --host=master_ip -u root -p
pt-table-sync --sync-to-master h=slave_ip,u=root,p= --replicate=test.checksums --print

3. 延迟优化

(1)监控延迟:

SHOW SLAVE STATUS\G | grep Seconds_Behind_Master

(2)优化措施:

• 增加从库slave_parallel_workers

• 使用ROW格式binlog

• 避免在主库执行大事务

• 升级硬件(SSD、多核CPU)

七、维护与监控

1. 日常检查项

(1)同步状态:

SHOW SLAVE STATUS\G

(2)主库binlog增长:

SHOW BINARY LOGS;

(3)从库Relay Log积压:

SHOW PROCESSLIST; # 查看SQL线程状态

2. 自动化监控脚本示例

#!/bin/bash
# 检查从库状态
SLAVE_STATUS=$(mysql -uroot -p'password' -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running:|Slave_SQL_Running:|Seconds_Behind_Master:")

IO_RUNNING=$(echo "$SLAVE_STATUS" | grep "Slave_IO_Running:" | awk '{print $2}')
SQL_RUNNING=$(echo "$SLAVE_STATUS" | grep "Slave_SQL_Running:" | awk '{print $2}')
DELAY=$(echo "$SLAVE_STATUS" | grep "Seconds_Behind_Master:" | awk '{print $2}')

if [ "$IO_RUNNING" != "Yes" ] || [ "$SQL_RUNNING" != "Yes" ]; then
    echo "ERROR: Replication is not running!" | mail -s "MySQL Replication Alert" admin@example.com
fi

if [ "$DELAY" -gt 300 ]; then
    echo "WARNING: Replication delay is $DELAY seconds" | mail -s "MySQL Replication Delay" admin@example.com
fi

八、总结

MySQL主从同步是构建高可用数据库架构的基础。通过合理配置binlog、GTID、半同步复制和并行复制等特性,可显著提升数据安全性和系统性能。实际部署中需注意:

1. 保持主从库MySQL版本一致

2. 定期监控同步状态和延迟

3. 制定数据一致性校验机制

4. 准备故障切换预案

随着MySQL 8.0的普及,基于GTID的自动化主从切换和组复制技术将成为主流。DBA应持续关注官方文档和社区最佳实践,不断优化同步架构。

关键词:MySQL主从同步、二进制日志、GTID、半同步复制、并行复制、数据一致性、故障处理

简介:本文详细阐述了MySQL数据库主从同步的原理、架构设计、安装配置步骤及高级优化技术。内容涵盖环境准备、主从库配置、同步验证、常见问题处理和监控维护,结合实际案例提供可落地的解决方案,适合DBA和开发者参考。