【MySQL主从复制】

news2024/11/17 7:45:33

目录

一、MySQL Replication

1.概述

2.优点

二、MySQL复制类型

1.异步复制(Asynchronous repication)

2.全同步复制(Fully synchronous replication)

3.半同步复制(Semisynchronous replication)

三、MySQL支持的复制方式

1.基于SQL语句的复制

2.基于行的复

3.混合模式复制

4.复制的工作过程

5.复制过程的限制

四、部署MySQL主从异步复制

1.在MySQL Master上的配置NTP时间同步服务器

1.1 启动NTP服务

1.2 在2个Slave节点上配置与Master进行时间同步

1.3 所有机器上的操作

2.配置MySQL Master服务器

2.1 在/etc/my.cnf中修改或者增加如下内容

2.2 创建Replication用户

2.3 获得Master DB的相关信息

2.4 备份Master原有数据

2.5 在MySQL Slave上的配置

2.6 测试复制是否成功


一、MySQL Replication

1.概述

        MySQL Replication俗称MySQL AB复制、主从复制、主从同步,是MySQL官方推荐的数据同步技术。数据同步基本过程为从数据库会实时去读取主数据库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到数据同步效果。

2.优点

  • 通过增加从服务器来提高数据库平台的可靠性。在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器地数量,从而调整数据库平台地高性能。
  • 提高数据安全性,因为数据已复制到从服务器,主数据库异常时,可以将从服务器复制进程终止来达到保护数据完整性地特点。
  • 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而缓解主服务器地性能压力。

二、MySQL复制类型

1.异步复制(Asynchronous repication)

        MySQL默认地复制是异步地,主库在执行完客户端提交地事务后会立刻将结果返回给客户端,并不关心从库是否已经接受并处理了事务,这样就会有一个问题,主库如果down掉了,此时主上已经提交地事务可能没有传到从库服务器上,如果此时,强制将从提升为主,可能会导致新主上的数据不完整。默认情况下MySQL5.5/5.6/5.7和mariaDB10.0/10.1的复制功能是异步的。

2.全同步复制(Fully synchronous replication)

        指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响,返回客户端的响应速度也会被拖慢。

3.半同步复制(Semisynchronous replication)

        MySQL由Google贡献的补丁才开始支持半同步复制模式,介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接受到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。当出现超时情况时,源主服务器会暂时切换到异步复制模式,直到至少有一台设置为半同步复制模式的从服务器及时收到信息为止。

        半同步复制模式在主服务器和从服务器同时启用,否则主服务器默认使用异步复制模式。

三、MySQL支持的复制方式

1.基于SQL语句的复制

在主服务器上执行的SQL语句,在从服务器上执行同样的SQL语句,效率比较高。

2.基于行的复

主服务器把表的行变化作为事件写入到二进制日志中,主服务器把代表了行变化的事件复制到从服务器中。

3.混合模式复制

先采用基于语句的复制,一旦发现基于语句无法精确复制时,再采用行。

4.复制的工作过程

  • 在每个事务更新完成数据之前,Master会在二进制日志中记录这些数据的语句,当MySQL将事务串行的写入二进制日志完成后,Master通知存储引擎提交事务并将数据写入磁盘
  • Slave开启一个I/O工作线程,在Master之间建立一个连接,然后开始Binlog dump process,Binlog dump process会从Master的二进制日志中读取操作事件,如果已经跟Master达到一致状态,它会催眠并等待Master产生新的操作事件,I/O线程将这些改变数据的事件写入自己的中继日志。
  • SQL Slave Thread(SQL工作线程)是处理MySQL Replication过程的最后一步。SQL线程从中继日志读取操作事件,重放其中的事件从而更新Slave服务器的数据,使slave与Master中的数据保持一致,只要该线程与I/O线程保持一致,中继日志通常会在OS的缓存中,所以中继日志的开销很小。

5.复制过程的限制

  • MySQL5.6之前的版本复制操作在slave上执行的是串行化的,也就是Master上的并行更新会导致数据复制延迟
  • 所有MySQL服务器的版本都要高于3.2,还有一个基本的原则就是从服务器的数据库版本可以高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。

四、部署MySQL主从异步复制

1.在MySQL Master上的配置NTP时间同步服务器

1.1 启动NTP服务

rpm -q ntp

vim /etc/ntp.conf
        server 127.127.1.0
        fudge 127.127.1.0 stratum 8

systemctl start ntpd && systemctl enable ntpd

1.2 在2个Slave节点上配置与Master进行时间同步

rpm -q ntpdate

ntpdate 192.168.42.138

1.3 所有机器上的操作

yum -y install mariadb mariadb-devel mariadb-server

2.配置MySQL Master服务器

2.1 在/etc/my.cnf中修改或者增加如下内容

vim /etc/my.cnf

        [mysqld]
        server-id=1
        log-bin=mysql-binlog
        log-slave-updates=true

 

