MySQL主从复制原理及实现教程

MySQL主从复制是一种数据复制技术,通过建立主服务器(Master)与从服务器(Slave)之间的数据同步,实现数据的备份、负载均衡和高可用性。

主从复制原理

MySQL binlog(binary log 即二进制日志文件) 主要记录了 MySQL 数据库中数据的所有变化(数据库执行的所有 DDL 和 DML 语句)。因此,我们根据主库的 MySQL binlog 日志就能够将主库的数据同步到从库中。

日志机制

  • 主服务器记录所有更改数据的操作到二进制日志(Binary Log,简称为binlog)。
  • 从服务器通过读取主服务器的binlog来跟进数据变化,从而保持与主服务器的数据一致性。

复制过程

  • 主服务器(Master)处理所有的写操作,并将这些操作记录到binlog中。
  • 从服务器定期连接主服务器,获取binlog并进行解析,将其中的更改应用到本地数据库,以此实现数据同步。

工作模式

  • 异步复制:从服务器在确认更新后,主服务器并不会等到从服务器会话响应后再执行其他操作。可能导致数据延迟。
  • 半同步复制:主服务器在发送更新后,会等待至少一个从服务器确认已接收到该更新。
  • 全同步复制:主服务器在每次操作后,必须等待所有从服务器确认更新,这可能会影响性能。

实现教程

这里采用一主一从配置:

需要准备两台服务器,分别安装好MySQL

如果是一台服务器,则可以安装两个端口不一样的MySQL

配置主节点

  1. 编辑配置文件(my.cnf 或 my.ini):

    [mysqld] 
    server-id = 1 # 唯一的server-id 
    log_bin = mysql-bin # 启用二进制日志
  2. 重启主服务器

    sudo service mysql restart
  3. 创建复制用户
    登录到MySQL并执行:

    CREATE USER 'root'@'%' IDENTIFIED BY '123456'; 
    GRANT REPLICATION SLAVE ON *.* TO 'root'@'%'; 
    FLUSH PRIVILEGES;
  4. 锁定表并获取当前binlog文件和位置

    FLUSH TABLES WITH READ LOCK;  
    SHOW MASTER STATUS;

配置从节点

  1. 编辑配置文件

    [mysqld] 
    server-id = 2 # 唯一的server-id
  2. 重启从服务器

    sudo service mysql restart
  3. 配置从服务器连接主服务器
    登录到从服务器的MySQL并执行:

    CHANGE MASTER TO MASTER_HOST='主服务器的IP地址', 
    MASTER_USER='root', # 刚刚配置的主服务器的用户名
    MASTER_PASSWORD='123456', # 刚刚配置的主服务器的密码
    MASTER_log_file='mysql-bin.000001', # 主服务器SHOW MASTER STATUS获取的File MASTER_log_pos=123; # 主服务器SHOW MASTER STATUS获取的Position
  4. 启动从服务器复制

    START SLAVE;
  5. 检查复制状态

    SHOW SLAVE STATUS\G;

    确保 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes

解锁主服务器的表

再回到主服务器执行:

UNLOCK TABLES;

注意事项

  • 确保主从节点的时钟同步。
  • 在主节点上修改数据后,不要进行DROP操作或者直接删除binlog文件,可能导致从节点无法同步。
  • 不能对从节点进行删除数据的操作,如果在从节点上手动删除数据,可能导致主从数据不一致,破坏复制的一致性。在一些特定情况下,例如为了数据清理或符合业务需求,可能需要直接在从节点上操作,但要确保了解这些操作的后果,并能在必要时手动同步数据。
  • 建议将从节点设置为只读模式,防止在从节点上进行数据修改。可以通过以下配置项设置从节点为只读:
  • SET GLOBAL read_only = ON;
  • 进行备份时,应避免对主数据库的频繁访问。

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java之弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值