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便可
不然 按照上邊的流程 從新來一遍