MySql 双主多从配置指导

一、背景

互联网项目为了数据的可靠性和架构的可拓展性经常会用到双主多从的数据库,来实现数据的备份、负载均衡和突发状况时数据库切换。

二、思路

  • 配置两台数据库A、B互为主从,然后配置以A为主的从数据库C,和以B为主的从数据库D

  • 在A和B的配置中添加:

    log-slave-updates=1 

    将所有的操作写入到binary log。使得A的更改不止同步到B和C,还会同步到D。同理B也会同步到C。

三、开发环境

ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/

四、配置步骤

1、安装三个数据库实例B、C、D,端口号分别为3307、3308、3309。

​ 请参考公众号【CTO每日参考】 MySQL5.7 多实例配置指导

2、主数据库A、B配置同步账号,创建同步数据库​

​ 分别进入A和B数据库,执行以下操作:

create user 'tongbu'@'localhost' identified by '123456';      //本机测试所以只需开localhost

create database mmdb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;   //创建同步数据库

grant replication slave,reload,super on *.* to tongbu@'localhost' identified by '123456';     //给同步账户授予同步相关权限

flush privileges;   //刷新权限

3、修改数据库配置文件

3-1 配置A [mysqld]添加以下:

log-bin=MySQL-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=1 #服务器标识
binlog-do-db=mmdb #需要同步的数据库名
binlog-ignore_db=mysql #不需要同步的数据库名
replicate-do-db=mmdb #需要同步的数据库名
replicate_ignore_db=mysql   #不需要同步的数据库名

#sync-binlog = 1   #开启会降低性能,但是数据更加安全

log-slave-updates=1 //将所有的操作写入到binary log

#避开并发时主键相同出错
auto_increment_offset = 2   //自增长初始值
auto_increment_increment = 2 //自增长值

3-2 配置B大致与配置A相同,差异如下:

server-id=2  #服务器标识
auto_increment_offset = 1   //自增长初始值

3-3 配置C:

server-id=3
relay-log=relay-bin
relay-log-index=relay-bin-index
replicate-do-db=mmdb
replicate_ignore_db=mysql

3-4 配置D大致与配置C相同,差异如下:

server-id=4

4、主从设置

思路:分别获取库A和库B的 file和position值,利用change master命令分别使得A为B的从库,B为A的从库,C为A的从库,D为B的从库。

具体请参考公众号【CTO每日参考】 MySQL 主从复制配置指导及 PHP 读写分离源码分析

5、测试

① 建表测试

在库A服务器的mmdb数据库中新建表mmtb

create table mmtb(id int not null auto_increment,name varchar(32) not null default '',primary key (id));

在其他服务器会发现BCD都多了该表:

show databases;
use mmdb;
show tables;
+----------------+
| Tables_in_mmdb |
+----------------+
| mmtb           |
+----------------+
1 row in set (0.00 sec)

②插入操作测试

在库A中查询是否有姓名“nmx存在”:

mysql> select * from mmtb where name = 'nmx';
Empty set (0.00 sec)

在B中插入数据:

mysql> insert into mmtb (name) values ('nmx');
Query OK, 1 row affected (0.06 sec)

插入成功查询B库:

mysql> select * from mmtb where name = 'nmx';
+----+------+
| id | name |
+----+------+
| 17 | nmx |
+----+------+
1 row in set (0.00 sec)

此时A库查询:

mysql> select * from mmtb where name = 'nmx';
+----+------+
| id | name |
+----+------+
| 17 | nmx |
+----+------+
1 row in set (0.00 sec)

同时,C库和D库:

mysql> select * from mmtb where name = 'nmx';
+----+------+
| id | name |
+----+------+
| 17 | nmx |
+----+------+
1 row in set (0.00 sec)

验证成功!

