共计 1591 个字符,预计需要花费 4 分钟才能阅读完成。
1. 概述
从 MySQL5.6 开始,mysql 开始支持 GTID 复制。
基于日志点复制的缺点:
从那个二进制日志的偏移量进行增量同步,如果指定错误会造成遗漏或者重复,导致数据不一致。
MySQL 基于日志点的复制 见 http://www.linuxidc.com/Linux/2016-09/135576.htm
基于 GTID 复制:
1. 从服务器会告诉主服务器已执行的事务的 GTID 值。
2. 主库会告诉从哪些 GTID 事务没有被执行。
同一个事务在指定的从库执行一次。
什么是 GTID
GTID 即全局事务 ID, 器保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的 ID.
GTID=source_id:transaction_id
source_id: 是主库的 server UUID,在数据目录的 auto.cnf 文件中。
transaction_id: 从 1 开始的一个序列。
2. 基于 GTID 复制的步骤
1. 在主 DB 服务器上建立复制帐号。
和日志点是一样的。
2. 配置主数据库服务器
bin_log =mysql-bin
server_id=1001
gtid_mode=on
enforce-gtid-consiste: 强制事务一致性,保证事务的安全
不能使用:
1.create table。。select
2. 在事务中使用 create temporary table 建立临时表,使用关联更新事务表和非事务表。
log-slave-updates=on
在从服务器中记录从主服务器传过来的日志数据。
使用 GTID 5.6 必须使用此参数,5.7 可以不使用。
3. 配置从服务器。
server_id=1002
relay_log=relay_log
gtid_mode=on
enforce-gtid-consistency
建议配置
read_only=on
保证从服务器数据安全性
master_info_reposistory=TABLE
relay_log_info_reposistory=TABLE
从服务器连接主服务器的信息和中继日志存放咱 master_info,和 relay_log 中。
4. 初始化从服务器数据。
mysqldump –master-data=2 -single-transaction
xtarbackup –slave-info
记录备份时最后的事务 GTID 值。
导出数据
mysqldump –single-transaction –master-data=2 –triggers -routines –all-databases -uroot -p -P3308 >all2.sql
导入数据
mysql -uroot -p -P3309 < all2.sql
5. 启动基于 GTID 的复制
change master to master-host=’主服务 IP’,
master_user=’repl’,
master_password=’password’,
master_auto_position=1
change master to MASTER_HOST=’192.168.1.106′,
MASTER_PORT=3308,
MASTER_USER=’repl’,
MASTER_PASSWORD=’repl’,
master_auto_position=1;
start slave;
show slave status \G;
在启动 slave 时报错。
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解决办法:
reset slave; 重置 slave
再启动 slave
start slave;
测试同步:
1. 在主库创建一张表,插入记录。
2. 在从库查询验证是否正确,经验证配置正确。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-09/135577.htm