💡 什么是MySQL主从同步?

MySQL主从同步(Master-Slave Replication)是一种数据同步机制,允许一台数据库服务器(称为主库,Master)上的数据自动复制到另一台数据库服务器(称为从库,Slave)上。其原理是:主库将所有变更记录到二进制日志中(binlog),然后从库读取并执行这些变更,达到数据一致的效果。

🚀 简单理解:主库是数据写入的地方,从库则是“抄作业”的小伙伴!主库更新了,从库就马上同步,以保持数据一致性。

🌈主从同步的主要用途

数据备份:在主库发生故障时,可以通过从库快速恢复数据。

读写分离:通过从库分担主库的查询压力,实现负载均衡。

数据高可用:主库和从库可以分布在不同的服务器上,提升容灾能力。

🌈 主从同步的优缺点

在上手配置主从同步前,咱们来了解一下它的优缺点,毕竟“知己知彼,百战不殆”嘛~😏

优点

  • 读写分离,提升性能:将写操作交给主库,读操作分发给从库,大幅减少主库压力。

  • 数据备份,容灾恢复:主库出现问题时,从库的数据可用于快速恢复。

  • 高可用性:在从库的加持下,数据库更加稳定可靠。

缺点

  • 延迟问题:主库的操作需要传递到从库执行,网络或从库性能瓶颈可能会引起同步延迟。

  • 一致性问题:在主从同步时,如果从库未及时更新,可能会出现主从不一致的情况。

  • 仅支持异步:MySQL主从同步为异步模式,无法保证100%实时一致(当然也可以用半同步,但今天聚焦在基本的一主一从)。

🎨 一主一从同步的基本流程

来个流程图先睹为快~ 💡

[ 主库 (Master) ] -----> [ 二进制日志 (Binlog) ] -----> [ 从库 (Slave) ]

  • 主库写入数据:主库接收客户端请求,将写操作记录到二进制日志中。

  • 从库复制日志:从库通过I/O线程将主库的二进制日志传输到自己的中继日志(Relay Log)。

  • 从库执行日志:从库读取中继日志,通过SQL线程执行日志中的操作。

就是这么简单清晰,接下来,让我们动手实操!

🚀 实战演练:MySQL一主一从同步的配置

环境准备

操作系统:建议Linux系统(这里以Ubuntu为例)。

MySQL版本:5.7及以上。

配置:假设主库IP为192.168.1.10,从库IP为192.168.1.20。

第一步:配置主库(Master)

  1. 改主库的MySQL配置文件(通常在/etc/mysql/my.cnf):

[mysqld]
server-id=1              # 主库的ID,必须是唯一的
log-bin=mysql-bin        # 开启二进制日志功能

注意:server-id必须不同于从库,否则无法识别。

  1. 创建用于同步的用户:

CREATE USER 'repl_user'@'192.168.1.20' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON . TO 'repl_user'@'192.168.1.20';

FLUSH PRIVILEGES;
  1. 记录二进制文件位置:

  • 登录MySQL后执行SHOW MASTER STATUS;,记下File和Position字段的值,稍后会用到。

第二步:配置从库(Slave)

  1. 修改从库的MySQL配置文件:

[mysqld]

server-id=2               # 从库的ID,必须唯一

relay-log=relay-bin       # 开启中继日志功能
  1. 启动同步:

  • 登录从库后执行以下命令,将MASTER_LOG_FILE和MASTER_LOG_POS替换为刚刚在主库记录的二进制文件和位置。

CHANGE MASTER TO

    MASTER_HOST='192.168.1.10',

    MASTER_USER='repl_user',

    MASTER_PASSWORD='password',

    MASTER_LOG_FILE='mysql-bin.000001',

    MASTER_LOG_POS=154;
  1. 启动从库:

  • START SLAVE;

检查同步状态:

  • 运行SHOW SLAVE STATUS,检查Slave_IO_Running和Slave_SQL_Running状态。如果都是Yes,恭喜你,主从同步配置成功!🎉

🛠️ 常见问题及解决办法

  • 同步延迟:可通过Seconds_Behind_Master查看延迟,增加网络带宽或从库性能可减少延迟。

  • 主从不同步:可以尝试重新启动从库(STOP SLAVE;然后START SLAVE;)。

  • 无法连接到主库:检查网络连通性及防火墙配置,确保从库能访问主库。

友情提醒:在数据量较大或高并发场景下,建议定期监控主从状态,避免延迟过大。

🤔 主从同步的最佳实践

  • 在实际生产环境中,主从同步涉及的细节和优化策略还有很多,以下是几个小Tips:

  • 定期监控同步状态:使用监控工具查看同步延迟、网络情况等,避免数据不同步。

  • 使用半同步复制:如果业务对数据一致性要求较高,可以考虑使用半同步复制。

  • 备份策略:即便有主从同步,也不能忽视数据库的备份策略。

  • 分库分表:在数据量非常大的情况下,可考虑分库分表,结合主从同步提升性能。