五、温馨提示

  1. 实际操作过程中,请使用相同版本数据库(本文mysql多开实例,不存在数据库版本问题)。

  2. 主库配置需设置log-slave-updates=1使得数据库将所有的操作写入到binary log,否则A库的操作不会同步到D库,同理B库操作不会同步到C库。

  3. 主库配置auto_increment_offset 和auto_increment_increment 两个参数,使得互为主从的A和B不会在高并发条件下由于主键相同导致同步失败。

MySql 双主多从配置指导的更多相关文章

  1. mysql双主互为主从配置

    在使用双主互为主从的模式前提是互为主从的两个数据库,表的主键必须是自增的. 环境不多说了 ,多台mysql单实例或单台多实例都可以.多实例的配置请参考:https://www.cnblogs.com/ ...

  2. 006.MySQL双主-Master02可用配置

    [root@Master02 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

  3. 005.MySQL双主-Master01可用配置

    [root@Master01 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

  4. MYSQL 双主配置

    MYSQL1. 版本号:5.7.243. 部署方式:双主部署,两台机器即是主又是备 ,双向拷贝,可以同时写入.4. 安装部署路径: a) /home/softb) 配置路径 /etc/my.cnfc) ...

  5. mysql传统主从、双主复制+keepalived配置步骤

    mysql主从.主主复制(双主复制)配置步骤 一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服 ...

  6. MySQL双主配置

    MySQL双主配置 准备环境:服务器操作系统为RHEL6.4 x86_64,为最小化安装.主机A和主机B均关闭防火墙和SELINUX ,IP地址分别为192.168.131.129和192.168.1 ...

  7. linux环境下配置mysql双主复制

    简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...

  8. 011.MySQL双主多从+Keepalived配置

    一 基础环境 主机名 系统版本 MySQL版本 主机IP Master01 CentOS 6.8 MySQL 5.6 172.24.8.10 Master02 CentOS 6.8 MySQL 5.6 ...

  9. MYSQL主从复制、主主复制、双主多从配置

    一.如何配置MYSQL的主从复制? 1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MYSQL(我的配置版本为5.5.56) 2. ...

随机推荐

  1. cadence电路板布线

    设置完约束规则后,便可以开始电路板的布线工作.

  2. conda 查看已有环境

    conda info -e # conda environments: # dlcv /Users/enzhao/suanec/libs/anaconda2/envs/dlcv py36 /Users ...

  3. C++ pair方法/vector方法

    一,pair方法 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类型,T2是第二个值的数据类型. 功能:pair将一 ...

  4. 【分享】【原创开源应用第4期】给ili9488,RA8875类显示屏的emWin底层增加DMA加速方案

    说明:1.emWin底层中最重要的一个优化就是16bpp绘制,特此为其增加DMA加速,已经支持RA8875和ili9488.2.使用中务必将emWin任务设置为除了空闲任务,统计任务以外的最低优先级, ...

  5. 浅谈Java中的锁:Synchronized、重入锁、读写锁

    Java开发必须要掌握的知识点就包括如何使用锁在多线程的环境下控制对资源的访问限制 ◆ Synchronized ◆ 首先我们来看一段简单的代码: 12345678910111213141516171 ...

  6. [Swift]LeetCode479. 最大回文数乘积 | Largest Palindrome Product

    Find the largest palindrome made from the product of two n-digit numbers. Since the result could be ...

  7. [SQL]LeetCode596. 超过5名学生的课 | Classes More Than 5 Students

    SQL架构 Create table If Not Exists courses (student varchar(), )) Truncate table courses insert into c ...

  8. H5与企业微信jssdk集成

    H5与企业微信jssdk集成 一.公众号设置 注册企业微信,在应用与小程序栏目中,设置可信域名,配置公众号菜单.可信域名不得不说下,在最初开发时,认为设置并验证后,微信认证接口会实现跨域请求,其实并没 ...

  9. Python内置函数(6)——bool

    英文文档: class bool([x]) Return a Boolean value, i.e. one of True or False. x is converted using the st ...

  10. Python内置函数(19)——eval

    英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...