摘要
本文部分内容来源于网络,个人收集整理,请勿传播
MySql-AB复制是一种数据复制技术
- MySQL提供的一种高性能、高可用的解决方案。
- 复制
- 单向复制:不要在slave上做写入操作,会导致主从数据不一致。
- 双向复制
- 异步复制
- ab复制的模式
- 一主一从
- 一主多从
- 双主
- 多主多从
AB复制原理
主服务器必须开启二进制日志
- 1)首先master将更新写入二进制日志,有一个二进制日志索引文件跟踪日志循环
- 2)slave通过I/O线程向master索要二进制日志,slave知道从哪个binlog点开始索要
- 3)master接收到slave的I/O请求之后,根据slave提供的位置点开始传输日志
- 4)slave收到日志后,写入本地的relay log中
- 5)slave通过SQL线程读取relay log,在数据库中执行相应的操作,至此,
主从数据保持一致,从服务器进入等待状态,等待主服务器的下一次更新。
环境说明
- 操作系统:CentOS 6.7 64位
- MySQL数据库版本:mysql-5.5.35
- master:172.16.0.100
- slave:172.16.0.101
配置步骤:
注:一些基础环境配置需要自行完成
master端配置
修改配置文件
1 | vim /etc/my.cnf |
重启mysql服务
1 | /etc/init.d/mysqld restart |
授权一个用来实现复制的用户
1 | mysql> grant replication slave,reload,super on *.* to slave@'172.16.0.101' identified by 'Test@slave123'; |
做一次全库备份
1 | mysql> flush tables with read lock; //保证备份数据一致 |
将备份传到slave服务器
1 | scp /tmp/all.sql 172.16.0.101:/tmp/ |
slave的配置
修改配置文件
1 | vim /etc/my.cnf |
停掉数据库(全新库不用做)
1 | /etc/init.d/mysqld stop |
初始化数据库(全新库不用做)
1 | cd /data/mysql/ |
恢复来自master的数据
1 | mysql < /tmp/all.sql |
在master上查看当前日志文件及位置点
1 | mysql> show master status; |
在slave上手动同步数据
1 | mysql> change master to master_host='172.16.0.100',master_port=3306, |
注意:当slave是start状态的时候,是不能够执行change的
master服务器解锁
1 | mysql> unlock tables; |
验证
1 | 在master上执行 |
1 | slave上报错如下: |
配置MySQL GTID 主从复制
GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。本文主要描述了快速配置一个基于GTID的主从复制架构,供大家参考。
GTID的概念
1 | 1、全局事务标识:global transaction identifiers。 |
GTID的组成
1 | GTID = source_id:transaction_id |
GTID的优势
1 | 1、更简单的实现failover,不用以前那样在需要找log_file和log_pos。 |
GTID的工作原理
1 | 1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。 |
配置GTID
对于GTID的配置,主要修改配置文件中与GTID特性相关的几个重要参数(建议使用mysql-5.6.5以上版本),如下:
1 | 1、主: |
配置基于GTID的复制
1 | 1、新配置的mysql服务器 |