【MySQL主从复制】

目录

一、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.mzph.cn/news/11815.shtml

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

相关文章

【Rust 基础篇】Rust FFI:连接Rust与其他编程语言的桥梁

导言 Rust是一种以安全性和高效性著称的系统级编程语言,具有出色的性能和内存安全特性。然而,在现实世界中,我们很少有项目是完全用一种编程语言编写的。通常,我们需要在项目中使用多种编程语言,特别是在与现有代码库…

ava版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发定制,源码交付。 Java版知识付费-轻松拥有知识付费平台 多种直播形式,全面满足直播场景需求 公开课、小班课、独…

Rust ESP32C3开发

Rust ESP32C3开发 系统开发逐步使用Rust语言,在嵌入式领域Rust也逐步完善,本着学习Rust和ESP32的目的,搭建了ESP32C3的环境,过程中遇到了不少问题,予以记录。 ESP-IDF开发ESP32 这一部分可跳过,是使用C开…

tensorflow错误及解决办法

tf.graph 节点没有数据 tensorflow.python.framework.errors_impl.InvalidArgumentError: Retval[2] does not have value.通过TensorFlow Retval[0] does not have value启发,怀疑是通过tf.cond构建网络图的时候,一次只走一个分支,导致另一…

docker更新jenkins

下载文件 1、jenkins提示下载 2、官网下载jenkins官网 文件放服务器内 通过工具把jenkins.war放进服务器例如tmp 文件复制到docker的jenkins容器 docker cp 路径文件 容器id:/{后面不接内容为根路径} docker cp /tmp/jenkins.war 53dc1c71058a:/进入容器内 docker exec …

golang实现多态

Go 通过接口来实现多态。在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 package mainimport "fmt"type Income in…

实训笔记7.28

实训笔记7.28 7.28笔记一、Hive的基本使用1.1 Hive的命令行客户端的使用1.2 Hive的JDBC客户端的使用1.2.1 使用前提1.2.2 启动hiveserver21.2.3 使用方式 1.3 Hive的客户端中也支持操作HDFS和Linux本地文件 二、Hive中DDL语法2.1 数据库的管理2.1.1 创建语法2.1.2 修改语法2.1.…

日期清洗的sql函数

sql语言是postgressql。 函数只处理了 中国格式 : xxxx年-xx月-xx日 美国格式: mm/dd/yyyy, September 04,1991, September 1991, sept 04, 1991 uunix格式: yyyy/mm/dd, yyyy/mm&am…

python测试开发面试常考题:装饰器

目录 简介 应用 第一类对象 装饰器 描述器descriptor 资料获取方法 简介 Python 装饰器是一个可调用的(函数、方法或类),它获得一个函数对象 func_in 作为输入,并返回另一函数对象 func_out。它用于扩展函数、方法或类的行为。 装饰器模式通常用…

【学习笔记】[ZJOI2019] 开关

之前没认真学 F W T FWT FWT可惜了😅 首先要做过这道题 [AGC034F] RNG and XOR 。 考虑 I F W T IFWT IFWT算法的本质🤔 之前我们注意到将 k k k的顺序调换并不会影响结果,也就是说只要做一遍 F W T FWT FWT,然后再除以 2 n 2^…

【数据结构】实验十一:图

实验十一 图 一、实验目的与要求 1)掌握图的存储表示与操作实现。 2)掌握图的连通性及其应用。 二、 实验内容 1.用邻接表存储一个图形结构,并计算每个顶点的度。 2. 采用深度和广度优先搜索算法,遍历上述这张图,…

vue 实现拖拽效果

实现方式:使用自定义指令可以实现多个面板拖拽互不影响 1.自定义指令 js directives: {// 拖拽drag(el) {el.onmousedown function (e) {let x e.pageX - el.offsetLeftlet y e.pageY - el.offsetTopdocument.onmousemove function (e) {el.style.left e.pag…

placeholder样式自定义(uniapp 微信小程序、h5)

一、使用uniapp开发 ①第一种方式&#xff1a;&#xff08;写在行内&#xff09; <input type"text" placeholder"姓名" placeholder-style"font-size:28rpx;color:#999999;" />②第二种方式&#xff1a; &#xff08;给input加上placeho…

《向量数据库指南》:向量数据库Pinecone如何集成数据湖

目录 为什么选择Databricks? 为什么选择Pinecone? 设置Spark集群 环境设置 将数据集加载到分区中 创建将文本转换为嵌入的函数 将UDF应用于数据 更新嵌入 摘要 使用Databricks和Pinecone在规模上创建和索引向量嵌入 建立在Apache Spark之上的Databricks是一个强大的…

【期末课程设计】学生成绩管理系统

因其独特&#xff0c;因其始终如一 文章目录 一、学生成绩管理系统介绍 二、学生成绩管理系统设计思路 三、源代码 1. test.c 2. Student Management System.c 3.Stu_System.c 4.Teacher.c 5.Student Management System.h 前言&#xff1a; 学生成绩管理系统含教师…

什么是Maven,Maven的概述及基本使用

MAVEN 一、Maven简介1.1、Maven概述1.2、Maven仓库1.3项目获取jar包过程 二、Maven使用2.1Maven安装配置2.1.1配置环境变量2.1.2配置本地仓库2.1.3配置阿里云私服 2.2Maven基本使用2.2.1Maven常用指令2.2.2Maven生命周期 总结 一、Maven简介 Apache Maven是一个项目管理和构建…

STM32 I2C OVR 错误

一、问题 STM32 I2C 用作从机时&#xff0c;开启如下中断并启用 callback 回调函数。 每一次复位后&#xff0c;从机都可以正常触发地址匹配中断ADDR&#xff0c;之后在该中断的回调函数中启用接收中断去收取数据时&#xff0c;却无法进入RXNE中断&#xff0c;而是触发了 OVR …

<C语言> 动态内存管理

1.动态内存函数 为什么存在动态内存分配&#xff1f; int main(){int num 10; //向栈空间申请4个字节int arr[10]; //向栈空间申请了40个字节return 0; }上述的开辟空间的方式有两个特点&#xff1a; 空间开辟大小是固定的。数组在申明的时候&#xff0c;必须指定数组的…

自然语言处理NLP介绍——NLP简介

目录 内容先进性说明内容大纲概要云服务器的使用 内容先进性说明 内容大纲概要 云服务器的使用

githack的安装步骤+一次错误体验

一.githack的安装步骤 1.要在Kali Linux上安装GitHack工具&#xff0c;您可以按照以下步骤操作&#xff1a; 打开终端并使用以下命令克隆GitHack存储库&#xff1a; git clone https://github.com/lijiejie/GitHack.git2.进入GitHack目录&#xff1a; cd GitHack3.安装依赖项…