一、准备环境

[root@localhost ~]# vim /etc/hosts

192.168.40.154 master1     192.168.40.129 master2                                                                                         
192.168.40.138 slave1       192.168.40.128 slave2
注:四台虚拟机配置都相同,且防火墙关闭

二、双主设置

master1(其数据库中提前准备点库)

1、[root@localhost ~]# vim /etc/my.cnf

log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1

2、[root@localhost ~]# systemctl restart mysqld

3、授权:mysql>grant replication slave,replication client on *.* to 'rep'@'192.168.40.%' identified by 'Zjz@5740';

4、mysql>  flush privileges;(刷新)

5、备份:mysqldump -p'Zjz@5740' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql

6、#scp -r 2017-1-1-mysql-all.sql master2:/tmp

7、观察二进制日志分割点

CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000002', MASTER_LOG_POS=154;

master2

1、[root@localhost ~]#vim /etc/my.cnf( 启动二进制日志,服务器ID,GTID)

log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1

2、[root@localhost ~]# systemctl restart mysqld

还恢复手动同步数据

mysql>set sql_log_bin=0;

mysql>source /tmp/2017-1-1-mysql-full.sql

mysql>select * from master1db.master1tab;

3、设置主服务器

mysql> change master to
master_host='master1',
master_user='rep',
master_password='Zjz@5740',
master_auto_position=1;

start slave;

show slave status\G;

master1认master2为主

master2授权:mysql>grant replication slave,replication client on *.* to 'rep'@'192.168.40.%' identified by 'Zjz@5740';

flush privileges;(刷新)

master1:设置主服务器

mysql> change master to
master_host='master2',
master_user='rep',
master_password='Zjz@5740',
master_auto_position=1;

start slave;

show slave status\G;

mysqldump -p'Zjz@5740' --all-databases --single-transaction --master-data=2  --flush-logs > `date +%F`-mysql-all.sql

scp -r 2017-8-9-mysql-all.sql slave1:/tmp

scp -r 2017-8-9-mysql-all.sql slave2:/tmp

三、双从设置

slave1    # mysql -p'Zjz@5740' < /tmp/2017-8-9-mysql-all.sql

slave2     #mysql -p'Zjz@5740' < /tmp/2017-8-9-mysql-all.sql

启动从服务器ID,gtid

slave1                                                              slave2

#vim /etc/my.cnf                                              # vim /etc/my.cnf
server-id=3                                                       server-id=4
gtid_mode=ON                                                 gtid_mode=ON
enforce_gtid_consistency=1                            enforce_gtid_consistency=1
master-info-repository=TABLE                        master-info-repository=TABLE
relay-log-info-repository=TABLE                     relay-log-info-repository=TABLE

#systemctl restart mysqld                                  #systemctl restart mysqld

设置主服务器

slave1(认两个主服务器)

mysql> change master to                                             mysql> change master to
master_host='master1',                                                master_host='master2',
master_user='rep',                                                        master_user='rep',
master_password='Zjz@5740',                                    master_password='Zjz@5740',
master_auto_position=1 for channel 'master1';            master_auto_position=1 for channel 'master1';

mysql>start slave;

mysql>show slave status\G;(双yes成功)

slave2同上操作

四、总结

1、出现connettion,重启电脑试试

2、有些步骤先停止slave再操作

3、[root@slave1 ~]#  mysql -p'Zjz@5740' < /tmp/2019-08-29-mysql-all.sqlmysql:

[Warning] Using a password on the command line interface can be insecure.

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

解决办法:mysql> reset master;(进入slave1)

Query OK, 0 rows affected (0.10 sec)

mysql> \q

Bye

4、Slave_IO_Running: No

Slave_SQL_Running: Yes

报错:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'

解决:这个应该是由于你在主库上执行过purge binary logs,然后当从库change master的时候,却要执行那些事务。
你可以在主库上先查找哪些gtid被purge了。
show global variables like 'gtid_purged';
然后拿着这个value,去从库上依次
stop slave;
set global gtid_purged = 'xxx'; # xxx是你主库上查到的value。
start slave;
这样能跳过执行被主库已经purge的事务了。

