MySQL双主复制
原文发表于cu:2017-06-12
本文简单介绍MySQL双主复制原理及1个简单是双主复制验证。
一.MySQL双主复制原理
1. 双主复制原理
master-master复制的两台服务器,既是master,又是另一台服务器的slave,本质上互为主从。
二.验证环境
1. 操作系统
CentOS-6.7-x86_64
2. MySQL版本
MySQL版本是5.6.36:https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz
3. 拓扑图

- 采用VMware ESXi虚拟出的2台服务器master/backup,地址10.11.4.196/197;
- MySQL已安装并配置完成,可参考:http://www.cnblogs.com/netonline/p/7327409.html中的MySQL部分;
三.master配置
1. my.cnf配置
#在主从复制配置文件的基础上增加3个参数项
[root@master ~]# vim /etc/my.cnf
[mysqld]
server_id = 196
log_bin = /mysql/mysql-bin
max_binlog_size = 1G
sync_binlog = 0
binlog-format = mixed
binlog-ignore-db = information_schema,mysql,performance_schema,test # 中继日志执行之后将变化写入自己的binlog文件,即从库从主库复制的文件默认不会写入自己的binlog文件,需要开启后才生效;
# 通常此从库同时作为主库时,即链式复制时,需要开启此参数;
# 默认参数为0,表示OFF, 设置为1表示ON,参数可直接带OFF或ON.
log-slave-updates = 1 # 做双主时,每台数据库都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突;解决方案是让每个数据库的自增主键不连续;
# 参数auto_increment_increment表示自增值,一般有n台主库,自增值就采用n;
# auto_increment_offset表示起始序号,一般offset不超过自增值,且各主库的自增值不一样.
auto_increment_increment = 2
auto_increment_offset = 1 #使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作
[root@master ~]# service mysqld stop
[root@master ~]# mysqld_safe --skip-slave-start &
2. 创建复制用户
#在主库上10.11.4.0网段的主机授权,从库用户repl获得REPLICATION SLAVE权限
[root@master ~]# mysql -uroot -p
Enter password: mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED BY 'repl';
mysql> flush privileges;
3. 获取master binlog文件名与偏移量
[root@master ~]# mysql -uroot -p
Enter password: mysql> show master status;

- 获取到binlog文件名与偏移量,可为从库设定同步复制点。
4. iptables
[root@master ~]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
[root@master ~]# service iptables restart
四.backup配置
1. my.cnf配置
#将主库服务器上的my.cnf文件拷贝到从库服务器
[root@master ~]# scp /usr/local/mysql/my.cnf backup:/usr/local/mysql/
root@backup's password: #修改server id值与主库服务器不同;
#auto_increment_offset参数,各服务器的offset值应不一样
[root@backup ~]# vim /etc/my.cnf
[mysqld]
server_id = 197 auto_increment_increment = 2
auto_increment_offset = 2 #使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作
[root@backup ~]# service mysqld stop
[root@backup ~]# mysqld_safe --skip-slave-start &
2. 创建复制用户
#在主库上10.11.4.0网段的主机授权,从库用户repl获得REPLICATION SLAVE权限
[root@backup ~]# mysql -uroot -p
Enter password: mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED BY 'repl';
mysql> flush privileges;
3. 获取master(backup节点) binlog文件名与偏移量
[root@backup ~]# mysql -uroot -p
Enter password: mysql> show master status;

- 获取到binlog文件名与偏移量,可为从库设定同步复制点。
4. iptables
[root@backup ~]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
[root@backup ~]# service iptables restart
五.同步复制
1. master配置同步复制
#配置从库向主库提交的参数,如果参数有错误,可以重新配置;
# master-host、master-user、master-password、master-port等也可在my.cnf文件中指定;
#”start slave“启动复制
[root@master ~]# mysql -uroot -p
Enter password: mysql> change master to
master_host = '10.11.4.197',
master_user = 'repl',
master_password = 'repl',
master_log_file = 'mysql-bin.000009',
master_log_pos = 1306;
mysql> start slave;
2. backup配置同步复制
[root@backup ~]# mysql -uroot -p
Enter password: mysql> change master to
master_host = '10.11.4.196',
master_user = 'repl',
master_password = 'repl',
master_log_file = 'mysql-bin.000003',
master_log_pos = 2462;
mysql> start slave;
六.验证
1. 查看线程
1)master服务器
[root@master ~]# mysql -uroot -p
Enter password: mysql> show processlist;

- master服务器做为主库的binlog dump线程已由backup服务器从库的repl用户启动;
- master服务器做为从库的I/0线程与SQL线程由系统用户启动。
2)backup服务器
[root@backup ~]# mysql -uroot -p
Enter password: mysql> show processlist;

