生产主主复制(A<--->B),和灾备主从复制(B--->C)。当生产出现问题时,数据写入切换到灾备数据库,待生产恢复后,将灾备回写到生产。步骤如下:

1、灾备与生产其中一台建立主主复制,这样生产的那台就成了多源复制

(A<--->B<--->C)

2、在业务闲时,停止web应用,使用户没有连接,或者锁表

3、将业务切回生产

主主复制架构的实现

 
主主复制架构,可以实现像主从服务器进行写操作,也就是说一个是另一个的主服务器,也是另一个的从服务器。
由于我们上边已经知道172.16.30.6为172.16.30.5的从服务器了,故我们只需知道172.16.30.5为172.16.30.6的从服务器即可。
 
172.16.30.5服务器的配置:
# vim /etc/my.cnf
在[mysqld]中添加:
auto-increment-increment = 2
auto-increment-offset = 1

如果想实现 主-从(主)-从 这样的链条式结构,需要设置:
log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。
 
以下这步重启是为了是参数生效,MySQL5.7版本已支持在线修改参数,在线修改参数后需要在my.cnf中添加配置即可
 
重启服务
# service mysqld restart
 
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      107 |              |                  |
+------------------+----------+--------------+------------------+
 
 
172.16.30.6服务器的配置:
新建一个用于复制数据的用户:
mysql> grant replication client,replication slave on *.* to repl@'172.16.30.5' identified by '123456';
 
# vim /etc/my.cnf   
在[mysqld]中添加:
log-bin = mysql-bin
auto-increment-increment = 2
auto-increment-offset = 2
 
重启服务:
# service mysqld restart
 
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |              |                  |
+------------------+----------+--------------+------------------+
 
主从服务器接下来指定对另一台服务器为自己的主服务器即可:
172.16.30.6服务器的指向:
mysql> stop slave;
mysql> change master to master_host='172.16.30.5',master_user='repl',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;
开启从服务进程:
mysql> start slave;
 
172.16.30.5服务器的指向:
mysql> change master to master_host='172.16.30.6',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=107;
开启从服务进程:
mysql> start slave;
 
在172.16.30.6和172.16.30.5服务器上分别查看从服务进程的运行状态:
mysql> show slave status\G
如果出现如下两行,则说明工作正常:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
如果master status是变的,可以用以下锁表的方法
 
mysql> FLUSH TABLES WITH READ LOCK;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     4136 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
3)执行主张同步操作
先在slave数据库上做同步master的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
mysql> unlock tables;     //先解锁,将对方数据同步到自己的数据库中
mysql> slave stop;
mysql> change master to master_host='182.148.15.238',master_user='slave',master_password='slave@123',master_log_file='master-bin.000001',master_log_pos=1970;
 
mysql> start slave;
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 182.148.15.238
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1970
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 750
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ..................
 
这样就实现了slave->master的同步环境。
 
 
再在master数据库上做同步slave的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
mysql> unlock tables;
mysql> slave stop;
mysql> change master to master_host='182.148.15.237',master_user='slave',master_password='slave@123',master_log_file='master-bin.000001',master_log_pos=4136;
 
mysql> start slave;
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 182.148.15.237
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 4136
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 750
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ..................
 
这样就实现了master->slave的同步环境。至此,主主双向同步环境已经实现!
 
参考:
mysql主从复制,半同步,主主复制架构的实现-佳-51CTO博客 http://blog.51cto.com/leejia/831772
Mysql主从同步(1)-主从/主主环境部署梳理 - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/6256603.html
 
异地灾备为主时,恢复时可以使用先将生产设置为灾备的从,搭建成多源复制

MySQL 5.7的多源复制 - GoogSQL - 博客园 https://www.cnblogs.com/xuanzhi201111/p/5151666.html

MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】的更多相关文章

  1. mysql灾备演练问题

    前期写的mysql热备份脚本恢复,还没有正式用到过,但是今天演练灾备恢复,但是遇到几个问题. 测试环境: 搭建mysql,安装xtrabackup vim /etc/yum.repos.d/Perco ...

  2. Kubernetes Master节点灾备恢复操作指南---升级版

    本文档简述了Kubernetes主节点灾备恢复的相关步骤,供在发生k8s master崩溃时操作. 就算是在k8s里部署了etcd群集, 主节点控制组件的高可用节点,灾备恢复也是必须要实现的操作,才能 ...

  3. mysql的级联复制和多源复制

    MySQL的复制:https://www.cnblogs.com/wxzhe/p/10051114.html 级联复制的结构如图 我们来设置基于filename和pos的级联复制,并且接受mysql- ...

  4. mysql的GTID复制和多源复制

    配置基于GTID的复制--------------------------------------------在参数文件/etc/my.cnf增加下面内容:主库master_info_reposito ...

  5. 云区域(region),可用区(AZ),跨区域数据复制(Cross-region replication)与灾备(Disaster Recovery)(部分1)

    本文分两部分:部分1 和 部分2.部分1 介绍 AWS,部分2 介绍阿里云和OpenStack云. 1. AWS 1.1 AWS 地理组件概况 AWS 提供三种地理性组件: Regions:区域,即A ...

  6. NOS跨分区灾备设计与实现

    本文来自网易云社区 作者:王健 摘要 NOS(网易对象存储)在实现多机房(杭州机房,北京机房等)部署后,允许一个用户在建桶时选择桶所属机房.在此基础上,我们实现了跨机房的数据复制,进一步实现了跨机房的 ...

  7. MySQL复制(四)—多源(主)复制

    (一)多主复制概述 MySQL从5.7版本开启支持多主复制,所谓多主复制,是将多个主库的数据复制到一个从库中.通常用于数据仓库整合数据,比如OLTP系统为了分散业务压力,对数据库进行分库分表,当要对数 ...

  8. 基于Docker搭建MySQL多源复制环境

    MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等. 多源复制:多源复制加入了一 ...

  9. MySQL多源复制【转】

    什么是多源复制? 首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制, 你可以在任意主机上将数据复制给其他主机. ...

随机推荐

  1. 毕业设计---json,Struts,ajax以及JQuery简单案例

    <!-- Struts2的xml文件配置 --><struts> <package name="default" namespace="/& ...

  2. C语言编程—自动生成四则运算升级版

    #include<stdio.h> #include<time.h> struct fenshu { int fenzi; int fenmu; }Fenshu[]; int ...

  3. WordCount 程序的实现

    WordCount是一个常见的工具,它能统计文本文件的字数.单词数和行数.在本次项目中,要求写一个命令行程序,模仿已有的WordCount.exe的功能,并加以扩充,统计出某程序设计语言源文件的字符数 ...

  4. ElasticSearch 2 (16) - 深入搜索系列之近似度匹配

    ElasticSearch 2 (16) - 深入搜索系列之近似度匹配 摘要 标准的全文搜索使用TF/IDF处理文档.文档里的每个字段或一袋子词.match 查询可以告诉我们哪个袋子里面包含我们搜索的 ...

  5. [2017BUAA软工]个人阅读作业+总结

    阅读作业 没有银弹 No Silver Bullet - Essence and Accidents of Software Engineering - Brooks 在这篇论文中,作者阐述了软件的四 ...

  6. K8S 使用简单的NFS 作为 持久存储的 StorageClass 的简单测试.

    Study From https://jimmysong.io/kubernetes-handbook/practice/using-nfs-for-persistent-storage.html 1 ...

  7. 常用的Hql语句

    // HQL: Hibernate Query Language.// 特点:// >> 1,与SQL相似,SQL中的语法基本上都可以直接使用.// >> 2,SQL查询的是表 ...

  8. cf1066F Yet Another 2D Walking (贪心+dijkstra)

    易证我们走的时候只会从某一层的某端点走向另一端点.然后走向下一层的某端点.. 所以建图然后dijkstra就行了 调了一年以后发现dijkstra写错了 #include<bits/stdc++ ...

  9. 界面编程之QT绘图和绘图设备20180728

    /*******************************************************************************************/ 一.绘图 整 ...

  10. ThinkPHP5项目目录

    ThinkPHP5安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5├─application     应用目录 ├─extend          扩展类库目录(可定义) ├─pu ...