MySQL双主复制

原文发表于cu:2017-06-12

本文简单介绍MySQL双主复制原理及1个简单是双主复制验证。

  1. MySQL双主复制原理

  1. 双主复制原理

master-master复制的两台服务器,既是master,又是另一台服务器的slave,本质上互为主从。

  1. 验证环境

  1. 操作系统

CentOS-6.7-x86_64

  1. MySQL版本

MySQL版本是5.6.36:

https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz

  1. 拓扑图

  1. 采用VMware ESXi虚拟出的2台服务器master/backup,地址10.11.4.196/197;
  2. MySQL已安装并配置完成,可参考http://blog.chinaunix.net/uid-26168435-id-5715005.html中的MySQL部分;
  3. 主从配置可参考:http://blog.chinaunix.net/uid-26168435-id-5766005.html

    1. master配置

  4. my.cnf配置

在主从复制配置文件的基础上增加3个参数项。

[[email protected] ~]# 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

[[email protected] ~]# service mysqld stop

[[email protected] ~]# mysqld_safe --skip-slave-start &

#使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作

  1. 创建复制用户

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘10.11.4.%‘ IDENTIFIED BY ‘repl‘;

mysql> flush privileges;

#在主库上10.11.4.0网段的主机授权,从库用户repl获得REPLICATION SLAVE权限。

  1. 获取master binlog文件名与偏移量

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> show master status;

#获取到binlog文件名与偏移量,可为从库设定同步复制点。

  1. iptables

[[email protected] ~]# vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

[[email protected] ~]# service iptables restart

  1. backup配置

  1. my.cnf配置

将主库服务器上的my.cnf文件拷贝到从库服务器

[[email protected] ~]# scp /usr/local/mysql/my.cnf backup:/usr/local/mysql/

[email protected]‘s password:

[[email protected] ~]# vim /etc/my.cnf

[mysqld]

server_id = 197

auto_increment_increment = 2

auto_increment_offset = 2

#修改server id值与主库服务器不同;

#auto_increment_offset参数,各服务器的offset值应不一样。

[[email protected] ~]# service mysqld stop

[[email protected] ~]# mysqld_safe --skip-slave-start &

#使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作。

  1. 创建复制用户

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘10.11.4.%‘ IDENTIFIED BY ‘repl‘;

mysql> flush privileges;

#在主库上10.11.4.0网段的主机授权,从库用户repl获得REPLICATION SLAVE权限。

  1. 获取master(backup节点) binlog文件名与偏移量

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> show master status;

#获取到binlog文件名与偏移量,可为从库设定同步复制点。

  1. iptables

[[email protected] ~]# vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

[[email protected] ~]# service iptables restart

  1. 同步复制

  1. master配置同步复制

[[email protected] ~]# 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;

#配置从库向主库提交的参数,如果参数有错误,可以重新配置;

# master-host、master-user、master-password、master-port等也可在my.cnf文件中指定;

#"start slave"启动复制。

  1. backup配置同步复制

[[email protected] ~]# 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. 查看线程

  2. master服务器

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> show processlist;

#master服务器做为主库的binlog dump线程已由backup服务器从库的repl用户启动;

#master服务器做为从库的I/0线程与SQL线程由系统用户启动。

  1. backup服务器

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> show processlist;

#backup服务器做为主库的binlog dump线程已由master服务器从库的repl用户启动;

#backup服务器做为从库的I/0线程与SQL线程由系统用户启动。

  1. 查看从库状态

  2. master服务器

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> show slave status\G;

#重点关注Slave_IO_Running与Slave_SQL_Running,状态均为YES时正常。

  1. backup服务器

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> show slave status\G;

  1. 查看新建数据数据库同步情况

  2. 在master服务器新建数据库与表

[[email protected] ~]# 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);

  1. 在backup服务器查看数据库与表

[[email protected] ~]# mysql -uroot -p

Enter password:

(1)查看数据库

mysql> show databases;

(2)查询表

