mysql 5.7 gtid 主从_MySQL 5.7基于GTID的主从复制实践

GTID是基于mysql事务实现的,如果对mysql事务没啥概念的话,建议先看看

不在单独说明如何搭建mysql单点 请参考

然后再看这个gtid的

现在有这样一个需求:

主1mysql 是个单点的mysql库,库里有很多数据,想给主1增加个从库,并且使用gtid

思路如下:

1.备份主1的数据或者拿主1最新的备份(主1已经开启gtid)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

通过配置文件my.cnf 开启gtid

gtid-mode =ON

enforce-gtid-consistency =ON

log-slave-updates =ON

在线开启gtid 不用重启

mysql> set global gtid_mode='OFF_PERMISSIVE';

Query OK,0 rows affected (0.01sec)

mysql> set global gtid_mode='ON_PERMISSIVE';

Query OK,0 rows affected (0.01sec)

mysql> set global enforce_gtid_consistency=ON;

Query OK,0 rows affected (0.00sec)

mysql> set global gtid_mode='ON';

Query OK,0 rows affected (0.00sec)

查看主库与从库的GTID是否开启

mysql> show variables like "%gtid%";+----------------------------------+-----------+

| Variable_name | Value |

+----------------------------------+-----------+

| binlog_gtid_simple_recovery | ON |

| enforce_gtid_consistency | ON |

| gtid_executed_compression_period | 1000 |

| gtid_mode | ON |

| gtid_next | AUTOMATIC |

| gtid_owned | |

| gtid_purged | |

| session_track_gtids | OFF |

+----------------------------------+-----------+

8 rows in set (0.00sec)

mysql> show variables like '%gtid_next%';+---------------+-----------+

| Variable_name | Value |

+---------------+-----------+

| gtid_next | AUTOMATIC |

+---------------+-----------+

1 row in set (0.00sec)

备份常用指令/usr/local/mysql/bin/mysqldump --all-databases --single-transaction --master-data=2 --set-gtid-purged=off -F --triggers --routines --events --user=root -p --socket=/data/mysql3306/logs/mysql.sock > all111_0423.sql

所需命令

2.导入从库(从库开启gtid)

3.主1创建授权同步用户

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

在MySQL主服务器上创建

mysql> grant replication slave on *.* to 'repl'@'192.168.2.%' identified by '000000';

mysql> flush privileges;

所需命令

4.从库指定主库

CHANGE MASTER TO MASTER_HOST='xxxxx',MASTER_USER='xxxx',MASTER_PASSWORD='xxxx',MASTER_AUTO_POSITION=1;

start slave;

show slave status \G 查看是否两个yes

如果有报错 就去查看errorlog

这里我做的时候出现一个错误

我把root删除了,创建了新的特权用户 结果就报错如下

018-04-24T14:55:06.459876+08:00 25 [ERROR] Slave SQL for channel '': Error 'Operation ALTER USER failed for 'root'@'localhost'' on query. Default database: ''. Query: 'ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2'', Error_code: 1396

然后我把root加回来后 就可以了

好处就是 不用再关心日志的位置,gtid会自己去寻找位置进行同步,多省心。

还有个需求

从库需要切换主库

1.首先查看主库的binlog日志 是否全完整,是否连续

因为从库从主库同步的时候,得利用binlog日志,日志都没了,从库咋同步

如果确定日志全呢  直接进行上边的 步骤3和4即可

否则 按照上边的流程 重新来一遍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值