1. 程式人生 > >MySQL複製(非同步方式、半同步方式、GTID)總結

MySQL複製(非同步方式、半同步方式、GTID)總結

這是之前做的筆記,整體有些凌亂,後續有時間再整理一下格式!!!! 非同步複製:在主節點寫入日誌即返回成功,預設情況下MySQL5.5/5.6/5.7和mariaDB10.0/10.1的複製功能是非同步的。非同步複製可以實現最佳的效能,主庫把binlog日誌傳送給從庫,這一動作就結束了,並不驗證從庫,會造成主從庫資料不一致。半同步複製:一主多從模式下,有一個從節點返回成功,即成功,不必等待多個節點全部返回。MySQL半同步,MySQL5.5由Google貢獻的補丁才開始支援半同步複製(semi Replication)模式,該模式可以確保從伺服器接收完主伺服器傳送的binlog日誌檔案並寫入自己的中繼日誌(relay log)裡,然後會給主伺服器一個反饋,告訴對方已經接收到完畢,這時主庫執行緒才返回當前session告知操作完成,當出現超時情況時,源主伺服器會暫時切換到非同步複製模式,直到至少有一臺設定為半同步複製模式的從伺服器及時收到資訊為止。
※主從同步可以同步多個數據庫,也可以設定為一個數據庫同步,如果設定一個數據庫,在從伺服器上其他資料可以寫操作。※半同步複製模式在主伺服器和從伺服器同時啟用,否則主伺服器預設使用非同步複製模式。MySQL非同步複製的配置:① master伺服器1、啟用二進位制日誌log-bin=master-bin.log2、選擇一個唯一的server-idserver-id=(0-2^31-1) 我要求配置的iP+port3、建立一個具有複製許可權的使用者CREATE USER 'slave_user'@'slave_host' IDENTIFIED BY 'slave_pass';GRANT REPLICATION SLAVE ON *.* TO
'slave_user'@'slave_host'
顯示從伺服器同步的狀態:SHOW MASTER STATUS;※連線至主伺服器上通過SHOW MASTER STATUS 語句確定其當前的複製座標。執行這個命令顯示File和Position的值,因為還需要用它們,以便能夠把主伺服器讀取二進位制位置時間的起始位置告知從伺服器② slave伺服器1、啟用中繼日誌relay-log=2、選擇一個唯一的server-idserver-id=(0-2^31-1)(必須唯一,避免衝突,我要求配置的iP+port3、連線至主伺服器,進行復制CHANGE MASTER TO MASTER_HOST='',MASTER_PORT='',
--※主伺服器沒有使用預設埠需要埠命令指定
MASTER_USER='',MASTER_PASSWORD='',MASTER_LOG_FILE='',MASTER_LOG_POS='';4、從伺服器開始複製,然後檢視從服務執行狀態START SLAVE;show slave status\G;========================================================================半同步複製方式:(MySQL5.5版本時谷歌提供的補丁)半同步複製的安裝配置半同步複製外掛在(通用二進位制方式安裝)/usr/local/mysql/lib/plugin1、在master和slave庫首次啟動時,安裝外掛,並開啟半同步複製:mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';mysql>set global repl_semi_sync_master_enabled=ON;2、在從節點上執行下列命令,啟用半同步複製操作mysql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';mysql>set global repl_semi_sync_slave_enabled=ON;在初次載入外掛後,MySQL會將該外掛記錄到系統表mysql.plugin中,下次啟動時系統會自動載入該外掛,無需再次執行上邊命令,另外再my.cnf檔案中配置加入以下命令:repl_semi_sync_master_enabled=1repl_semi_sync_slave_enabled=1這樣以後啟動MySQL時就會自動開啟半同步複製功能。引數說明:半同步複製引數配置較少,其中在master主庫上4個相關引數,如下:rpl_semi_sync_master_enabled=ON -- 表示master主庫上已經開啟半同步複製模式 rpl_semi_sync_master_timeout=10000 --該引數為10000毫秒,即10秒,不過,這個引數是動態動態可調,表示如果主庫在某次十五中的等待時間超過10秒,則降級為非同步複製模式,不在等待slave從庫,如果主庫再次探測slave從庫恢復,則會自動回到半同步複製模式rpl_semi_sync_master_wait_no_slave --預設開啟,表示是否允許master每個事務提交後都要等待slave的接收確認訊號,預設為ON,即每一個事務都要等待,如果為OFF,則slave追趕上後,也不會開啟半同步複製模式,需要手工開啟。rpl_semi_sync_master_trace_level=32 --表示用於開啟半同步複製模式時的除錯級別rpl_semi_sync_master_wait_for_slave_countrpl_semi_sync_master_wait_point rpl_stop_slave_timeout =============================================================================從庫引數:rpl_semi_sync_slave_enabled =ON --表示slave開啟半同步複製模式,rpl_semi_sync_slave_trace_level=32 --表示用於開啟半同步複製模式的除錯級別,預設32rpl_stop_slave_timeout 半同步複製功能配置:1、在master庫上匯出一份全量資料:mysqldump -uroot -p123456 -q --single-transaction --master-data=2 -A > alldata.sql2、把主庫拷貝到從庫,在slave庫上執行匯入3、在從庫上建立主從關係,(master_log_file和master_log_pos的值使用命令:show master status;檢視)[email protected] [(none)]> change master to master_host='192.168.0.104',master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=107;[email protected] [(none)]>start slave; ※還可以分別單獨啟動IO執行緒和SQL執行緒, start slave io_thread;start slave sql_thread;建立主從複製,並開啟同步複製驗證半同步複製模式是否已經開始工作了?可以在master主庫檢視狀態:show status like '%semi%';在slave從庫上檢視狀態,show status like '%semi%';Rpl_semi_sync_slave_status --用於顯示從伺服器是否啟動半同步複製模式,如果狀態值為ON,則表示半同步複製模式已經開始工作=================================================================================================GTID複製模式GTID複製:(global transaction id 全域性事務識別符號) MySQL5.6版本開始支援GTID複製不像傳統的複製方式(非同步複製、半同步複製)需要找到binlog(MASTER_LOG_FILE)和POS點(MASTER_LOG_POS),只需要知道master的IP、埠、賬號、密碼即可。因為複製是自動的,MySQL會通過內部機制GTID自動找點同步。GTID複製名詞釋義:1、server-id:伺服器身份id,在初始化MySQL時,會自動生成一個server-id並寫到資料目錄的auto.cnf檔案中,官方不建議修改,並且server-id跟GTID有密切關係。2、GTID:全域性事務識別符號,使用這個功能時,內次事務提交都會在binlog裡生成一個唯一的識別符號,它由UUID和事務ID組成,首次提交的事務為1,第二次為2,第三次為3,以此類推開啟GTID,無需找到binlog和POS點,直接change master to master_auto_postion=1即可,它會自動尋找同步GTID工作流程:1、在master上一個事務提交,並寫入binlog裡。2、binlog日誌傳送到slave,slave接收並寫入中繼日誌裡,slave讀取到這個GTID,並設定gtid_next的值。例如set @@session。gtid_next='=fbd841f9-5590-11e8-b819-000c29e6461e';然後告訴slave接下來的事務必須使用GTID,並寫入它自己的binlog裡。3、slave檢查並確認這個GTID沒有被使用,如果沒有被使用,那麼開始執行這個事務並寫入自己的binlog裡4、由於gtid_next的值不為空,slave不會嘗試去生成一個新的gtid而是通過主從同步來獲取GTID如果設定MySQL5.6GTID方式的主從同步呢?在master和slave上,需要同時在my.cnf檔案中加入以下內容:log_bin=mysql-bin --開啟二進位制日誌binlog_format=row --二進位制日誌格式log_slave_updates=1 --開啟二進位制日誌gtid_mode=ON --開啟gtid模式enforce_gtid_consistency=ON --開啟強制gtid一致性功能==================================================================================然後在master上匯出:mysqldump -uroot -p123456 -q --single-transaction -R -E --triggers --default-character-set=utf-8 --master-data=2 -B yourDB >/yourDB.sqlCHANGE MASTER TO MASTER_HOST='master2.example.com', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_AUTO_POSITION=1;change master to master_host='192.168.0.104',master_user='root',master_password='123456',master_port=3306,master_auto_position=1;※注意:如果使用GTID,就不能在使用傳統的binlog和POS方式,否則會報錯。1、GTID同步複製是基於事務的,所以myisam表不支援,這可能導致多個GTID分配給同一個事務2、不支援create table ……select語句,因為該語句會被拆分成create table和insert兩個事務,並且,如果這兩個事務被分配同一個GTID,則會導致insert被備庫忽略掉。(如下圖所示:)主庫上執行show slave hosts; --檢視有哪些從庫繫結主庫。sync_master_info --啟用可以確保無資訊丟失master_info_repository、relay_log_info_repository --啟用這兩項崩潰時,二進位制及從伺服器安全的功能binlog_checksum、master_verify_checksum、slave_sql_verify_checksum --啟用有關複製的所有校驗。binlog_rows_query_log_events --啟用可用於在二進位制日誌記錄事件相關的資訊,可降低故障排除的複雜度。slave_parallel_workers --多執行緒複製(從伺服器配置。預設是0,表示禁用多執行緒功能)簡單的主從複製配置:1、master節點配置[mysqld]binlog_format=rowlog_bin=mysql-bin.loglog_slave_updates=1|ON|true --MySQL5.6,必須配置此引數,因為需要在binlog找到同步複製的資訊,5.7版本不建議啟用此配置※開啟log_slave_updates引數,是吧relay-log裡的日誌內容再記錄到slave本地的binlog裡,在MySQL5.7,官方進行了調整,用一張gtid_executed系統表記錄同步複製的資訊,這樣就不用開啟log_slave_updates引數,避免兩次IO儲存relay-log和主庫的binlog,減少了從庫的壓力。gtid_mode=ONenforce_gtid_consistency=ON master_info_repository=tablerelay_log_info_repository=tablesync_master_info=1slave_parallel_workers=2binlog_checksum=CRC32master_verify_checksum=1slave_sql_verify_checksum=1binlog_rows_query_log_events=1server_id=1033306#report_port=3306#report_host=2、slave節點配置1.2、配置slave節點:[mysqld]binlog_format=ROWlog_slave_updates=truegtid_mode=on enforce_gtid_consistency=truemaster_info_repository=TABLErelay_log_info_repository=TABLEsync_master_info=1slave_parallel_workers=2binlog_checksum=CRC32master_verify_checksum=1slave_sql_verify_checksum=1binlog_rows_query_log_events=1server_id=1043306#report_port=3306#log_bin=mysql-bin.log#report_host=relay_log_recovery=1 MySQL5.5或mariadb10.0版本開始,增加了relay_log_recovery引數,這個引數的作用是:當slave從庫宕機後,假如relay_log損壞,導致一部分中繼日誌沒有處理,則自動放棄未執行的relay-log,並且重新從master上獲取日誌,這樣就保證了relay_log的完整性,預設是關閉的,將relay_log_recovery的值設定為1市可在slave上開啟該功能,建議開啟。=====================================================================================================2、建立複製使用者mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected] IDENTIFIED BY '123123';3、為備節點提供初始資料集鎖定主表,備份主節點上的資料,將其還原至從節點;如果沒有啟用GTID,在備份時需要在master上使用show master status命令檢視二進位制日誌檔名稱及事件位置,以便後面啟動slave節點時使用。4、啟動從節點的複製執行緒如果啟用了GTID功能,則使用如下命令:mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.104', MASTER_USER='zhang', MASTER_PASSWORD='123123', MASTER_AUTO_POSITION=1;總結:MySQL版本複製延遲:MySQL5.5:延遲較大MySQL5.6:一庫一執行緒 等於沒解決MySQL5.7:一組一執行緒,gtid 徹底解決。slave_parallel_workers=設定執行緒數(最大1024個)slave_parallel_type=logical_clock(基於表的組提交併行復制),預設值為database(基於庫複製)--設定從伺服器只讀模式 全域性設定 set global read_only=1|ON|truevim /etc/my.cnf read_only=1 ※只讀模式對具有super許可權的使用者來說沒有作用。※ 在MySQL5.7版本新曾參數,super_read_only,用於設定super許可權的使用者禁止寫操作。[email protected] [(none)]>show variables like 'read_only';+---------------+-------+| Variable_name | Value |+---------------+-------+| read_only | OFF |+---------------+-------+1 row in set (0.01 sec)MySQL複製流程:非同步:客戶請求-》master產生binlog-》客戶請求成功半同步:客戶請求-》master產生binlog-》IO傳輸給slave-》slave產生中繼日誌-》master收到slave已成功產生中繼日誌的訊息-》客戶請求成功同步:客戶請求-》master產生binlog-》IO傳輸給slave-》slave產生中繼日誌-》SQL執行緒重演日誌-》master收到slave已成功產生中繼日誌的訊息-》客戶請求成功

相關推薦

MySQL複製非同步方式同步方式GTID總結

這是之前做的筆記,整體有些凌亂,後續有時間再整理一下格式!!!! 非同步複製:在主節點寫入日誌即返回成功,預設情況下MySQL5.5/5.6/5.7和mariaDB10.0/10.1的複製功能是非

資料傳輸方式並行/序列通訊;同步/非同步;單工雙工全雙工

資料傳輸主要有三種不同的劃分方式。 並行/序列通訊; 同步/非同步傳輸; 按資料的不同傳輸方向可分為單工、半雙工、全雙工。 1.並行通訊和序列通訊 (1)並行通訊 並行通訊是同時傳送資料的各個位進行傳送or接收的通訊方式。 傳輸率比序列介面快8倍,理論值為1Mbits/s. 傳輸的資訊不

MySQL主從複製原理同步操作步驟及原理

1.1 企業Linux運維場景資料同步方案 1.1.1 檔案級別的異機同步方案 1、scp/sftp/nc 命令可以實現遠端資料同步。  2、搭建ftp/http/svn/nfs 伺服器,然後在客戶端上也可以把資料同步到伺服器。  3、搭建sa

mysql主從複製,基於GTID的主從同步複製並行複製

環境: 實驗環境: rhel6.5 , selinux和iptables均為disabled狀態,mysql均為5.7.17,或者slave比master版本高 實驗主機: 172.25.254.2 server2:master 172.25.254.3 server3:s

Mysql主從複製同步複製並行複製

一、主從複製 1.主從複製原理 MySQL之間資料複製的基礎是二進位制日誌檔案(binary log file)。一臺MySQL資料庫一旦啟用二進位制日誌後,其作為master,它的資料庫中所有操作都會以“事件”的方式記錄在二進位制日誌中,其他資料庫作為

Mysql實現數據庫主從復制主主復制同步復制

mysql 數據庫復制 主主復制 主從復制 半同步復制 --------------Mysql實現數據庫主從復制架構----------------一、環境準備:centos系統服務器2臺、一臺用戶做Mysql主服務器,一臺用於做Mysql從服務器,配置好yum源、防火墻關閉、各節點時鐘服

配置mysql5.5主從複製同步複製主主複製

mysql主伺服器 192.168.8.40 mysql從伺服器 192.168.8.41 全新配置過程(主和從資料庫都沒有資料):    主從複製主伺服器設定:      1.改server-id      2.啟用二進位制日誌      # mkdir /data/b

MySQL5.7主從複製,基於GTID主從複製同步複製同步解析

一、主從複製 1.環境 系統:redhat6.5 防火牆:保持關閉 selinux=disabled mysql主機:server1 172.25.32.4/24 mysql從機:server2 172.25.32.5/24 2.MySQL

MYSQL 完全備份主從復制級聯復制同步

-a 不返回 數據庫分離 rm -rf 是否 sin ice 備份數據庫 var mysql 完全備份 1,啟用二進制日誌,並於數據庫分離,單獨存放 vim /etc/my.cnf 添加 log_bin=/data/bin/mysql

基於MySQL實現數據庫的同步主從復制

mysql、半同步、主從架構 首先我們來了解一下數據庫常遇到的問題: 第一就是性能上的問題1、向上拓展(硬件方面) scale up 個體本身 容易達到極限 2、向外拓展 scale out 第二就是可用性的問題1、數據庫服務中斷 2、誤操作數據損壞 3、硬件故障 4、數據庫升級測試

MySQL壓測--異步與同步復制

form hit eip ble -- cee binlog ast first 最近在看MySQL5.7 Manual,有關Semisynchronous Replication這一塊的內容,我們知道,MySQL默認的Replication是異步的,何為異步?何為半同

sql數據庫發布訂閱同步方式操作

數據 代理 傳輸 sel 操作 sqlserve tro 無法遠程 右鍵 Sql數據庫發布訂閱分為兩個步驟:1、發布。2、訂閱。首先在數據源數據庫服務器上對需要同步的數據進行發布,然後在目標數據庫服務器上對上述發布進行訂閱。 一、發布。 發布需要用實際的服務器名稱,不能

【stark_summer的專欄 】專注於開發分散式任務排程框架分散式同步RPC、非同步MQ訊息佇列分散式日誌檢索框架hadoopsparkscala等技術 如果我的寫的文章能對您有幫助,請您能給點捐助,請看首頁置頂

專注於開發分散式任務排程框架、分散式同步RPC、非同步MQ訊息佇列、分散式日誌檢索框架、hadoop、spark、scala等技術 如果我的寫的文章能對您有幫助,請您能給點捐助,請看首頁置頂...

一文讀懂監督學習無監督學習監督學習強化學習這四種深度學習方式

 一般說來,訓練深度學習網路的方式主要有四種:監督、無監督、半監督和強化學習。在接下來的文章中,計算機視覺戰隊將逐個解釋這些方法背後所蘊含的理論知識。除此之外,計算機視覺戰隊將分享文獻中經常碰到的術語,並提供與數學相關的更多資源。 監督學習(Supervised

支付非同步通知notify_url 與 同步通知return_url的區別

同步通知和非同步通知傳送的資料沒有本質的區別;同步通知有2個作用;第一是從支付寶的頁面上返回自己的網站繼續後續操作;第二是攜帶支付狀態的get引數;讓自己的網站用於驗證;同步通知後

結繩法:文章詳細解讀非同步時鐘設計的同步策略

一.典型方法(雙鎖存器法)    典型方法即雙鎖存器法,第一個鎖存器可能出現亞穩態,但是第二個鎖存器出現亞穩態的機率已經降到非常小,雙鎖存器雖然不能完全根除亞穩態的出現(事實上所有電路都無法根除,只能儘可能降低亞穩態的出現),但是基本能夠在很大程度上減小這種機率

關於無人機的自穩自穩手動模式的區別

strong ron 打了 控制 繼續 區別 關於 可能 就是 手動模式:在此模式下,飛行器不會隨著Roll、Pitch、Yaw的搖桿後回中的時候自動恢復中間位置。例如打了Roll搖桿向左後,再把Roll搖桿回中,而飛行器還是繼續向左橫滾而不會恢復水平,只有把Roll搖桿打

關於結構化結構化非結構化資料的理解

記得在課上,老師說,結構化資料就是我們關係資料庫裡的表,剩下的都是半結構化和非結構化資料,好比XML文件就是半結構化資料,WORD文件就是非結構化資料,大資料就是半結構化和非結構化資料。心中一直有一個疑問?難道大資料不應該包含結構化資料嗎?實在學習資料庫這門課時,就對這幾個概

通訊傳輸,全雙工雙工單向

CAN匯流排是半雙工通訊方式,CAN是控制器區域網絡(Controller Area NetWork)。目的是位了節省接線的工作量。CAN協議也遵循ISO/OSI模型,採用了其中的物理層、資料鏈路層與應用層。CAN採用多主工作方式,節點之間不分主從,但節點之間有優先順序之分,通訊方式靈活,可實現點對點、一點

DataTable.DataRow的複製解決:此行已屬於另一個表

經常遇到這種錯誤,“此行已屬於另一個表”的錯誤,導致這個錯誤的語句如下: dtPriceTable.Rows.InsertAt(aDataRow,i); 或者 dtPriceTable.Rows.Add(aDataRow); 我分析了一下原因,因為DataRow