mysql5.7GTID主从复制
GTID又叫做全局事务id(global transaction id),是已提交事务的编号,并且是一个全局唯一的编号,mysql5.6版本之后在主从复制类型上新增了GTID复制
GTID由server_uuid和事务id组成,即GTID=sever_uuid:transaction_id,server_uuid 是在数据库启动过程中产生的,每台机器都不相同,uuid存放在auto.cnf文件下。而transaction_id是事务提交时由系统顺序分配的一个不会重复的序列号。
GTID优点
1. GTID使用master_auto_position=1来替代binlog 和position来搭建主从复制,更方便
2. GTID可以知道事务最开始是在那个实例上提交的
3. GTID方便实现主从间的failover
搭建主从注意事项
4. 设置参数
主库配置:
gtid_mode=on
enforce_gtid_consistency=on
log_bin=on
binlog_format=row
server_id 不能和从库一样
从库配置:
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
虽然log_slave_updates在mysql5.7之后可以关闭,使用gtid_executed这张表,但是还是建议在从库中开启(万一需要从 从库继续向下一级从库同步数据)
如果需要将从库作为主库继续向下传递数据我们还需要继续在从库上添加下面两项配置log_bin=on 和binlog_format=row
server_id 和主库不一样
实战搭建:
环境
Centos7.5 mysql5.7.24
主:10.104.143.107 从:10.104.143.108
5. 主库配置文件
log_bin=mysql3306-bin
server_id=1
#STATEMENT,ROW,MIXED
binlog_format=ROW
gtid_mode=on
enforce_gtid_consistency=on
6. 从库配置文件
log_bin=mysql3306-bin
server_id=2
#STATEMENT,ROW,MIXED
binlog_format=ROW
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
7. 创建同步账号(主从都需要)
grant replication slave, replication client on *.* to repl@'10.143.143.%' identified by '123456';
flush privileges;
8. 备份主库
mysqldump -S /usr/local/mysql/mysql.sock --all-databases --single-transaction --user=root --password=123456 >/home/all.db
9. 还原从库
source /home/hadoop/master_all.db
10. 开启同步
CHANGE MASTER TO
MASTER_HOST='10.143.143.107',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
start slave ;
show slave status;
11. 结果校验
在主库上创建库testGTID 并创建表a
create database testGTID;
use testGTID;
create table a (id int);
Insert into a values(1);
从库上进行查询
use testGTID;
select * from a ;
到此使用GTID创建主从复制完成
閱讀更多 大數據和數據庫學習 的文章