GTID是基于mysql事务实现的,若是对mysql事务没啥概念的话,建议先看看html
『浅入深出』MySQL 中事务的实现mysql
不在单独说明如何搭建mysql单点 请参考linux
而后再看这个gtid的服务器
https://www.hi-linux.com/posts/47176.htmlsession
如今有这样一个需求:socket
主1mysql 是个单点的mysql库,库里有不少数据,想给主1增长个从库,而且使用gtid ide
具体操做能够在https://www.hi-linux.com/posts/47176.html 里寻找post
思路以下:spa
1.备份主1的数据或者拿主1最新的备份(主1已经开启gtid)
经过配置文件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.01 sec) mysql> set global gtid_mode='ON_PERMISSIVE'; Query OK, 0 rows affected (0.01 sec) mysql> set global enforce_gtid_consistency=ON; Query OK, 0 rows affected (0.00 sec) mysql> set global gtid_mode='ON'; Query OK, 0 rows affected (0.00 sec) 查看主库与从库的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.00 sec) mysql> show variables like '%gtid_next%'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | gtid_next | AUTOMATIC | +---------------+-----------+ 1 row in set (0.00 sec) 备份经常使用指令 /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建立受权同步用户
在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便可
不然 按照上边的流程 从新来一遍