重启MySQL服务器

systemctl restart mysqld

netstat -anptu | grep 3306

2.2 创建Replication用户

mysql -uroot -p'123456'

grant replication slave on *.* to 'myslave'@'192.168.42.%' identified by '123456';

flush privileges;

:Replication slave:用于复制性从属服务器(从主服务器中读取二进制日志文件权限)

2.3 获得Master DB的相关信息

show master status;

:供slave连接使用,记录下File和Position的值。

2.4 备份Master原有数据

mysqldump -uroot -p --all-databases > /root/alldbbackup.sql

scp /root/ alldbbackup.sql root@192.168.42.145:/root/

scp /root/ alldbbackup.sql root@192.168.42.148:/root/

  •         如果在生产环境中Master服务器已经运行一段时间,或者Master服务器上已经存在数据,为了保证所有数据的一致性,需要先将Master目前已有的数据全部导给Slave服务器。
    •         备份的方法有很多,可以直接备份数据文件,也可以使用mysqldump工具。全新搭建的环境不存在数据备份问题。
    • 2.5 在MySQL Slave上的配置

    • 导入Master的备份脚本

    • systemctl start mysqld

    • 从库连接主库进行测试,如果连接成功说明主库配置成功

    • mysql -u myslave -p123456 -h 192.168.42.138

    • 修改MySQL配置文件(配置多个从服务器时依次设置server-id号)

      • vim /etc/my.cnf

                [mysqld]
                server-id=2
                relay-log=relay-log-bin
                relay-log-index=slave-relay-bin.index

      • vim /etc/my.cnf

                [mysqld]
                server-id=3
                relay-log=relay-log-bin
                ​​​​​​​relay-log-index=slave-relay-bin.index

      • :

    • 修改完后重启数据库

    • systemctl restart mysqld

    • 在Slave服务器授权,启动从库,进行主从库数据同步

    • mysql -uroot -p'123456'

      • stop slave;

      •  

      • start slave;

      •  show slave status\G

    • :参数说明

  • CHANGE MASTER TO
  • MASTER_HOST='master_host_name', #主服务器的IP地址
  • MASTER_USER='replication_user_name', #主服务器授权的用户
  • MASTER_PASSWORD='replication_password', #主服务器授权的密码
  • MASTER_LOG_FILE='recorded_log_file_name', #主服务器二进制日志的文件名
  • MASTER_LOG_POS=recorded_log_position; #日志文件的开始位置

2.6 测试复制是否成功

在Master服务器上创建一个数据库或者表,到Slave服务器上查看,如果配置成功就可以成功同步。

主库查看当前存在的库

show databases;

从库查看当前存在库

主库服务器创建库

从库验证

说明主从数据库创建成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/803576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用VBA制作一个转盘游戏之五:最终的游戏过程

【分享成果,随喜正能量】真正厉害的人,从来不说难听的话,因为人心不需要听真话,只需要听好听的话,所以学着做一个有温度且睿智的人。不相为谋,但我照样能心平气和,冷眼相待,我依旧可…

Vite + Vue3 +TS 项目router配置踩坑记录! ===>“找不到模块“vue-router”或其相应的类型声明。“<===

目录 第一个坑:"找不到模块“vue-router”或其相应的类型声明。" 解决 第二个坑:Cannot read properties of undefined (reading push) 解决:将useRouter()方法的执行位置尽量放靠上一点就行了。 最近在使用vite vue3 types…

蓝精灵协会 项目最新进展 | 2023 年夏季

亲爱的蓝精灵协会持有者、会员及朋友们: 在熊市中打造一项雄心勃勃的 NFT 项目从来都不是一件容易的事情。在 2022 年的加密货币市场崩盘之后,大多数人都不会考虑投资超过 200 万欧元。但这正是我们所做的。我们对我们大胆的想法充满信心,尽管…

蓝桥杯单片机第十一届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…

8年经验分享 —— 带你从0开始学习自动化框架Airtest

现在市面上做UI自动化的框架很多&#xff0c;包括我们常用的Web自动化框架Selenium&#xff0c;移动端自动化框架Appium。 虽然Selenium和Appium分属同源&#xff0c;而且API都有很多相同的地方&#xff0c;可以无损耗切换&#xff0c;但是还是需要引入不同的库&#xff0c;而…

0005-对于大数据学习与复习,我想给你划个重点

近期陆陆续续的会有一些读者朋友咨询一些学习大数据或者大数据面试的事,由于时间关系,我一般会简单的说一些大方向,然后会让去b站找一些认可度比较高的项目,但是这样的话,总感觉有点敷衍了,还是想好好的给大家画个重点

Springboot -- 按照模板生成docx、pdf文件,docx转pdf格式

