原文发表于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. 拓扑图

  1. 采用VMware ESXi虚拟出的2台服务器master/backup,地址10.11.4.196/197;
  2. 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;

  1. 获取到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;

  1. 获取到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;

  1. master服务器做为主库的binlog dump线程已由backup服务器从库的repl用户启动;
  2. master服务器做为从库的I/0线程与SQL线程由系统用户启动。

2)backup服务器

[root@backup ~]# mysql -uroot -p
Enter password: mysql> show processlist;

  1. backup服务器做为主库的binlog dump线程已由master服务器从库的repl用户启动;
  2. backup服务器做为从库的I/0线程与SQL线程由系统用户启动。

2. 查看从库状态

1)master服务器

[root@master ~]# mysql -uroot -p
Enter password: mysql> show slave status\G;

  1. 重点关注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双主复制的更多相关文章

  1. 分布式数据存储 - MySQL双主复制

    上篇文章<分布式数据存储 - MySQL主从复制>,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...

  2. keepalived+mysql双主复制高可用方案

    MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...

  3. mysql双主复制总结

    双主复制: 1).在两台服务器上各自建立一个具有复制权限的用户: 2).修改配置文件: # 主服务器A上 [mysqld] server-id = 10 log-bin = mysql-bin rel ...

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

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

  5. mysql 双主复制 centos7

    mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 1 ...

  6. 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境

    应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...

  7. keeplived + mysql双主复制部署 --原创

    环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux ...

  8. 003.Heartbeat MySQL双主复制

    一 基础环境 节点 系统版本 MySQL版本 业务IP 心跳IP Master01 CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Master0 ...

  9. Heartbeat MySQL双主复制

    目录 一 基础环境 二 实际部署 2.1 安装MySQL 2.2 初始化MySQL 2.3 master01 my.cf配置 2.4 创建账号 2.5 master02 my.cf配置配置 2.6 创 ...

随机推荐

  1. Android 4.4系统获取root权限的方法

    1. 准备工作: 准备一台ubuntu机器,将boot.img复制到该机器上,下载必要的工具sudo apt-get install abootimggit clone https://github. ...

  2. centos 腾讯云 今天买了 18个月

    1.安装开发编译工具包 yum groupinstall "Development Tools" 2.查看Linux 下用户 对系统资源的占用情况,root表示用户 top -u ...

  3. Decorator(装饰)模式

    1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继 ...

  4. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

    在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...

  5. oracle数据库——常用的数据类型

    2018-12-19    23:08:03 oracle数据库中常用的数据类型有23种,我们把数据类型分为字符型.数字型.日期型和其他数据类型. 一.字符型: 数据类型 取值范围 (字节) 说明 v ...

  6. 怎么在苹果Mac虚拟机上安装Win7

    怎么在苹果Mac虚拟机上安装Win7 使用 Mac 系统的用户,因为一些软件或是应用的原因,可能需要 Windows 系统才能完成.那如果不想在自己的 Mac 电脑上安装双启动系统的话,我们还可以在 ...

  7. Mave实战(1)——Maven介绍

    目录 1. Maven介绍 1.1. 何为Maven 1.1.1. Maven是优秀的构建工具 1.1.2. Maven不仅仅是构建工具 1. Maven介绍 1.1. 何为Maven Maven是一 ...

  8. WebGl 画线

    效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. JDK1.8降到1.7技巧

    前言: 最近部署一个产品,该产品不支持JDK1.8,碰巧我的机器安装的是1.8,这就需要降到1.7才能部署启动成功.那么我也是不赞成卸载1.8来安装1.7,因为很多时候可能需要1.8和1.7来回切换. ...

  10. previewImage.js图片预览缩放保存插件

    previewImage.js好用的图片预览缩放保存插件