MySQL 5.7基於GTID的主從複製實踐

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

『淺入深出』MySQL 中事務的實現mysql

不在單獨說明如何搭建mysql單點 請參考linux

使用二進制包安裝mysqlsql

而後再看這個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便可

不然 按照上邊的流程 從新來一遍

相關文章
相關標籤/搜索