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. 最新鲜最详细的Android SDK下载安装及配置教程

    //来源: http://www.cnblogs.com/summary-2017/p/8073225.html 最近Neo突发神经,想要将学过的一些计算机视觉.机器学习中的算法都放到移动设备上去跑跑 ...

  2. koa2学习(一)

    前期准备: node环境 npm包管理工具 安装Koa npm install --save koa 第一个程序 创建index.js const Koa = require('koa'); cons ...

  3. dx.jar文件问题,有没有同学知道怎么解决呀,这一步没法解决,后面就没办法跟着做了

     Java Code  123456789101112 dx.jar文件问题,有没有同学知道怎么解决呀,这一步没法解决 - test] Unknown error: Unable to build:  ...

  4. Bugly 多渠道热更新解决方案

    作者:巫文杰 Gradle使用productFlavors打渠道包的痛 有很多同学可能会采用配置productFlavors来打渠道包,主要是它是原生支持,方便开发者输出不同定制版本的apk,举个例子 ...

  5. [Swift]LeetCode247.对称数 II $ Strobogrammatic Number II

    A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...

  6. [Swift]LeetCode405. 数字转换为十六进制数 | Convert a Number to Hexadecimal

    Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s compl ...

  7. [Swift]LeetCode483. 最小好进制 | Smallest Good Base

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  8. [Swift]LeetCode529. 扫雷游戏 | Minesweeper

    Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...

  9. [Swift]LeetCode877. 石子游戏 | Stone Game

    Alex and Lee play a game with piles of stones.  There are an even number of piles arranged in a row, ...

  10. Java中的数组添加,数组相关代码

    private static void demo() {  // TODO Auto-generated method stub  /**   * @author square 凉   * @功能 实 ...