mysql master slave 灾备技术_MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】...

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

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

(ABC)

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 rowin 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: Waitingfor 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: Waitingfor 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

异地灾备为主时,恢复时可以使用先将生产设置为灾备的从,搭建成多源复制

6e8545c7cc5d633cd6d2cc78fb375261.png

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

mysql灾备演练问题

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

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

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

mysql的级联复制和多源复制

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

mysql的GTID复制和多源复制

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

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

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

NOS跨分区灾备设计与实现

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

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

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

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

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

MySQL多源复制【转】

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

随机推荐

Conntect Bluetooth devices in iOS.

I understand that the External Accessory framework in iOS 3.0 and later will allow my application to ...

汉字转【pinyin】

引言 github地址:aizuyan/pinyin 无意中看到了overtrue/pinyin这个项目,感觉很有意思,这个项目做了这么一件事情: 将汉字转化为拼音 刚看到这里是不是觉得没什么难度,没 ...

ios获取当前语言

上代码: + (NSString*)getPreferredLanguage { NSUserDefaults * defaults = [NSUserDefaults standardUserDef ...

Git 图解剖析(转)

git中文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验. 索引文件用识别码列出相关的bl ...

Windows 注册表 16进制时间转换( Convert Reg_binary Time to a Datetime )

背景: Windows注册表中,存在大量16进制的时间,以 reg_binary存储在注册表中. 例如: 0D 6C A4 4B 37 C5 CE 01 这种值日常报表中需要转换为适合人阅读的格式,实 ...

git常用命令(转载自用)

转载自 阮一峰博客: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一个码农博客: http://blog.gitor.org ...

solr7.4 tomcat环境下搭建(windows)

-版本solr-7.4.0 -环境 Windows  jdk1.8 -启动方式:部署在apache-tomcat-8.5.28,以下简称Tomcat 1. 将solr-7.4.0\server\sol ...

统计bytearray中的bitcount

给定一个byte数组,要求统计byte数组的bitcount,也就是byte数组中为1的位的个数. Redis提供了位数组数据结构,位数组是相对独立的一个程序,在( ...

chrome 插件学习笔记(一)

主要是屏蔽cnbeta中屏蔽广告之后的弹出层 manifest.json文件 { "js": ["jquery-1.7.2.min.js","cnbe ...

css左右箭头

.record-left{ content: ""; width: 0; height: 0; float: left; border-top: 10px solid transp ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值