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. Python练手例子(12)

    67.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组. #python3.7 def inp(numbers): for i in range(6): numbers.appen ...

  2. python语法_内置函数

    a = filter(函数名,序列) 返回一个迭代器对象/.函数里必须加过滤条件 ret = ['a','b','c','d','e'] def ft(s): if s != 'a': return ...

  3. JVM性能调优监控命令jps、jinfo、jstat、jmap+jhat、jstack使用详解

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jinfo.jstat.jmap+jhat.jstack等小巧的工具,本博客希望能起抛砖 ...

  4. PHP零基础入门

    字符函数库: 函数库基础 安装字符串函数库 字符串函数库列表 函数是可以实现特定功能,可以重复执行的代码段. 函数分 内置函数 和 用户函数. 内置函数是指PHP本身提供的各类库函数. 字符串函数库, ...

  5. [Swift]LeetCode123. 买卖股票的最佳时机 III | Best Time to Buy and Sell Stock III

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  6. [Swift]LeetCode647. 回文子串 | Palindromic Substrings

    Given a string, your task is to count how many palindromic substrings in this string. The substrings ...

  7. Python面试真题第四节

    81.举例说明SQL注入和解决办法 82.s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', ...

  8. eclipse菜单栏不显示 + the system is running in lou-graphics mode问题

    作为一个Linux使用新手,一条指令执行下去,就可能是一堆的错误.这不,笔者在Ubuntu16.04上安装eclipse后没有菜单栏,用起来不是很方便,网上找一篇老师写的博客ubuntu 中 ecli ...

  9. 【译】编写支持SSR的通用组件指南

    原文来自:https://blog.lichter.io/posts/the-guide-to-write-universal-ssr-ready-vue-compon?utm_campaign=Vu ...

  10. RabbitQM使用笔记

    一:安装  and  卸载 curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.r ...