当前位置: 首页 > article >正文

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理
        MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。

        主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。

二、MySQL主从复制意义
数据分布:主从复制支持数据跨服务器或地理分布,提升访问速度和可用性。
灾备:如果主数据库出现问题,可以快速切换到从数据库,保证业务的连续性。
读写分离:通过主从复制,可以实现数据库层面的读写分离,提高查询效率和系统性能。
负载平衡:增加从数据库数量,分散读请求,避免单一服务器过载。
提高并发能力:读写分离与从数据库扩展,结合优化措施,增强MySQL并发处理能力。
三、MySQL主从复制步骤
1、Master(主库)将用户对数据库更新的操作以二进制格式保存到BinLog日志文件中。

2、Slave(从库)从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave。

3、Slave的IO线程和主库的dump线程建立连接。

4、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master “我需要从某个binlog的哪个位置开始往后的日志内容,请发给我”。
5、Master的dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
6、SlaveIO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中。
7、SlaveSQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge。

四、注意事项
版本兼容性:为了确保复制的顺利进行,主从节点的MySQL版本最好相同(或不应高于从节点)。
延迟问题:由于复制是异步的,可能会出现主从数据不一致的情况,这是主从复制中的一个常见问题。
不能代替备份:主从复制不能完全代替数据备份,因为主节点上的误操作也会同步到从节点。
五、部署实操

1、基于binlog的主从同步
Master配置
[root@Master ~]# yum install -y mysql-server
 
#配置文件,注意://三台主从库的id必须不同
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=1     //直接在后面添加 
[root@Master ~]# systemctl restart mysqld
 
#授权用户
mysql> create user rep@'192.168.1.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'192.168.1.%';
mysql> show master status;  //查看主服务器状态,日志用于从服务器同步,position是当前定位
Slave配置
#配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=2
[root@Slave1 ~]# systemctl restart mysqld
 
[root@Slave3 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=3
[root@Slave3 ~]# systemctl restart mysqld
 
#设置复制参数,两个Slave一样的配置
mysql> change master to
    -> master_host='192.168.1.11',
    -> master_user='rep',
    -> master_password='123456',
    -> master_log_file='binlog.000001',
    -> master_log_pos=1640,
    -> get_master_public_key=1;
 
#启动复制进程,两个Slave都启动
mysql> start slave;

查看从库状态

2、 基于gtid的主从同步配置
准备工作,停止从库(Slave1和3)的复制

确保从库的复制状态已经停止,可以通过运行show slave status \G命令来检查。

Slave1:

Slave3:

Master配置
#修改配置文件
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
#在最后添加
gtid_mode=ON
enforce-gtid-consistency=ON
 
#重启MySQL服务
[root@Master ~]# systemctl restart mysqld.service
 
#重置二进制日志和GTID
mysql> reset master;
 
#创建用户授予权限
mysql> create user rep@'192.168.1.%' identified with mysql_native_password by '123456';  //报错不影响因为之前创建过
mysql> grant replication slave on *.* to rep@'192.168.1.%';
 
#重新加载授权表
mysql> flush privileges;
 
Slave配置
#Slave1和3相同配置
 
#修改配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
gtid_mode=ON
enforce-gtid-consistency=ON
 
#重启服务
[root@Slave1 ~]# systemctl restart mysqld.service
 
#配置连接到主库
mysql> change replication source to
    -> source_host='192.168.1.11',
    -> source_port=3306,
    -> source_user='rep',
    -> source_password='123456',
    -> source_auto_position=1;
 
mysql> start replica;

查看从库状态

验证:

 主库(Master)建表,在从库(Slave1和3)上能看到主库创建的表student1,复制完成。


http://www.kler.cn/a/535637.html

相关文章:

  • 【2】高并发导出场景下,服务器性能瓶颈优化方案-异步导出
  • CSS(三)less一篇搞定
  • MATLAB中matches函数用法
  • Golang 并发机制-6:掌握优雅的错误处理艺术
  • 在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别
  • 【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据
  • unity学习28:灯光light相关 类型type,模式mode等
  • Java面试常见问题总结
  • 【苍穹外卖 Day1】前后端搭建 Swagger导入接口文档
  • JVM为什么要指针压缩?为什么能指针压缩?原理是什么?
  • 【1】高并发导出场景下,服务器性能瓶颈优化
  • 3D图形学与可视化大屏:什么是片段着色器,有什么作用。
  • 保姆级教程Docker部署KRaft模式的Kafka官方镜像
  • Sentinel 断路器在Spring Cloud使用
  • 【AI编程】从实践出发,分享“儿童时钟学习”小程序的改版历程
  • 【Linux】26.进程信号(2)
  • 解密 Java Lambda 表达式中的 “effectively final“ 陷阱
  • AI大模型训练实战:分布式与微调指南
  • 精选五款报表工具:提升企业决策效率和数据洞察
  • Mybatis篇
  • OPENGLPG第九版学习 - 着色器基础
  • 为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入
  • Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具(进阶版)
  • Spring MVC整体结构介绍,图文+代码
  • JVM的详细讲解
  • 爬虫抓取时遇到反爬策略怎么办?