MySQL主从复制

本文简单介绍MySQL双主复制原理及1个简单是双主复制验证,2017-06-12 本文简单介绍MySQL双主复制原理及1个简单是双主复制验证,本文简单介绍MySQL双主复制原理及1个简单是双主复制验证, 本文涉及MySQL主从复制原理及1个简单是主从复制验证

图片 6

原稿刊载于cu:2017-0陆-1贰

MySQL双主复制,mysql复制

初稿刊载于cu:2017-0六-1二

本文简要介绍MySQL双主复制原理及二个简易是双主复制验证。

初稿刊载于cu:2017-06-0九

本文简要介绍MySQL双主复制原理及三个简易是双主复制验证。

一.MySQL双主复制原理

参照他事他说加以考察文书档案:

1.MySQL双主复制原理

一. 双主复制原理

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

  1. 主从复制原理:

1. 双主复制原理

master-master复制的两台服务器,既是master,又是另1台服务器的slave,本质上互为骨干。

2.验证情状

 本文涉及MySQL主从复制原理及二个简单是主从复制验证。

二.验证碰到

一. 操作系统

CentOS-6.7-x86_64

1.MySQL主从复制原理

壹. 操作系统

CentOS-6.7-x86_64

2. MySQL版本

MySQL版本是5.6.36:

壹. 主从复制架构图

图片 1

主从复制中的八个线程:

  1. Binlog
    Dump线程:此线程运维在主库,当主从都布置好后,从库运营START
    SLAVE运行复制后,会在主库上生成二个BinlogDump线程,该线程的基本点功用就是读取主库Binlog事件,然后发送到从库(从库的I/O线程)。
  2. I/O线程:此线程运维在从库,功用是向主数据库要多少,并且将主库发送过来的退换事件写入到从库的对接日志中。
  3. SQL线程:此线程运转在从库,首要成效是读取中继日志中的更改事件并更新从库。

  4. 主从复制流程


概况流程:主库在事情提交时会把改变作为事件记录(伊夫nts)到二进制文件(binlog)个中,从库的IO线程从主库获取贰进制日志(binlog),并在该地保存为过渡日志(relay-log),然后通过SQL线程来在从库上实践中继日志中的内容,使从库和主库保持一致。

详尽流程如下:

  1. 主库验证从库发起的连日;
  2. 主库为从库开启三个线程;
  3. 从库将主库日志的偏移位告诉主库;
  4. 主库检查该值是不是低于当前2进制日志偏移位。
  5. 设若低于,则通告从库能够取多少。
  6. 从库持续从主库取多少,直至取完,那时,从库线程进入睡眠,主库线程同时跻身睡眠。
  7. 当主库有更新时,主库线程被激活,并将二进制日志推送给从库,并通报从库线程进入职业情形。
  8. 从库SQL线程施行2进制日志,随后进入睡眠处境。

2. MySQL版本

MySQL版本是5.6.36:

3. 拓扑图

图片 2

二.验证情状

3. 拓扑图

图片 3

  1. 采取VMware
    ESXi虚拟出的贰台服务器master/backup,地址十.11.肆.196/1玖柒;

  2. MySQL已安装并布置完结,可参看:中的MySQL部分;

  3. 主导配置可参谋:

三.master配置

1. 操作系统

CentOS-6.7-x86_64

三.master配置

1. 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

#使用--skip-slave-start启动,可以不立即启动从库的复制线程,方便后续配置操作
[[email protected] ~]# service mysqld stop
[[email protected] ~]# mysqld_safe --skip-slave-start & 

2. MySQL版本

MySQL版本是5.6.36: 

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权限      
[[email protected] ~]# mysql -uroot -p
Enter password:

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

3. 拓扑图

图片 4

  1. 利用VMware
    ESXi虚拟出的贰台服务器master/slave,地址10.1一.4.196/19八;

  2. MySQL已安装并安插达成,可仿效中的MySQL部分;

二. 创立复制用户

#在主库上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;

叁. 获得master binlog文件名与偏移量

[[email protected] ~]# mysql -uroot -p
Enter password:

mysql> show master status;

图片 5

三.主库配置

三. 收获master binlog文件名与偏移量

[root@master ~]# mysql -uroot -p
Enter password:

mysql> show master status;

图片 6

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

4. 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. my.cnf配置

[root@master ~]# vim /etc/my.cnf
[mysqld]
# ID值唯一的标识了群集中的主从服务器,master_id必须为1到232–1之间的一个正整数值,slave_id值必须为2到232–1之间的一个正整数值.
server_id = 196

# 启用binlog,启用后才可通过I/O写到Slave的relay-log,是进行replication的前提.
log_bin = /mysql/mysql-bin

# 设置binlog文件的最大值,当达到这个值会自动生成一个新的binlog文件.
max_binlog_size = 1G

# binlog会占据大量磁盘空间,可以设置binlog文件过期时间,以天为单位.
# expire-logs-days =

# 配置每次事务提交时是否都需要刷新binlog到磁盘,默认配置0,是由文件系统自己控制;如果设置为1,默认每次事务提交都会刷新binlog到磁盘.
# 因为binlog也有缓存,事务提交时先写缓存,如果系统突然宕机,可能会丢失缓存中的记录;但每次事务提交都写磁盘会对性能造成影响.
# 通过半同步复制可以解决因系统突然宕机而导致binlog缓存数据丢失的问题.
sync_binlog = 0

# 二进制日志记录有三种方式:row, STATEMENT and mixed
# row,基于行的复制,记录每一行的变更操作,优点:对复制的兼容性高,缺点:日志记录量大,对IO的影响也很大,不容易用来做分析;
# STATEMENT,基于语句的复制,记录操作的sql语句,是默认的格式,优点:日志量小,便于用来做分析,IO影响小,缺点:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户;
# mixed, 混合模式,默认采用STATEMENT记录,当出现不确定函数时就采取row记录.
binlog-format = mixed

# 只将指定数据库的变动写入二进制文件binlog,如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项;
# 在databases中无相应数据库时,开启binlog-do-db会导致mysql无法启动.
# binglog-do-db = 
# 对指定数据库的变动不写入二进制文件binlog,如果有多个数据库可用逗号分隔,或者使用多个binlog-ignore-db选项.
binlog-ignore-db = information_schema,mysql,performance_schema,test
# 指定需要复制同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-do-db选项
# replicate-do-db = 
# 指定不需要复制同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项.
# replicate-ignore-db = 

#配置文件在重启后生效
[root@master ~]# service mysqld restart

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配置

二. 创设复制用户

#在主库上为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;