MySQL的复制原理详解以及基础配置

MySQL 的日志类型

二进制日志,事务日志,错误日志,一般查询日志,中继日志,慢查询日志

二进制日志有以下内容

数据目录,一般放置在mysql-bin.XXXXX编号)

滚动:达到一个最大上限,flush logs,服务器重启

格式:statement

row

mixed

mysql-bin.index:二进制日志文件索引文件

mysql > SHOW MASTER STATUS查看主服务器的状态

mysql > SHOW BINARY LOGS 查看二进制日志

mysql > SHOW BINLOG  EVENTS IN ‘file‘查看二进制日志中的事件

event中比较重要的选项:

timestamp时间戳

position,offset,operation,server-id

MySQL的隔离级别:

READ-UNCOMMITED

READ-COMMITED

如果使用mixed可能会发生数据不一致的情况

官方推荐使用row 的方法

REPEATABLE-READ

SERIALIZABLE

复制实现的功能

  1. 实现数据备份
  2. 如果有从服务器,主服务器发生故障之后,开通从服务器的写入功能,从而提供高可用的使用功能
  3. 异地容灾
  4. 分摊负载(scale out )主服务器:写      从服务器:读

复制方法有三种,分别是主从复制,半同步复制以及主主复制

首先介绍主从复制(使用较频繁)

在主服务器上,前端用户每次执行一次数据库发生修改或者引起修改的指令,都会在二进制日志中保存为一个事件,每保存一个事件,都会通过MySQL的3306端口发送给另外一个服务器,另外一台服务器将这个日志接收下来,然后先保存在本地的日志文件中,然后每次读取一个操作,然后将每一次修改执行到自己服务器上,这个过程叫做MySQL 的复制

master上存在一个二进制文件Binary log

slave 从主服务器上二进制文件复制而成的文件,叫做中继日志(relay log)

在主服务器上当有多个事务并发执行的时候,但是在写入二进制文件中的时候只能一条一条写,因此就需要一个暂时缓存的日志文件进行缓存,接着再向二进制文件中写入

其中在复制方法上同时又有同步复制以及异步复制的区分:

同步复制

从服务器不能比主服务器慢,前端发生的修改不能及时的得到slave 的响应

因此基本上是使用半同步复制的方法

半同步复制只是将数据同步发送给另一个节点,只能保证近的节点能够及时的响应

异步复制:一主多从,等待每一个服务器都同步完成的时候,

在多台从服务器进行复制的时候,可能会因为请求过多,主服务器难以有效的处理,因此就需要一个前端代理。

读写分离(rw-splitting):找一个MySQL的前端代理,工作在应用层,能够理解MySQL的语句,能够完成将不同的操作(读 写)定向到不同的服务器,分别分发给主服务器和从服务器,从而完成读写分离

多级复制:一个从服务器可能是一个主服务器的从服务器,也可能是另一个从服务器的从服务器

如果一个从服务器不记录中继日志,则不能将内容发送给下一级服务器,从服务器上不能进行写操作

接下来介绍双主模型

双主模型的时候,配置几乎一样,但是要很注意server-id的重要性,防止出现复制环路的产生

无法实现减轻写操作,很容易出问题

例如

tutors:name,age,gender,tid

tom 10

jerry 30

A主机:UPDATE tutords SET  name=jerry

B主机:UPDATE tutors SET age=30 WHERE name=tom

在最终的完成同步的时候,查询出来的结果并不认能够合并,会产生冲突

所以在生产环境中,一般不建议使用双主模型

读写分离可以由下面的组件实现:

mysql-proxy

amoeba

数据拆分之后实现路由:

cobar

补充:

master :slave

1-->N

slave :master

1-->N X

一个从服务器只能属于一个主服务器

MySQL 5.5之前的复制实现非常简单,

MySQL 5.6之后引用了 gtid,multi-thread replication(多线程复制)

配置MySQL复制基本步骤


主从复制

一.master

启用二进制日志

log-bin=master-bin

log-bi-index =master-bin.index

    1. 选择一个唯一的server-id

      server-id ={0-2^32}

    2. 创建具有复制权限的用户

REPLICATION SLAVE

REPLICATION CLIENT

二.slave

1.启用中继日志

relay-log =relay-log

log-bin-index=

2.选择一个唯一的server-id

server-id ={0-2^32}

3.连接至主服务器,并开始复制数据

mysql > CHANGER MASTER TO MASTER_HOST= ‘ ‘,MASTER_PORT= ‘ ‘,MASTER_LOG_FILE=‘ ‘,MASTER_LOG_FILE_POS=‘ ‘,MASTER_USER=‘ ‘ ,MASTER_PASSWORD=‘ ‘;

mysql >START SLAVE

mysql>START SLAVE SQL_Thread  开启SQL线程

mysql>START SLAVE IO_Thread开启IO线程

复制线程:

master:dump

slave :IO_Thread,SQL_Thread

read_only=YES

在从服务器上设定,对具有SUPER权限的用户不生效

sync-binlog = ON

在主服务器上设定,用于事务安全

半同步复制

在master 和slave 上各自安装一个google提供的插件

主服务器上

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;

mysql>SET GLOBAL rpl_semi_sync_master_enabled=1;

mysql>SET GLOBAL rpl_semi_syc_master_timeout=1000;

从服务器上

mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;

mysql>SET GLOBAL rpl_semi_sync_slave_enables =1;

mysql_STOP SLAVE IO_Thread;START SLAVE IO_Thread;

双主复制

  1. 在两台服务器上各自建立一个具有复制权限的用户
  2. 修改配置文件

主服务器上

server-id =10

log-bin =mysql-bin

relay -log=relay -mysql

relay-log -index =relay -mysql.index

auto-increment-incremeng =2

auto-increment-offset =1

从服务器上

server-id=20

log-bin=mysql=bin

relay-log=relay-mysql

relay-log-index=relay-mysql.index

auto-increment-increment=2

auto-increment-offset =2

3.如果此时两台服务器均为新建立,且无其他写入操作,各服务器之需记录当前自己的二进制文件以及事件位置,以之作为另一台服务器复制起始位置即可

4.各服务器接下来指定对另一台服务器为自己的主服务器即可

A主机必须查看B的二进制文件及位置,并以之作为自己的复制起点

B主机必须查看A的二进制文件及位置,并以之作为自己的复制起点

两个服务器都能进行读写,即为双主模型

时间: 2024-10-11 06:58:58

MySQL的复制原理详解以及基础配置的相关文章

monogdb复制原理详解

一.复制介绍 复制是在多台服务器之间同步数据的过程. 复制在为数据提供了冗余同时,也提高了数据的可用性.由于在不同的数据库服务器上拥有多个数据镜像,复制可以有效的防止由于单台服务器故障而导致的数据丢失.复制还能够帮助我们从硬件故障或是服务中断中恢复数据.我们也可以通过增加复制节点来将其用于灾难恢复.报表或是备份. 在某些情况中,我们可以通过复制的方式来提高读的性能.客户端可以将读与写请求分别发送到不同的服务器上.我们还能够通过在其他数据中心建立分布式复制节点的方式来做异地冗灾,以进一步提高可用性

(转)MySQL备份原理详解

MySQL备份原理详解 原文:http://www.cnblogs.com/cchust/p/5452557.html 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间.这篇文章主要讨论MySQL的备份方案,重点介绍几种备份方式的原理,包括文件系统快照(LVM),逻辑备份工具M

I2C 基础原理详解

今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都是用I2C通信方式进行通信的. I2C(Inter-Intergrated Circuit)通信使用Clock Line(SCL:Serial Clock)和Data Line(SDA:Serial Data).数据通过时钟同步经过数据线进行传输.这里生成时钟信号并输出的设备便是Master, 时钟

MySQL服务器主从服务详解

MySQL主从复制概念 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从

kickstart安装系统原理详解

前言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的办法有什么? 光盘安装系统===>一个服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数.用USB外置光驱,插来插去也醉了. U盘安装系统===>还是同样的问题,要一台一台服务器插U盘. 网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以装系统了

Storm概念、原理详解及其应用(一)BaseStorm

本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordcount"代码不同的是,并不会有如何运行第一storm代码等内容,只有在运行完代码后,发现需要明白:"知其然,并知其所以然". Storm是什么?为什么要用Storm?为什么不用Spark? 第一个问题,以下概念足以解释: Storm是基于数据流的实时处理系统,提供了大吞吐量的实

LAMP平台搭建及其原理详解

LAMP平台搭建及其原理详解 LAMP平台搭建基础概念 LAMP:提到LAMP很多人会认为LAMP是Linux ,Apache,Mysql,PHP.但是随着技术的不断发展,当今的Lamp,已经不仅仅是这么简单了,这里我们的P除了PHP其实还包括:phython,perl    .而M也不仅仅指的是mysql,也包括mariadb. LAMP平台顾名思义就是Linux,apache,mysql(mariadb),php(phython,perl)的结合.按照他们的结合方式不同,大致可以分成三类:

Tomcat原理详解

Tomcat原理详解 Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程外的Servlet容器. Tomcat目录: tomcat |---bin:存放启动和关闭tomcat脚本 |---conf:存放不同的配置文件(server.xml和web.xml): |---doc:存放Tomcat文档: |---lib/japser/common:存放Tomcat运行需要的库文件(JARS): |---lo

LVS原理详解(3种工作模式及8种调度算法)

2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法) LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期:2014-01-06 09:31:20 一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集