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

embedded/2025/1/21 2:13:00/

一、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;

查看从库状态

 注意:我的Slave3机子直接克隆的master的,导致uuid一样结果出错了。

解决:进入/var/lib/mysql下查看auto.cnf,查看server-uuid对比一下三台机子各不同,和主库(master)冲突,在从库(salve3)上修改的。直接删除auto.cnf,重启mysql服务。会生成新的不一样的auto.cnf。

 验证:

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

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.ppmy.cn/embedded/155647.html

相关文章

安全算法 - 摘要算法

安全算法 - 摘要算法 文章目录 安全算法 - 摘要算法一:摘要算法概述二:MD5 摘要算法三:SHA1摘要算法 一:摘要算法概述 简介 摘要算法属于哈希散列加密算法消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数…

解决Spring Boot中Druid连接池“discard long time none received connection“警告

在使用Spring Boot结合Druid连接池时,开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影响应用程序的正常运行,但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因,并提供几种…

战场物联网:通信挑战与最新解决方案综述

论文标题 The Internet of Battle Things: A Survey on Communication Challenges and Recent Solutions 作者信息 Rachel Kufakunesu, Herman Myburgh, Allan De Freitas 论文出处 Discover Internet of Things (2025) 5:3 | The internet of battle things: a survey on…

Spring Boot框架总结(超级详细)

前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置&#…

Python编程中的两种主要的编程模式

在Python编程中,有两种主要的编程模式被广泛使用:面向过程编程(Procedural Programming) 和 面向对象编程(Object-Oriented Programming, OOP)。这两种模式各有优缺点,适用于不同的场景。 1. 面…

MySQL(七)MySQL和Oracle、PostgreSQL的区别

文章目录 一、MySQL和Oracle 1.1 基本差别*1.2 使用区别 二、MySQL和PostgreSQL 2.1 基本差别*2.2 使用差别 本系列文章: MySQL(一)SQL语法、数据类型、常用函数、事务 MySQL(二)MySQL SQL练习题 MySQL(…

Ubuntu更改apache的服务端口

1.介绍 承接上文,上文介绍了如何利用apache快速部署自己的网页,直接访问localhost就能打开网页的界面,这里其实是直接用了Ubuntu的80端口访问,如果我想换一个端口访问呢?应该怎么实现? 这一篇文章就来教你&…

游戏画质升级史的思考

画质代入感大众玩家对游戏的第一印象与评判标准 大众玩家还没到靠游戏性等内在因素来评判游戏的程度。 画面的重要性,任何时候都不能轻视。 行业就是靠摩尔定律来推动进步的。 NS2机能达到PS4到PS4PRO之间的水准,5050达到8G显存,都会引发连…