GTID复制原理:
基于GTID的复制是MySQL 5.6后新增的复制方式.
GTID (global transaction identifier) 即全局事务ID, 保证了在每个在主库上提交的事务在集群中有一个唯一的ID.
在原来基于日志的复制中, 从库需要告知主库要从哪个偏移量进行增量同步, 如果指定错误会造成数据的遗漏, 从而造成数据的不一致.
而基于GTID的复制中, 从库会告知主库已经执行的事务的GTID的值, 然后主库会将所有未执行的事务的GTID的列表返回给从库. 并且可以保证同一个事务只在指定的从库执行一次.
GTID是由server_uuid和事物id组成,格式为:GTID=server_uuid:transaction_id。server_uuid是在数据库启动过程中自动生成,每台机器的server-uuid不一样。uuid存放在数据目录的auto.conf文件中,而transaction_id就是事务提交时系统顺序分配的一个不会重复的序列号。
GTID的好处:
(1)GTID使用master_auto_position=1代替了binlog和position号的主从复制搭建方式,相比binlog和position方式更容易搭建主从复制。
(2)GTID方便实现主从之间的failover,不用一步一步的去查找position和binlog文件。
GTID模式复制搭建过程中注意事项:
主从需要设置如下参数(一般直接在配置文件/etc/my.cnf下直接添加):
a、主库配置:
gtid_mode=on
enforce_gtid_consistency=on
log_bin=on
server-id=33062200(主从不能相同)
binlog_format=row
b、从库配置:
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
server-id=33062211(主从不能相同)
主库上操作:
root@db 15:10: [mysql]>create user 'repluser'@'192.168.112.%' identified by 'repluser123';
root@db15:10: [mysql]> grant replication slave on *.* to 'repluser'@'192.168.112.%';
主库导出数据库脚本all.sql
mysqldump -uroot -hlocalhost -p --single-transaction --master-data=2 -A >all.sql
从库上操作:
将主库上导出的all.sql脚本上传到从库,然后导入从库
mysql -uroot -hlocalhost -p
如果出现如下错误:
ER