mysql repilcation troubleshooting基礎知識點
所需程式
Master上需要dump,slave需要IO和SQL執行緒;
Dump讀取master binlog併傳送給slave,每個slave對應1個;
Slave端的IO讀取master傳來的內容並寫入relay log,sql執行緒讀取relay log並解析成sql應用於slave;
連線引數
Slave-net-timeout
如超過此時間無相應則slave認定連線超時 ,預設3600s
Master-connect-retry
兩次重連間隔時間,預設60s
Master-retry-count
重連次數 ,預設86400
為何引入relay log?
類似oracle的standby redo,Mysql replication採用的是非同步機制,slave將event暫時儲存relay log,而master 無需等待slave同步執行完就可以傳送下一個event;
何時切換
Master binlog切換一次relay log就隨著切換一次;
IO執行緒重啟;
Flush logs;
達到max_relay_log_size限制,如果此值為0,則以max_binlog_size為準;
relay-log.info && master-log.info
中繼日誌透過這兩個檔案來跟蹤複製進度;
Master-log.info記錄連線master的資訊(host/user/password/port)以及master log的讀取位置read_master_log_pos;
Slave IO啟動時會讀取該檔案內容;
Relay-log.info則由slave sql執行緒維護,包含relay log的基本資訊以及執行位置exec_master_log_pos,由此決定下一個要執行的事件;
這兩個檔案由relay-log-info-file/master-info-file指定,預設名如上;
只有執行start slave,這兩個檔案才會被建立,此後的每次slave重啟,都會從這兩個檔案獲取複製/執行進度;
如果relay log丟失但是relay-log.info還在,便可以檢視當前sql執行緒的進度,透過change master to讓slave從master重新讀取相應bin log
Show salve status
Read_master_log_pos:I/O程式讀取到master的binary log的位置
Exec_master_log_pos:sql程式執行到的master binary log位置,如果有延遲則會落後於read_master_log_pos
Seconds_behind_master:即使此引數為0,也不一定意味著slave已經同步,比如主備之間的網路斷開但IO執行緒還未察覺,即slave_net_timeout尚未計時;
透過比較read_master_log_pos和exec_master_log_pos,可以確認是否有事件等待執行;
Slave上與複製有關的執行緒包括I/O thread和sql thread
I/O執行緒錯誤
引數log_warnings=1(預設)會記錄I/O執行緒的錯誤
有幾種常見可能
1
主庫上的user沒有replication slave許可權
2
網路無法連線
使用ping命令檢視OS是否正常;
telnet master_host port檢視mysql是否啟動;
遠端連線master,mysql –h host –p port -uUser –p檢驗密碼是否正確,成功後查詢select user(), current_user()--避免proxy user或使用其他使用者連線,再執行show grants驗證許可權;
3
頻繁斷線
使用tcpdump/netstat檢查網路
Netstat –a| grep port應該能顯示與master建立的連線
Tcpdump –I en1 host mast_host port 3306
如果lag太大,使用tcpdump或透過複製大檔案的方式檢驗網路
Sql thread只有一個,當master負載繁忙時可能會導致複製延時,當排除以上可能後,只能升級硬體或調優引數,要麼就使用多執行緒sql;
有時sql 執行緒可能會抱錯delay log corrupted,大部分時候是IO執行緒操作引起的,也有可能master上binlog;
此時應使用mysqlbinlog檢查master binlog和delay log,如果前者出錯,手工應用slave,start slave until ,然後檢查主備庫上的表checksum table test;
SQL執行緒錯誤
最常見的是master/slave表結構不一致
如果show slave status顯示的sql文字不全,則需使用mysqlbinlog檢視master的binlog或slave的 relaylog;
Mk-heartbeat
可用於監控replication延遲
首先在master上建立一個名為heartbeat的表,結構如下
CREATE TABLE heartbeat (
ts varchar(26) NOT NULL,
server_id int unsigned NOT NULL PRIMARY KEY,
file varchar(255) DEFAULT NULL, -- SHOW MASTER STATUS
position bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS
relay_master_log_file varchar(255) DEFAULT NULL, -- SHOW SLAVE STATUS
exec_master_log_pos bigint unsigned DEFAULT NULL -- SHOW SLAVE STATUS
);
然後再slave端開啟監控
假定某級聯複製master -> slave1 -> slave2
mk-heartbeat --daemonize -D test --update -h master
mk-heartbeat --daemonize -D test --update -h slave1
監控master到slave2的延遲
mk-heartbeat -D test --master-server-id 1 --check slave2
監控 slave1到slave2的延遲
mk-heartbeat -D test --master-server-id 2 --check slave2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-757959/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【學習】MySQL基礎知識要點-001MySql
- MySQL基礎知識(5)MySql
- MySQL基礎知識(6)MySql
- MySQL基礎知識(7)MySql
- MySQL基礎知識(8)MySql
- MySql基礎知識(2)MySql
- MySQL基礎知識點串講PART01MySql
- MySQL基礎知識點串講PART03MySql
- MySQL 資料庫基礎知識點複習MySql資料庫
- 全面的MySQL基礎運維知識點(二)MySql運維
- 全面的MySQL基礎運維知識點(一)MySql運維
- 全面的MySQL基礎運維知識點(三)MySql運維
- java基礎知識點Java
- JavaWeb基礎知識點JavaWeb
- MySQL基礎知識分享(二)MySql
- MySQL基礎知識分享(一)MySql
- MySQL指南之基礎知識MySql
- Python基礎知識點梳理Python
- Java基礎知識點梳理Java
- JavaScript部分基礎知識點JavaScript
- Servlet基礎知識點整理Servlet
- MySQL--基礎知識點--DDL/DCL/DML/DPL/DQL/CCLMySql
- MySQL--基礎知識點--65--組合查詢MySql
- MySQL基礎知識小結(一)MySql
- Java入門基礎知識點Java
- vueX基礎知識點筆記Vue筆記
- Redis 基礎知識點總結Redis
- Dubbo基礎入門知識點
- ES 基礎知識點總結
- Java基礎知識點總結Java
- Java 基礎面試知識點Java面試
- MySQL基礎知識點串講PART04--完結篇MySql
- MySQL-13.事務基礎知識MySql
- 深入mysql基礎知識的詳解MySql
- MySQL知識點MySql
- IdentityServer4系列 | 初識基礎知識點IDEServer
- JavaSE基礎 (全網最全知識點)Java
- Flutter 知識點總結-基礎篇Flutter
- 前端知識點總結——JavaScript基礎前端JavaScript