- backup服务器做为主库的binlog dump线程已由master服务器从库的repl用户启动;
- backup服务器做为从库的I/0线程与SQL线程由系统用户启动。
2. 查看从库状态
1)master服务器
[root@master ~]# mysql -uroot -p
Enter password: mysql> show slave status\G;

- 重点关注Slave_IO_Running与Slave_SQL_Running,状态均为YES时正常。
2)backup服务器
[root@backup ~]# mysql -uroot -p
Enter password: mysql> show slave status\G;

3. 查看新建数据数据库同步情况
1)在master服务器新建数据库与表
[root@master ~]# mysql -uroot -p
Enter password: mysql> create database dbtest2;
mysql> use dbtest2;
mysql> create table tabtest2(id int);
mysql> insert into tabtest2() values(1),(2);

2)在backup服务器查看数据库与表
[root@backup ~]# mysql -uroot -p
Enter password:
(1)查看数据库
mysql> show databases;

(2)查询表
mysql> select * from dbtest2.tabtest2;

3)在backup服务器修改数据表
[root@backup ~]# mysql -uroot -p
Enter password: mysql> use dbtest2;
mysql> insert into tabtest2() values(3),(4);

4)在master服务器查看修改后的数据表
[root@master ~]# mysql -uroot -p
Enter password: mysql> select * from dbtest2.tabtest2;

MySQL双主复制的更多相关文章
- 分布式数据存储 - MySQL双主复制
上篇文章<分布式数据存储 - MySQL主从复制>,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...
- keepalived+mysql双主复制高可用方案
MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...
- mysql双主复制总结
双主复制: 1).在两台服务器上各自建立一个具有复制权限的用户: 2).修改配置文件: # 主服务器A上 [mysqld] server-id = 10 log-bin = mysql-bin rel ...
- linux环境下配置mysql双主复制
简单来说,双主复制就是让两台mysql服务器中的数据保持同步,可以用来实现灾备和负载均衡 主机1 IP:192.168.200.128 主机2 IP:192.168.200.131 两台主机系统均为c ...
- mysql 双主复制 centos7
mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 1 ...
- 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境
应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...
- keeplived + mysql双主复制部署 --原创
环境: master 1: 192.168.100.10 oracle linux 7.4 mysql 5.7.1 master 2: 192.168.100.11 oracle linux ...
- 003.Heartbeat MySQL双主复制
一 基础环境 节点 系统版本 MySQL版本 业务IP 心跳IP Master01 CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Master0 ...
- Heartbeat MySQL双主复制
目录 一 基础环境 二 实际部署 2.1 安装MySQL 2.2 初始化MySQL 2.3 master01 my.cf配置 2.4 创建账号 2.5 master02 my.cf配置配置 2.6 创 ...
随机推荐
- C语言函数指针 和 OC-Block
C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/2967037 ...
- a^b%c 小技巧
我们知道像a^b这种数在计算的时候由于大的增长速度非常快,所以常常越界,所以非常多题目在出的时候都会让我们取模. a^b = a*a*a*a--(一共b个a相乘):我们前一篇文章在说两个数相乘的时 , ...
- Template Method(模板方法)模式
1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1: ...
- 安卓apk重新签名教程
可能大家会有疑问,为什么安卓apk文件要重新签名,签名后有什么作用.这里我简单说一下,如果大家一直都是用官方的app的话那是不需要重新签名的.重新签名是对官方app进行了修改(如icon.图片.代码等 ...
- Angular7教程-03-Angular常用操作(上)
本节来介绍angular中的操作以及TypeScript语法的简单介绍.关于TypeScript语法的更为详细的内容,打算在整个angular教程结束后再单独介绍. 0. 安装所需要的插件及配置插件 ...
- ansible常用配置
1.什么是Ansible 部署参考连接:http://www.ansible.com.cn/ ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfeng ...
- 【Linux】管理文件系统
文件系统概念: 文件系统是指文件的组织与管理结构,是一个有关于磁盘中各种有用信息的记录——即是保存以下信息的结构记录表 当前所使用磁盘的容量信息 磁盘的可用信息,包括已占用和剩余的空间: 文件与目录的 ...
- ubuntu远程桌面
用Linux已经有很长一段时间,但主要用于嵌入式开发(用交叉工具链进行版本编译),所以用命令行就可以了,而且敲的最多的命令就是make.最近开始搭建TensorFlow的开发环境,大部分工作都是命令行 ...
- 关于alias同时使用多个命令小记。
为了方便自己快速使用命令,接触了一下alias.在使用多个命令时,一般有两种方式.各有不同 根据需求选择. 直接上代码: 1.alias Name='(date;pwd;cmd1;cmd2) 写法简洁 ...
- Delphi XE7调用Java Class,JAR
Delphi XE5,XE6需要用户手工编译并将Classes.Dex加入到包中,不过Delphi XE7可以省掉这些工作了. 如何在XE7中调用Java,具体步骤如下: 1.将jar文件添加到XE7 ...