使用 poi-tl 根据模板生成 word 文件。 使用 xdocreport 将 docx 文件转换为 pdf 文件。 xdocreport 也支持根据模板导出 word &#xff0c;但是 poi-tl 的功能更齐全&#xff0c;操作更简单&#xff0c;文档清晰。 poi-tl 、xdocreport 内部均依赖了 poi &#xff0c;要注意两…

QT 作业 day4 7/28

1.思维导图 2.手动完成服务器实现 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器 #include <QTcpSocket> //连接客户端套接字 #include <QMessageBox> #include <QList> //套接字容器 #include &l…

极简实现任意版本 SwiftUI 中隐藏和显示系统底部横条(Home Indicator)

功能需求 有时我们希望在 SwiftUI 界面中隐藏系统底部横条(Home Indicator),虽然从 iOS 16(SwiftUI 4.0)开始, 对此提供了专门的原生方法,不过如何在之前版本的 SwiftUI 中完成此功能呢? 如上图所示,我们在任意版本 SwiftUI 中实现了系统底部横条的显示和隐藏功能,…

栈和队列第二弹,完结篇

&#x1f49b;1.队列的基本底层实现 public class MyQueue {int array[];int usedsize0;public MyQueue(){this.arraynew int [5];} &#x1f499;2.判断是否满&#xff0c;满了需要扩容 Arrays.copyOf(数组&#xff0c;数组的长度&#xff09;&#xff1b;我常常会忘记哈…

数据库的介绍和分类

目录 一、数据库的介绍和分类 二、命令行客户端 三、数据操作 四、查询的基本操作 五、条件查询 六、分组和聚合 资料获取方法 一、数据库的介绍和分类 数据库&#xff1a;长期存储在计算机内、有组织的数据集合 数据库的分类&#xff1a; 关系型数据库 以表格的形式…

Redis - 三大缓存问题(穿透、击穿、雪崩)

缓存穿透 概念&#xff1a; 查询一个数据库中也不存在的数据&#xff0c;数据库查询不到数据也就不会写入缓存&#xff0c;就会导致一直查询数据库 解决方法&#xff1a; 1. 缓存空数据 如果数据库也查询不到&#xff0c;就把空结果进行缓存 缺点是 - 消耗内存 2. 使用布…

【牛客面试必刷TOP101】Day1.反转链表和合并两个排序的链表

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

思科视频会议改造为云视频会议

复杂、封闭、昂贵是传统硬件视频会议的明显特点&#xff0c;面对现在多样化的参会需求&#xff0c;传统硬件视频会议固定在会议室的方式需要改变&#xff0c;并需要多层级来参与的时候&#xff0c;我们如何部署视频会议室升级改造方案。 用户需求&#xff1a; 新生活集团(中国…

爬虫分析必备技能:Chrome浏览器使用$x()快速提取列表内容

尝试快速打印一个页面的列表信息&#xff0c;我尝试用console.log$x()快速打印结果。 先找到一个合适的测试对象&#xff0c;比如csdn首页的热点&#xff1a; 按F12进入开发者工具找到这个列表的xpath&#xff1a; 根据我写的xpath找到了5个&#xff1a; 尝试把其中一个的标题…

【ABAP】事务码F-02/FB01/FB02 会计凭证过账BTE增强

需求&#xff1a;事务码F-02/FB01/FB02进行过账时&#xff0c;对行项目数据进行校验 流程&#xff1a; 事务码FIBF——环境&#xff08;信息系统&#xff08;处理&#xff09;&#xff09; 执行 找到1120事件选中&#xff0c;点击模式函数模块 点①复制函数&#xff0c;②出函…

百题千解计划【CSDN每日一练】计数问题(附解析+多种实现方法:Python、Java、C、C++、JavaScript、C#、go)

人要多久才能成熟!一瞬间?还是一辈子? 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工智能领域优质创作者🏆 �

用WhatsApp开拓和跟进客户,需要注意这些雷点

我们很多新手小白在利用WhatsApp开拓和维护客户的时候&#xff0c;总是容易犯一些错误&#xff0c;踩到雷点&#xff0c;这不利于客户对企业的印象&#xff0c;不利于增长&#xff0c;下面我们来说一些需要注意的点&#xff1a; 1、专业正确的用语 不管外贸人是跟进哪个国家…

tinkerCAD案例:16. 用字母创建你的名字

tinkerCAD案例&#xff1a;16. Create Your Name From Letters 用字母创建你的名字 letters together so they can be 3D printed. While this could be done with any word, in this example we will use my last name. In the make it your own lesson I provide additional…

全球掀复现「室温常压超导体」热潮,中国队已肝十几小时,韩国团队却内讧了

鱼羊 尚恩 发自 凹非寺 量子位 | 公众号 QbitAI 室温常压超导&#xff0c;这回是真的闹大了。 不止是在国内连上热搜&#xff0c;火速出圈引爆大众讨论。 铅磷灰石价格也在24小时之内迅速被炒了起来。 而物理界的科学家们&#xff0c;更是第一时间拉开了一场全球复现行动。 …