前言

  通常,为了简化逻辑,master会设置为只读,正常只通过slave进行读写。 若要两边都写,为了避免自增id冲突,一般会设置奇偶错开,即一台的自增ID均为奇数,另一台均为偶数。

基本原理

 首先,slave开启log_bin二进制日志,这里面记录了数据的修改日志,这是同步的基础。

然后,master配置slave的连接信息,监听slave的修改日志message。

最后,slave一旦有修改,立即向master发送通知,然后master接收到log_bin日志,进行相关数据操作。实现数据同步。

master-master和master-slave的区别只是互为master和slave。仅此而已。

 

具体操作

1.两台相同版本的mysql服务器。为了简便,我是在win下复制两份mysql在同一台机器上执行。一台端口3307 m1,另一台3308 m2。(这里是slave同步master的数据,和前言刚好相反)

2.修改m1,m2配置文件my.ini,在linux下当然是my.conf。配置如下

m1

[mysqld]
port =
server-id = 1
log_bin = E:/np/mysql32_2/log_bin/mysql_log_bin #开启log_bin
binlog_do_db = a #开启log_bin的数据库

m2

[mysqld]
port =
server-id =
log_bin = E:/np/mysql32_2/log_bin/mysql_log_bin #开启log_bin
binlog_do_db = a #开启log_bin的数据库

注:其实如果是master-slave模式,m2配置里面的log_bin和binlog_do_db都不需要。这里我们配置的是master-master。

3.启动两个数据库,首先配置m1为m2的master

进入m1>显示master的状态

show master status

输出结果如下:

mysql_log_bin.000007	796	a

证明主库已经做好准备。

进入m2>绑定master为m1,其中master_log_file为上述master的File值mysql_log_bin.000007

change master to master_host='localhost',master_user='root',master_password='',master_port=,master_log_pos=,master_log_file='mysql_log_bin.000007'

m2>继续执行,查看绑定的结果

show slave status

可以看到Slave_IO_Running | Slave_SQL_Running两个值都是NO,证明还没启动同步

m2>继续执行,启动同步

start slave;  

可以看到Slave_IO_Running | Slave_SQL_Running两个值都是YES,启动成功。

至此,我们已经配置好了mysql主从同步。接下来,如法炮制,在m1上绑定m2为master。就完成了互为主备的mysql同步。

关闭或者取消同步

暂时关闭, 暂时不向master同步数据

stop slave

彻底取消向master的同步

 stop slave;
change master to master_host=' '; --注意里面是一个空格,而不是什么都木有。

测试

随意更改两个库的表数据,能同步,证明配置成功。

注意问题

1.我发现重启数据库,该配置仍然生效而且不用start slave。同步自动开启了,估计是把配置信息持久化了。

2.未开始同步之前,必须保持两个库的数据完全一致,不然会导致不一致的表的数据无法同步。

3.出现2的问题,,手动把数据改成一致,然后再更改数据,同步立马回复正常。

MySQL主从架构之Master-Master互为主备的更多相关文章

  1. Mysql主从架构报错-Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work...

    在搭建Mysql主从架构过程中,由于从服务器是克隆的主服务器系统,导致主从mysql uuid相同, Slave_IO无法启动,报错如下: The slave I/O thread stops bec ...

  2. MySQL主从架构之Master-Slave主从同步

    MySQL复制 MySQL复制是指将主库上的DDL和DML操作通过二进制日志传到从库上,使主库和从库上的数据保持同步 复制原理: 主服务器将更新写入二进制日志文件,并维护文件的一个索引来跟踪日志循环. ...

  3. MySQL 主从架构配置详解

    无论是哪一种数据库,数据的安全都是至关重要的,因此熟练掌握数据库的安全备份功能,是作为开发人员,特别是后端开发人员的一项必备技能.MySQL 数据库内建的复制功能,可以帮助我们对数据进行异地备份,读写 ...

  4. 使用Innobackupex快速搭建(修复)MySQL主从架构

    MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一.但对于较大的数据库则该方式并非理想的选择.使用Xtrabackup可以快速轻松的构建或修复mysql主从架构.本文 ...

  5. MySQL主从架构配置

    MySQL主从架构配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发 ...

  6. Mysql主从架构

    Mysql主从架构 1. 克隆虚拟机 克隆的虚拟机的网络适配,使得虚拟机可以进入局域网 vi /etc/sysconfig/network-scripts/ifcfg-eth0 删除 HWADDR所在 ...

  7. 关于mysql主从架构master宕机后,请求转移问题解决办法

    mysql架构:一主一从 问题一:有两台mysql数据库,已做好主从.如果运行某一天master服务器mysql故障导致前端请求无法处理怎么办? 答:将前端需要数据库处理的请求转移到slave机上. ...

  8. 高性能Mysql主从架构的复制原理及配置详解

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

  9. 转:高性能Mysql主从架构的复制原理及配置详解

    温习<高性能MySQL>的复制篇. 1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台 ...

随机推荐

  1. 安装Kali Linux操作系统Kali Linux无线网络渗透

    安装Kali Linux操作系统Kali Linux无线网络渗透 Kali Linux是一个基于Debian的Linux发行版,它的前身是BackTrack Linux发行版.在该操作系统中,自带了大 ...

  2. 洗衣店专用手持智能POS PDA手持设备 上门收衣 现场刷卡 打印票据 开单系统

    手持上门收衣设备通过wifi或者3G手机卡等进行联网,功能便捷强大,多功能一体同步使用,通过手持机上门收.取衣物,快速开单收衣消费.取货.新建会员.现场办理会员发卡.手持机读发会员卡和会员用卡消费等. ...

  3. BZOJ3024 : [Balkan2012]balls

    问题1: ans=max(sum[n]-(sum[i]-sum[j-1])+a[i]*(i-j+1)) =max(sum[n]-sum[i]+sum[j-1]+a[i]*(i+1)-a[i]*j) = ...

  4. POJ 3352 (边双连通分量)

    题目链接: http://poj.org/problem?id=3352 题目大意:一个连通图中,至少添加多少条边,使得删除任意一条边之后,图还是连通的. 解题思路: 首先来看下边双连通分量的定义: ...

  5. USACO 5.4 Betsy's Tour(暴力)

    水过,水过,这个程序跑7,跑5分钟左右把... /* ID: cuizhe LANG: C++ TASK: betsy */ #include <iostream> #include &l ...

  6. Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛

    orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...

  7. oracle系列--第一篇 数据库基础

    第一章 数据库基础 1.1 数据管理概述 1.1.1 什么是数据管理 与我们人类相比,计算机的最大优势就是能够高速.精准地运行,其运行的过程就是执行程序代码和操作指令.处理数据的过程.可以说,数据处理 ...

  8. JS实现上下左右四方向无间隙滚动

    想必大家都注意到<marquee>的不循环滚动,所以出现了很多替代脚本,或iframe或JS输出< marquee>,不管怎么做,都略显麻烦.下面说一下这个相对简单的实现思路: ...

  9. JS来操作hover

    hover我们可以用css的方式写,当然,也可以用js的方式写 <html> <head> <title>js的下拉菜单效果</title> <s ...

  10. 如何在spring框架中解决多数据源的问题

    在我们的项目中遇到这样一个问题:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库.我们以往在spring和hibernate框架中总是配置一个数据源,因而sessi ...