0
点赞
收藏
分享

微信扫一扫

详讲mysql主从复制

扶摇_hyber 2024-11-27 阅读 24

MySQL 主从复制(Replication)是 MySQL 数据库中实现数据冗余与分布的重要机制。它通过在主数据库(Master)和从数据库(Slave)之间同步数据,提高数据可用性、分担读操作的压力,适用于负载均衡和高可用性场景。以下详细讲解 MySQL 主从复制的概念、原理、配置和注意事项。

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

  1. 主数据库记录变更事件
    主库上的所有写操作(如 INSERTUPDATEDELETE)会记录在二进制日志(Binary Log)中。这些日志包含数据变更的详细信息。
  2. 从数据库拉取日志
    从库通过 I/O 线程从主库拉取这些二进制日志,并保存到自己的中继日志(Relay Log)中。
  3. 从数据库重放日志
    从库的 SQL 线程会读取中继日志,并执行其中的 SQL 语句以保持与主库的数据一致。

二、主从复制的模式

  1. 异步复制(Asynchronous Replication)
    主库无需等待从库确认日志接收,性能高但有数据延迟和丢失风险。
  2. 半同步复制(Semi-Synchronous Replication)
    主库在提交事务时会等待至少一个从库确认接收日志,确保部分数据同步。
  3. 组复制(Group Replication)
    一种多主架构,允许多节点协作,提供更高的容错性。

三、主从复制的配置步骤

1. 准备工作

  • 确保主库和从库的 MySQL 版本兼容。
  • 配置网络互通(如防火墙允许 3306 端口)。
  • 主库和从库必须拥有不同的 server-id。

2. 配置主库

编辑主库的 MySQL 配置文件(如 my.cnfmy.ini):

[mysqld]
server-id = 1               # 主库唯一ID
log-bin = mysql-bin         # 启用二进制日志
binlog-do-db = your_db      # 选择需要复制的数据库(可选)
binlog-ignore-db = test     # 忽略的数据库(可选)

重启 MySQL 服务:

sudo systemctl restart mysql

创建一个复制用户,并授权:

CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

记录当前二进制日志的状态:

SHOW MASTER STATUS;

输出示例:

File: mysql-bin.000001
Position: 154

3. 配置从库

编辑从库的配置文件:

[mysqld]
server-id = 2               # 从库唯一ID
relay-log = relay-bin       # 启用中继日志

重启 MySQL 服务。

在从库上配置主从关系:

CHANGE MASTER TO
  MASTER_HOST='主库IP地址',
  MASTER_USER='replicator',
  MASTER_PASSWORD='your_password',
  MASTER_LOG_FILE='mysql-bin.000001',  # 主库状态中记录的 File
  MASTER_LOG_POS=154;                 # 主库状态中记录的 Position

启动从库复制:

START SLAVE;

4. 验证主从复制状态

在从库上查看状态:

SHOW SLAVE STATUS\G;

关键字段:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
    表示主从复制正常运行。

四、主从复制的常见问题与解决

  1. 延迟问题
    当主库写入量大,从库压力过高时,可能导致数据延迟。可通过优化 SQL 查询、增加硬件性能或调整从库数量分担压力。
  2. 主从不一致
    如果主从数据不一致,可能需要重新同步数据。例如:
  • 备份主库数据并还原到从库。
  • 使用工具如 pt-table-checksum 检查差异。
  1. 复制中断
    如果复制停止,可以通过以下步骤修复:
  • 查看 SHOW SLAVE STATUS\GLast_Error
  • 跳过错误:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

五、扩展和优化

  1. 读写分离
    配合中间件(如 MySQL Proxy 或 MyCat),实现主库负责写,从库负责读,提升性能。
  2. 多主多从
    在高并发场景下,可以部署多个主库和多个从库,并结合分片策略提升效率。
  3. 监控工具
    使用 Percona Toolkit 或监控系统(如 Zabbix、Prometheus)实时跟踪复制状态。

六、主从复制的应用场景

  • 高可用性:快速恢复故障,提高服务的容错率。
  • 负载均衡:读写分离分担压力。
  • 备份方案:利用从库作为热备份,避免对主库的操作干扰生产环境。
举报

相关推荐

MYSQL主从复制

MySQL:主从复制

mysql 主从复制

MySQL主从复制

mySQL主从复制

mysql主从复制

【MYSQL】主从复制

0 条评论