GTID是基於mysql事務實現的,如果對mysql事務沒啥概念的話,建議先看看
不在單獨說明如何搭建mysql單點 請參考
然后再看這個gtid的
https://www.hi-linux.com/posts/47176.html
現在有這樣一個需求:
主1mysql 是個單點的mysql庫,庫里有很多數據,想給主1增加個從庫,並且使用gtid
具體操作可以在https://www.hi-linux.com/posts/47176.html 里尋找
思路如下:
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即可
否則 按照上邊的流程 重新來一遍