MySQL 5.7基於GTID的主從復制實踐


GTID是基於mysql事務實現的,如果對mysql事務沒啥概念的話,建議先看看

『淺入深出』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即可

否則 按照上邊的流程 重新來一遍

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM