Mysql配置主從復制-GTID模式詳解
主從復制
主從復制的定義
是指把數(shù)據(jù)從一個Mysql服務器(主節(jié)點)復制到一個或多個Mysql服務器(從節(jié)點)中,會把主節(jié)點服務器中的所有數(shù)據(jù)庫實例、特定數(shù)據(jù)庫實例或特定表等,全部復制到從節(jié)點服務器中。
主從復制的原理
是通過基于日志的復制方式實現(xiàn)數(shù)據(jù)的同步。當主服務器上發(fā)生數(shù)據(jù)變更時,會將這些變更寫入二進制日志(Binary Log)中。
從服務器通過連接到主服務器,請求從主服務器獲取二進制日志,并將這些日志應用到自己的數(shù)據(jù)庫中。
主從復制的優(yōu)勢
- 提高讀性能:通過設置從服務器(Slave),讀操作可以被分攤到主服務器(Master)和從服務器上,從而提高整體的讀取性能。主服務器負責處理寫操作,從服務器負責處理讀操作,從而降低主服務器的負載,提升整個系統(tǒng)的吞吐量。
- 數(shù)據(jù)冗余和備份:通過主從復制,從服務器上的數(shù)據(jù)是主服務器的冗余副本。在主服務器發(fā)生故障時,從服務器仍然可以提供服務,并且可以通過將某個從服務器提升為新的主服務器來快速恢復服務。此外,從服務器也可以用于定期的備份操作,以確保數(shù)據(jù)的安全性和可恢復性。
- 高可用性:通過主從復制,可以實現(xiàn)數(shù)據(jù)庫的故障轉(zhuǎn)移和高可用性。當主服務器發(fā)生故障時,可以手動或自動將某個從服務器提升為新的主服務器,繼續(xù)提供數(shù)據(jù)庫服務,從而實現(xiàn)快速的故障恢復。
- 數(shù)據(jù)分析和報表生成:由于從服務器可以處理讀操作,可以將其用于數(shù)據(jù)庫的數(shù)據(jù)分析和報表生成等工作。這樣可以避免對主服務器造成額外的負載,同時提供實時的數(shù)據(jù)分析和報表服務。
- 數(shù)據(jù)分發(fā)和跨地域部署:主從復制可以用于將數(shù)據(jù)分發(fā)到不同的地理位置的從服務器上,從而實現(xiàn)跨地域的數(shù)據(jù)訪問和部署。這對于全球化的應用程序和多地域災備是非常有用的。
- 架構的擴展。業(yè)務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問的頻率,提高單個機器的I/O性能。
主從復制的形式
- 一主一從;
- 一主多從;
- 多主一從;
- 雙主復制;
- 級聯(lián)復制。
主從復制的模式
- 異步模式(默認);
- 半同步模式;
- 全同步模式。
主從復制的類型
基于二進制日志復制(有三種形式)
- 基于SQL語句的復制;
- 基于行的復制;
- 混合模式復制。
基于GTID復制(Mysql版本 >= 5.7及以上推薦使用)
GTID模式
GTID的概念
- GTID即全局事務ID:global transaction identifier;
- GTID是一個事務一一對應,并且全局唯一ID;
- 一個GTID在一個服務器上只執(zhí)行一次,避免重復執(zhí)行導致數(shù)據(jù)混亂或者主從不一致;
- GTID用來代替?zhèn)鹘y(tǒng)復制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS開啟復制。 而是使用MASTER_AUTO_POSTION=1的方式開始復制;
- MySQL-5.6.5開始支持的,MySQL-5.6.10后開始完善;
- 在傳統(tǒng)的slave端,binlog是不用開啟的,但是在GTID中slave端的binlog是必須開啟的,目的是記錄執(zhí)行過的GTID(強制)。
GTID的優(yōu)勢
- 更簡單的實現(xiàn)failover,不用以前那樣在需要找log_file和log_pos;
- 更簡單的搭建主從復制;
- 比傳統(tǒng)的復制更加安全;
- GTID是連續(xù)的沒有空洞的,保證數(shù)據(jù)的一致性,零丟失。
GTID的原理
- 當一個事務在主庫端執(zhí)行并提交時,產(chǎn)生GTID,一同記錄到binlog日志中;
- binlog傳輸?shù)絪lave,并存儲到slave的relaylog后,讀取這個GTID的這個值設置gtid_next變量,即告訴Slave,下一個要執(zhí)行的GTID值;
- sql線程從relay log中獲取GTID,然后對比slave端的binlog是否有該GTID;
- 如果有記錄,說明該GTID的事務已經(jīng)執(zhí)行,slave會忽略;
- 如果沒有記錄,slave就會執(zhí)行該GTID事務,并記錄該GTID到自身的binlog,在讀取執(zhí)行事務前會先檢查其他session持有該GTID,確保不被重復執(zhí)行;
- 在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果沒有就用全部掃描。
GTID的配置
Mysql主服務器
1、在Mysql的my.ini配置文件中添加以下參數(shù):
gtid_mode=ON enforce_gtid_consistency=true server_id=1 log-bin=mysql-bin binlog_format=row log-slave-updates=1
2、重啟Mysql和創(chuàng)建復制用戶
使用管理員打開cmd命令窗口,按照以下命令步驟分別執(zhí)行:
#暫停服務; net stop mysql #開啟服務; net start mysql #連接數(shù)據(jù)庫,Password替換為自己數(shù)據(jù)庫密碼; mysql -u root -pPassword #創(chuàng)建一個用于復制的用戶,userName和Password自行設置; CREATE USER 'userName'@'%' IDENTIFIED BY 'Password'; #授予復制權限,userName即上步創(chuàng)建的用戶名; GRANT REPLICATION SLAVE ON *.* TO 'userName'@'%'; #獲取狀態(tài),記住File和Position兩項參數(shù),后面需要用到; SHOW MASTER STATUS;
Mysql從服務器
1、在Mysql的my.ini配置文件中添加以下參數(shù):
gtid_mode=ON enforce_gtid_consistency=true server_id=1 log-bin=mysql-bin binlog_format=row log-slave-updates=1
2、重啟Mysql和創(chuàng)建復制用戶
使用管理員打開cmd命令窗口,按照以下命令步驟分別執(zhí)行:
#暫停服務; net stop mysql #開啟服務; net start mysql #連接數(shù)據(jù)庫,Password替換為自己數(shù)據(jù)庫密碼; mysql -u root -pPassword #配置復制,serverIP是主服務器IP地址,userName和password是剛在主服務器創(chuàng)建的用戶,file和position是剛查看主服務器狀態(tài)返回的參數(shù); CHANGE MASTER TO MASTER_HOST='serverIP', MASTER_USER='userName', MASTER_PASSWORD='password', MASTER_LOG_FILE='file', MASTER_LOG_POS=position; #啟動復制; START SLAVE; #查看復制狀態(tài),輸出中的Slave_IO_Running和Slave_SQL_Running的值為Yes,表示復制正在正常運行; SHOW SLAVE STATUS\G;
到這里就結束了,可以在Mysql主服務器中進行添加、修改、刪除操作,測試從服務器中的數(shù)據(jù)是否保持一致。
注意:從服務器只允許進行查詢,不可以進行添加、修改、刪除等改變數(shù)據(jù)的操作,否則會導致復制狀態(tài)失效。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL explain根據(jù)查詢計劃去優(yōu)化SQL語句
MySQL是一種常見的關系型數(shù)據(jù)庫管理系統(tǒng),常被用于各種應用程序中存儲數(shù)據(jù),當涉及到大量的數(shù)據(jù)時,就需要MySQL的explain功能來幫助優(yōu)化,本文將詳細介紹MySQL的explain功能,感興趣的朋友可以參考閱讀2023-04-04獲取MySQL數(shù)據(jù)表列信息的三種方法實現(xiàn)
本文介紹了獲取MySQL數(shù)據(jù)表列信息的三種方法實現(xiàn),包含SHOWCOLUMNS命令、DESCRIBE命令以及查詢INFORMATION_SCHEMA.COLUMNS表,具有一定的參考價值,感興趣的可以了解一下2024-12-12