mysql> select * from dbtest2.tabtest2;

  1. 在backup服务器修改数据表

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> use dbtest2;

mysql> insert into tabtest2() values(3),(4);

  1. 在master服务器查看修改后的数据表

[[email protected] ~]# mysql -uroot -p

Enter password:

mysql> select * from dbtest2.tabtest2;

时间: 2024-10-06 12:32:47

MySQL双主复制的相关文章

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

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.

mysql双主复制模型

实验环境:centos6.6 mariaDB 10.0.10二进制安装 这里不再说明安装过程直接开始配置主从节点 节点1:172.16.30.1 [[email protected] ~]# vim /etc/mysql/my.cnf thread_concurrency = 4 datadir = /mydata/data  #数据库存放目录 innodb_file_per_table = 1 ##innodb引擎单表单文件 log-bin=/mydata/binlogs/mysql-bin 

mysql双主复制总结

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

mysql 双主复制 centos7

mysql 安装请看:http://www.cnblogs.com/leohe/p/6839705.html 双主复制设置 1. 两台虚拟机,都是 centos7 主: 10.1.1.115 从: 10.1.1.116 2. 修改配置文件 2.1 在 10.1.1.115 找到 /etc/my.cnf , 在[mysqld]下添加下列属性 server-id=10 log-bin=mysql-bin binlog-do-db=retail #需要同步的数据库名,如果有多个数据库,可重复此参数,每

【20181204】 MySQL 双主复制是如何避免回环复制的

问题原因 想要了解这个问题的原因在于有一次面试的时候,面试官问我一个问题,就是MySQL的双主复制的时候是如何避免回环复制这个问题的,说老实话在基于GTID复制的时候我还是比较了解的,因为GTID复制是MySQL本身是不会执行已经执行过的GTID事务,即使MySQL本身并不会执行已经执行过的GTID事务,但是还是会形成一个回环复制.那么MySQL到底是如何解决回环复制的呢? 猜想 在我们搭建主从的时候我们可以清楚的知道,要想成功的搭建主从,那么主从的server_id必须不能一模一样的,所以猜想

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

环境: master 1: 192.168.100.10  oracle  linux 7.4  mysql 5.7.1 master 2: 192.168.100.11 oracle  linux 7.4  mysql 5.7.1 keepalived VIP 192.168.100.12     配置本地yum仓库 vim /etc/yum.repo.d/public-yum-ol7.repo [yum_repo] name=yum_repo baseurl=file:///share/re

heartbeat+mysql双主复制实现高可用

实验环境 一:搭建主主复制环境 1.1实验环境 两台机器事先都已经装好了MySQL单实例. IP: 10.192.203.201 10.192.203.202 端口都是3307. 二者的端口号需要保持一致,否则在最后用vip连接的时候,不能使用相同端口号连接. 1.2实验步骤 1.2.1修改配置文件 修改master1: 在[mysqld]下面添加: server-id = 1 relay-log=/data/server/mysql_3307/binlog/ZabbixServer-relay

Heartbeat MySQL双主复制

目录 一 基础环境 二 实际部署 2.1 安装MySQL 2.2 初始化MySQL 2.3 master01 my.cf配置 2.4 创建账号 2.5 master02 my.cf配置配置 2.6 创建账号 三 启动主从 3.1 手动同步 3.2 启动Master01的slave功能 3.3 启动Master02的slave功能 四 安装Heartbeat 五 配置Heartbeat 5.1 配置authkeys 5.2 配置Heartbeat 5.3 配置haresources 六 验证Hea

mysql/mairadb双主复制

node5: 172.16.92.5/16 mariadb主服务器1node6: 172.16.92.6/16 mariadb主服务器2以上节点均为CentOS 7.1 配置环境1. 配置好光盘yum源2. 关闭selinux和iptables ============ 一. 安装mariadb-server并配置好文件 =========== node5: mariadb主服务器 [[email protected] ~]# yum -y install mariadb-server[[ema