mysql双主双从技术的更多相关文章

  1. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  2. 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...

  3. 多机MySQL一主双从详细安装主从复制

    多机MySQL一主双从详细安装 一.复制的工作原理 要想实现AB复制,那么前提是master上必须要开启二进制日志 1.首先master将数据更新记录到二进制日志文件 2.从slave start开始 ...

  4. mysql搭建主从复制(一主一从,双主双从)

    主从复制原理 Mysql 中有一个binlog 二进制日志,这个日志会记录下所有修改了的SQL 语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器 ...

  5. 在Docker下进行MyCAT管理双主双从MySQL集群

    前言 在Docker下双主双从MySQL集群模拟 https://www.cnblogs.com/yumq/p/14259964.html 本文实验配置文件 Docker拉取MyCAT镜像 如果没启动 ...

  6. Mysql双主双从高可用集群的搭建且与MyCat进行整合

    1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...

  7. MySQL双主双从配置

    双主双从结构图 Master1配置 server-id=1 #开启binlog日志 log-bin=mysql-bin #忽略的库 binlog-ignore-db=mysql #复制的库 binlo ...

  8. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

    1. 主从复制解释   将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的起始位置,同步复制到从数据库中,使得主从数据库保持一致. 2. 主从复制的作用 高可用 ...

  9. Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)

    之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...

  10. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

随机推荐

  1. JavaScript面向对象OOM 2(JavaScript 创建对象的工厂模式和构造函数模式)

      在创建对象的时候,使用对象字面量和 new Object() 构造函数的方式创建一个对象是最简单最方便的方式.但是凡是处于初级阶段的事物都会不可避免的存在一个问题,没有普适性,意思就是说我要为世界 ...

  2. 使用xpath提取页面所有a标签的href属性值

    # -*- coding: utf-8 -*- #1.选取节点 #获取所有的div元素 //div #/代表获取根节点的直接子元素 #获取所有带有id属性的div //div[@id] #2.谓词(索 ...

  3. Acwing-281-硬币(背包)

    链接: https://www.acwing.com/problem/content/283/ 题意: 给定N种硬币,其中第 i 种硬币的面值为Ai,共有Ci个. 从中选出若干个硬币,把面值相加,若结 ...

  4. jquery type属性 语法

    jquery type属性 语法 作用:type 属性描述触发哪种事件类型.大理石直角尺 语法:event.typ 参数: 参数 描述 event     必需.规定要检查的事件.这个 event 参 ...

  5. js多种方法取数组的最后一个元素

    一: pop()方法 pop()方法,删除数组最后一个并返回该元素 利用这个方法可以取到数组的最后一个,同理shift()可以取到数组的第一个(shift()删除数组第一个并返回该元素) var ar ...

  6. JavaWeb_(SSH论坛)_二、框架整合

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 导入Jar包 导 ...

  7. 解析XML的几种方式:DOM、SAX、PULL

    DOM解析 解析器读入整个文档,然后构建一个主流内存的树结构,然后代码就可以使用dom接口来操作这个树结构. 优点: 整个文档树在内存中,便于操作:支持删除.修改.重新排列等多种功能. 通过树形结构存 ...

  8. 第十二周Java学习总结

    学习总结: 本周主要学习了其他容器和事件处理 1.窗体事件(WindowListener)常用接口方法voidwindowActivated/windowDeactivated(WindowEvent ...

  9. 数据库 mysql 操作

    安装好xammp,打开阿帕奇和数据库服务: 点击右侧 shell 按钮,进入命令行: 首先,利用超级管理员权限进入数据库: mysql -uroot -p enter,再enter 把下述代码复制进命 ...

  10. JS基础_强制类型转换

    强制类型转换 将一个数据类型强制转换为其他的数据类型 类型转换主要指,将其他数据类型,转换为 string.number.boolean 1.将其他数据类型转换为string(返回值是强转后类型的值) ...