前提條件
- 準備3,4,5臺虛擬機器
- 祼裝mysql8.0
主從架構
常見兩種模式“一主多從”和“級聯複製”兩種,基本都很簡單,都是依賴binlog日誌檔案進行同步,binlog日誌會記錄DDL和部分DDL語句,進行同步時從庫會重新執行這些語句從而實現主從同步。
步驟1:
配置主/從伺服器的server_id
,如果不清楚mysql伺服器server_id,使用命令 SHOW VARIABLES LIKE 'server_id';
可以查詢,server_id的值沒有嚴格規定,保證全域性唯一性即可,server_id值預設是1。
debian伺服器編輯命令如下:nano /etc/mysql/my.conf ,加入下面節點,假設主庫設定1,從庫設定2,儲存之後重啟資料庫systemctl restart mysql
[mysqld]
server-id=1 #主庫配置加入
[mysqld]
server-id=2 #從庫配置加入
步驟2(非必要):
主機上執行 show master status;
顯示最新的日誌檔案和當前位置。
File當前正在寫入的二進位制日誌檔名。
Position當前二進位制日誌檔案的偏移量,表示下一個要寫入的位置。
Binlog_Do_DB主伺服器上配置的需要記錄到二進位制日誌中的資料庫。
Binlog_Ignore_DB主伺服器上配置的不需要記錄到二進位制日誌中的資料庫。
Executed_Gtid_Set在 GTID 模式下,該屬性表示已經執行過的全域性事務識別符號的集合
步驟3:
從伺服器連線主伺服器進行主從同步,在從伺服器上面執行如下程式碼:
CHANGE REPLICATION SOURCE to
SOURCE_HOST='192.168.3.107',
SOURCE_USER='root',
SOURCE_PASSWORD='1234',
SOURCE_LOG_FILE='binlog.000009',
SOURCE_LOG_POS=0;
SOURCE_HOST:主庫連線地址
SOURCE_USER:賬號
SOURCE_PASSWORD:密碼
SOURCE_LOG_FILE:主庫當前二進位制檔名
SOURCE_LOG_POS:當前二進位制日誌檔案的偏移量
執行完成之後可以透過show REPLICA status;
可以檢視複製叢集狀態,透過如下命令可以啟動,暫停,刪除叢集。
show REPLICA status; #檢視
start REPLICA; #開始
stop REPLICA; #暫停
RESET REPLICA ALL; #刪除
透過設定SOURCE_HOST地址連線主庫或從庫,就可以輕鬆實現一主多從,或一主一從一從的鏈式架構。
GTID 模式(推薦)
主從複製中mysql提供一種GTID 模式,SHOW GLOBAL VARIABLES LIKE 'gtid_mode';
檢視Gtid模式的狀態。gtid是一種新的日誌格式,gtid每個事務都有一個唯一的GTID,保證了事務在整個複製拓撲中的唯一性,主要與傳統日誌格式區別就是以事務為單位而傳統日誌是基於日誌位置。
RESET MASTER;
重置主庫的binlog日誌,注意一旦重置日誌將丟失所有日誌資料,將從00001開始,編輯nano /etc/mysql/my.cnf
,各個資料庫的server_id按1-5排序下去,主庫和從庫都需要配置。
[mysqld]
server-id=1
gtid_mode=on
enforce_gtid_consistency=true
gtid_mode:開啟gtid模式。
enforce_gtid_consistency:強制GTID一致性,這有助於提高資料的可靠性和一致性,防止資料丟失或損壞。
從庫執行如下程式碼:
CHANGE REPLICATION SOURCE to
SOURCE_HOST='192.168.3.107',
SOURCE_USER='root',
SOURCE_PASSWORD='123',
SOURCE_AUTO_POSITION=1;
你會發現SOURCE_LOG_FILE和SOURCE_LOG_POS將不再需要填寫,因為gtid的好處之一就是會自動定位日誌檔案和位置,減少配置複雜性。其它的叢集管理與傳統的命令一致。
#主庫常用命令
show master status #檢視主庫狀態
reset master; #重置主庫binlog日誌
#從庫常用命令
show replica status; #檢視從庫狀態
start replica; #開始同步
stop replica; #暫停同步
reset replica all; #重置(刪除)全部同步
select * from performance_schema.replication_applier_status_by_worker; #檢視同步執行緒的資訊(主要用於檢視具體報錯資訊)
#其它
show variables like 'server_id'; #檢視server_id
show global variables like 'gtid_mode'; #檢視gtid狀態
更多系列文章
構建高效能,可伸縮,高可用,安全,自動化,可溯源,整體式應用構架體系