MySQL的复制原理详解以及基础配置
admin
2023-03-23 13:20:36
0

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的二进制文件及位置,并以之作为自己的复制起点

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









相关内容

热门资讯

女子出租屋凌晨疑遭陌生人闯入,... 极目新闻记者 郭奕据红星新闻报道,居住在杭州的女子小鱼(化名)在社交媒体上发布了一段拍摄于4月28日...
唐山市委书记调整 澎湃新闻记者 岳怀让据河北卫视《河北新闻联播》消息,河北省委常委常斌已任唐山市委书记。公开资料显示,...
视频丨开工忙、消费旺、出口强 ... 国家发展改革委国家信息中心今天发布4月份经济各领域先行指标,显示出经济稳步向好的大趋势。
喷了光触媒的物品在车里可以除甲... 最佳回答 可以的,效果挺好的。光催化剂中的催化剂可以氧化分解各种有机污染物和无机污染物,在空气中与...
家庭装修走暗线还是明线好? 个人认为装修的话选择暗线好些 1、由于走暗线带来的美观效果非常强,因此成为大多数人的首选...
朗逸钥匙装饰盖怎么取下 将遥控钥匙有标志的一面向上,用扁的小起子撬进缝隙的中部,钥匙会分开一个缝,按中缝将钥匙分开即可。既然...
不平整的墙面怎么装饰 不平等的墙可以请专门的画腻子画的大师去进行创作。现在很多的墙面,人家都用刮腻子的方式去做壁画。像那种...
明线安装和暗线安装应该怎么选择... 随着社会发展,人们生活水平提高,大部分农村家庭都能盖上一层或者几层楼房,楼层盖好后接下来就是装修的问...
“华盛顿”号航母驶离日本横须贺... △“乔治·华盛顿”号核动力航空母舰(资料图)当地时间10日上午,美国“乔治·华盛顿”号核动力航母完成...
司机因操作不当引发车祸致2死6... 极目新闻记者 谢茂5月10日13时40分许,重庆黔江区一处十字路口发生一起交通事故。据重庆市公安局黔...