實現Mysql延時複製
首先研究下mysql的複製結構,4.0以上開始,複製分為2個程式,io程式和sql程式。其中io程式連線到master讀取binlog,寫入relaylog,而sql程式讀取relaylog後apply到slave上。
binlog和relaylog格式dump出來是這樣的:
#090108 20:24:17 server id 1 log_pos 9466422 Query thread_id=34456 exec_time=0 error_code=0
SET TIMESTAMP=1231417457;
insert into xxxx (UDusedo,UDdirect,UDuserid,UDusername,UDgetuserid,UDgetusername,UDcoins,UDtype,UDzone1,UDtargetvalue,UDdate,UD
ip,UDstatus) values ('33','n','7495715','LWGZOY','7495715','LWGZOY','1000','prop','3','56009376',now(),'116.53.1.144','00');
log中有SET TIMESTAMP=1231417457是為了防止slave和master之間時間不同造成某些時間欄位值不一致的情況。其實也等同於這句sql在master上執行的時間,那麼我們只要獲取到它再和當前slave上的時間比較,如果少於我們需要的延時就讓複製停下,這不就實現了延時複製麼.
在mysql中可以透過函式UNIX_TIMESTAMP獲取到和上面的TIMESTAMP同樣的結果。
mysql> select unix_timestamp();
+------------------+
| unix_timestamp() |
+------------------+
| 1231750815 |
+------------------+
1 row in set (0.00 sec)
如何挖relaylog的尾部是個問題,因為日誌可能很大,所以我們要藉助下面的命令:
[root@HB-150-189 data]# mysql -e "show slave statusG"
*************************** 1. row ***************************
Master_Host: 192.168.1.104
Master_User: rep
Master_Port: 3306
Connect_retry: 60
Master_Log_File: HBDB104-bin.104
Read_Master_Log_Pos: 534427423
Relay_Log_File: HB-150-189-relay-bin.070
Relay_Log_Pos: 20200284
Relay_Master_Log_File: HBDB104-bin.104
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_do_db: aushop,auhj
Replicate_ignore_db:
Last_errno: 0
Last_error:
Skip_counter: 0
Exec_master_log_pos: 534427423
Relay_log_space: 20200284
其中得到Relay_Log_File的名字,Relay_Log_Pos: 20200284,透過這個可以得到一個offset,以此來挖掘relaylog來獲取到最近的TIMESTAMP,然後使用:
mysqlbinlog -j 20200284./HB-150-189-relay-bin.070|grep "SET TIMESTAMP"|sed -n '1p'
在加上shell的處理就可以輕鬆獲取最近的TIMESTAMP了
再看下show slave status的輸出,版本為4.0.26:
mysql> show slave statusG
*************************** 1. row ***************************
Master_Host: 192.168.1.184
Master_User: rep
Master_Port: 3306
Connect_retry: 60
Master_Log_File: HBDB184-bin.072
Read_Master_Log_Pos: 358310392
Relay_Log_File: HB150-130-relay-bin.076
Relay_Log_Pos: 348847513
Relay_Master_Log_File: HBDB184-bin.072
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_do_db: money
Replicate_ignore_db:
Last_errno: 0
Last_error:
Skip_counter: 0
Exec_master_log_pos: 358310392
Relay_log_space: 348847513
1 row in set (0.00 sec)
輸出資訊包括了Slave_IO_Running, Slave_SQL_Running的狀態。
mysql 4以後,可以透過STOP SLAVE IO_THREAD來停止io程式的活動,STOP SLAVE SQL_THREAD來停止sql程式的活動,大家只要使用shell結合crontab和nohup,加上對
[root@HB-150-189 data]# mysqladmin extended-status|grep Slave_running
的監視就可以達到mysql延時複製的功能,達到防止人為錯誤的作用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/79686/viewspace-1015961/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用shell實現Mysql延時複製MySql
- MySQL並行複製延時時間不準確MySql並行
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- 從 MySQL 到 ClickHouse 實時複製與實現MySql
- mysql主從延遲複製MySql
- MySQL 5.7 延遲複製配置MySql
- MySQL8.0的一個bug導致複製延時MySql
- mysql實現主從複製MySql
- 如何利用PostgreSQL的延遲複製實現災備SQL
- mysql過濾複製的實現MySql
- docker實現mysql主從複製DockerMySql
- 高頻面試:如何解決MySQL主從複製延時問題面試MySql
- MySQL之 從複製延遲問題排查MySql
- MySQL主從複製延遲解決方案MySql
- 簡單實踐實現 MySQL 主從複製MySql
- MySQL5.5半同步複製實現原理MySql
- mysql資料庫實現主從複製MySql資料庫
- MySQL(二):主從複製結構、半同步複製、雙主複製結構、利用SSL實現安全的MySQL主從複製MySql
- mysql同步(複製)延遲的原因及解決方案MySql
- MySQL主從複製延遲原因及處理思路MySql
- mysql的主從複製資料延遲問題MySql
- js 實現深複製/深複製JS
- oracle goldengate 複製端延時應用引數OracleGo
- Mysql實現主從複製(一主雙從)MySql
- MySQL主主複製+MMM實現高可用(一)MySql
- Mysql 非同步複製延遲的原因及解決方案MySql非同步
- PostgreSQL中的複製延遲SQL
- MySQL 主從複製實操MySql
- mysql 複製原理與實踐MySql
- Mysqldump實現mysql的master-slave主從複製MySqlAST
- MySQL · 功能分析 · 5.6 並行複製實現分析MySql並行
- 故障分析 | MySQL 異地從庫複製延遲案例一則MySql
- 記一次 MySQL 主從複製延遲的踩坑MySql
- 在Linux中,mysql 如何減少主從複製延遲?LinuxMySql
- MySQL併發複製系列三:MySQL和MariaDB實現對比MySql
- JS實現複製大法JS
- 前端實現複製功能前端
- js實現複製功能JS