MySql 双主多从配置指导
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)
验证成功!
五、温馨提示
实际操作过程中,请使用相同版本数据库(本文mysql多开实例,不存在数据库版本问题)。
主库配置需设置log-slave-updates=1使得数据库将所有的操作写入到binary log,否则A库的操作不会同步到D库,同理B库操作不会同步到C库。
主库配置auto_increment_offset 和auto_increment_increment 两个参数,使得互为主从的A和B不会在高并发条件下由于主键相同导致同步失败。
MySql 双主多从配置指导的更多相关文章
- mysql双主互为主从配置
在使用双主互为主从的模式前提是互为主从的两个数据库,表的主键必须是自增的. 环境不多说了 ,多台mysql单实例或单台多实例都可以.多实例的配置请参考:https://www.cnblogs.com/ ...
- 006.MySQL双主-Master02可用配置
[root@Master02 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...
- 005.MySQL双主-Master01可用配置
[root@Master01 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...
- MYSQL 双主配置
MYSQL1. 版本号:5.7.243. 部署方式:双主部署,两台机器即是主又是备 ,双向拷贝,可以同时写入.4. 安装部署路径: a) /home/softb) 配置路径 /etc/my.cnfc) ...
- mysql传统主从、双主复制+keepalived配置步骤
mysql主从.主主复制(双主复制)配置步骤 一:MySQL复制: MySQL复制简介: 将master服务器中主数据库的ddl和dml操作通过二进制日志传到slaves服务器上,然后在master服 ...
- MySQL双主配置
MySQL双主配置 准备环境:服务器操作系统为RHEL6.4 x86_64,为最小化安装.主机A和主机B均关闭防火墙和SELINUX ,IP地址分别为192.168.131.129和192.168.1 ...
- linux环境下配置mysql双主复制
简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...
- 011.MySQL双主多从+Keepalived配置
一 基础环境 主机名 系统版本 MySQL版本 主机IP Master01 CentOS 6.8 MySQL 5.6 172.24.8.10 Master02 CentOS 6.8 MySQL 5.6 ...
- MYSQL主从复制、主主复制、双主多从配置
一.如何配置MYSQL的主从复制? 1. 两台数据库服务器,IP分别为 192.168.216.128 和 192.168.216.129,在服务器上装MYSQL(我的配置版本为5.5.56) 2. ...
随机推荐
- html笔记第一天
快速生成标签有序ol>li*3无序ul>(li>a{新闻标题})*3定义列表 dl>(dt+dd)*3制作表格table>(tr>td*5)*6pading:3个数 ...
- idea远程打断点
(1)用如下方式启动jar java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -jar durati ...
- MP3、MP4的文件选择及播放
项目主页网址如下: https://github.com/Judylalala/en ####技术问题1:如何播放音频(MP3).视频(MP4)? ####解决过程1:我首先想到了XMAL插件中的Me ...
- [Swift]LeetCode79. 单词搜索 | Word Search
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- [Swift]LeetCode206. 反转链表 | Reverse Linked List
Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...
- [Swift]LeetCode448. 找到所有数组中消失的数字 | Find All Numbers Disappeared in an Array
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...
- JDK1.8下载与安装及环境变量配置
一.在Oracle官网下载及安装JDK1.8 1.输入Oracle官网地址 www.oracle.com 2.出现Oracle界面后点击 Downloads 3.点击 Java 4.点击 Java ( ...
- 【Storm篇】--Storm 容错机制
一.前述 Storm容错机制相比其他的大数据组件做的非常不错. 二.具体原因 结合Storm集群架构图: 我们的程序提交流程如下: 其中各个组件的作用如下: Nimbus资源调度任务分配接收jar ...
- Python __new__ 实现单例模式 python经典面试题
话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...
- 如何写好css系列之button
现代前端行业的发展,如果你在css的时候,还没有利用一些预编译工具,是否觉得自己太low了.但你是否考虑过搭建一套自己前端框架.可能你会想这是否有必要,因为基础有boostrap,组件库有:easyu ...