MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少。

下图是MySQL官方给出了使用Replication的场景:

Replication原理

Mysql 的 Replication 是一个异步的复制过程,从一个MySQL节点(称之为Master)复制到另一个MySQL节点(称之Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(SQL 线程和 I/O 线程)在 Slave 端,另外一个线程(I/O 线程)在 Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

看上去MySQL的Replication原理非常简单,总结一下:

* 每个从仅可以设置一个主。

* 主在执行sql之后,记录二进制log文件(bin-log)。

* 从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。

从这几条Replication原理来看,可以有这些推论:

* 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。

* 如果主从的网络断开,从会在网络正常后,批量同步。

* 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。

* 一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。

* 如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

主从设置

因为原理比较简单,所以Replication从MySQL 3就支持,并在所有平台下可以工作,多个MySQL节点甚至可以不同平台,不同版本,不同局域网。做Replication配置包括用户和my.ini(linux下为my.cnf)两处设置。

首先在主MySQL节点上,为slave创建一个用户:

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'192.168.1.10' IDENTIFIED BY 'slave';

实际上,为支持主从动态同步,或者手动切换,一般都是在所有主从节点上创建好这个用户。然后就是MySQL本身的配置了,这需要修改my.cnf或者my.ini文件。在mysqld这一节下面增加:

server-id=1

auto-increment-increment=2

auto-increment-offset=1

log-bin

binlog-do-db=mstest

binlog_format=mixed

master-host=192.168.1.62

master-user=slave

master-password=slave

replicate-do-db=mstest

上面这两段设置,前一段是为主而设置,后一段是为从设置的。也就是说在两个MySQL节点上,各加一段就好。binlog-do-db和replicate-do-db就是设置相应的需要做同步的数据库了,auto-increment-increment和auto-increment-offset是为了支持双主而设置的(参考下一节),在只做主从的时候,也可以不设置。

双主的设置

从原理论来看MySQL也支持双主的设置,即两个MySQL节点互为主备,不过虽然理论上,双主只要数据不冲突就可以工作的很好,但实际情况中还是很容发生数据冲突的,比如在同步完成之前,双方都修改同一条记录。因此在实际中,最好不要让两边同时修改。即逻辑上仍按照主从的方式工作。但双主的设置仍然是有意义的,因为这样做之后,切换主备会变的很简单。因为在出现故障后,如果之前配置了双主,则直接切换主备会很容易。

双主在设置时,只需将上面的一段设置复制一份,分别写入两个MySQL节点的配置文件,但要修改相应的server-id,auto-increment-offset和master-host。auto-increment-offset就是为了让双主同时在一张表中进行添加操作时不会出现id冲突,所以在两个节点上auto-increment-offset设置为不同的值就好。  另:不要忘了,在两个节点上都为对方创建用户。  应用层的负载均衡  本文只介绍了MySQL自身的Repilication配置,在上面的图中也可以看出,有了Replication,还需要应用层(或者中间件)做一个负载均衡,这样才能最大程度发挥MySQL Replication的优势,这些将在以后探讨。

mysql 双节点主从搭建_MySQL Replication, 主从和双主配置相关推荐

  1. mysql的主从复制功能_Mysql的主从复制功能

    本次演示Mysql的主从复制及主从切换功能. 本次演示基于条件:两台虚机服务器,都安装了mysql-5.6.26,并已启动. 演示环境: 操作系统版本:linux-6.6-x86_64 数据库版本:m ...

  2. (导航页)OpenStack-M版-双节点手工搭建-附B站视频

    ↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 本次搭建采用双节点,离线源搭建, 配置如下 本次搭建采用2台4核4G的虚拟机,也可以改为2核4G ...

  3. mysql yum安装与配置文件_MySQL 8.0 yum安装和配置

    MySQL 8.0 centos7.5 x86_64 一.yum安装 1.先卸载机器和mysql有关的东西,有的安装了mariab-lib,会对安装有干扰,卸载了它. [root@localhost ...

  4. mysql的主从分离_Mysql的主从分离配置

    Mysql的主从分离配置: 你用过中从分离吗? 我:用过: 自己配置过吗? 我: 这些不是运维的做的吗,感觉很糟鄙视: 然后自己去百度了,弄了两个虚拟机,下面是配置的笔记 准备的虚拟机 centos6 ...

  5. mysql 主从 问题_Mysql解决主从不同步问题

    1. 该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况 stop slave; set global sql_slave_skip_counter =1;#表示跳 ...

  6. mysql 主从 索引_Mysql繁忙主从库在线修改表结构与添加索引问题

    本帖最后由 jan_1985 于 2014-1-15 13:28 编辑 Mysql繁忙主从库在线修改表结构与添加索引问题 一直以来,生产情况下都有修改索引和修改字段的需求,但是对锁表引起的访问不便是会 ...

  7. mysql数据没有同步更新_MySQL数据库主从没有同步的两种解决方案

    MySQL数据库主从没有同步的两种解决方案 发布时间:2020-05-13 13:54:57 来源:亿速云 阅读:190 作者:三月 栏目:数据库 下文主要给大家带来MySQL数据库主从没有同步的两种 ...

  8. 双节点平台搭建详细教程

    准备 Controller: CPU:2个,建议内存:60G,自动分区,两个网卡:NAT,仅主机模式, Compute: CPU:2个,建议内存:60G,手动分区(swap8G,/根分区25G,/bo ...

  9. 在mysql中单引号的使用_MySQL中单引号和双引号的使用

    单独使用时,单引号和双引号没有区别: 需要嵌套使用时,双引号和单引号可以互相嵌套.使用的结果是把内部的内容当做整体一个字符串变量. SELECT * FROM da_track WHERE act= ...

最新文章

  1. 如何零基础学习python语言_零基础如何入门Python语言?有哪些学习建议?
  2. 【TensorFlow-windows】投影变换
  3. HTML+CSS+JS实现 ❤️3D洞穴无限延伸动画特效❤️
  4. php 修改多级菜单,用PHP实现多级树型菜单
  5. springmvc应用-自定义参数解析器
  6. 由ContactsProvider的升级引发的OTA首次开机卡白米问题分析
  7. 手机端连线题html5,基于Canvas的html5连线题
  8. .NET BackgroundWorker
  9. iOS清除缓存功能开发
  10. Java工具类之String类
  11. 445端口是什么,怎么关闭?
  12. ​【Flutter小记7】​Mac M1 使用 pod install编译常见两种错误解决方案(CocoaPod Error | LoadError)
  13. Is it Google Hacking? It's Google Dorking
  14. uniapp APP消息推送方案
  15. 在线直播|是事实还是贩卖焦虑?IT行业也偏爱“小鲜肉”
  16. ES6 findIndex()返回结果有true,却返回的索引位置一直是-1
  17. YouTube玩转的自动字幕,为什么被国内视频网站“主动错过”?
  18. 如何恢复录音删除的录音文件_录音文件降噪?快使用GoldWave!
  19. 几天自学单片机的一些小小心得
  20. JFET结型场效应管的总结

热门文章

  1. java 不识别enum_关于java:Unit Test for Enum值不存在?
  2. python中select用法_Python select及selectors模块概念用法详解
  3. 微擎jsapi支付必须传openid怎么解决_面经腾讯微信支付面试记
  4. 【quartus】原理图输入设计详解攻略
  5. 《程序是怎么跑起来的》第六章
  6. [Android] DownloadManager下载管理类2.3新增API介绍
  7. MVC根据CheckBox的Value值选中对应的复选框及获取选中的Value值
  8. spring 配置多数据源
  9. 最新28个很棒的 jQuery 教程
  10. 扩展语法检查(SLIN检查)