MySQL中延遲復(fù)制的實(shí)現(xiàn)
1 MySQL 延遲復(fù)制介紹
MySQL 5.7 支持延遲復(fù)制,使得 副本服務(wù)器故意滯后于源服務(wù)器至少一個(gè) 指定的時(shí)間量。默認(rèn)延遲為 0 秒。使用 CHANGE MASTER TO 選項(xiàng)設(shè)置延遲 到 N 秒:MASTER_DELAY
1.1 延遲復(fù)制語法:
CHANGE MASTER TO MASTER_DELAY = N;
1.2 延遲復(fù)制可用于多種用途:
為了防止用戶在MASTER頭上出現(xiàn)錯(cuò)誤。DBA 可以滾動(dòng) 將延遲的SLAVE返回到災(zāi)難發(fā)生前的時(shí)間。
檢查數(shù)據(jù)庫很久以前的樣子,沒有必須重新加載備份。例如,如果延遲為 1 周,DBA 需要查看數(shù)據(jù)庫的外觀 在最近幾天的發(fā)展之前,耽誤了可以檢查SLAVE。
1.3 延遲復(fù)制的有關(guān)的參數(shù)
SHOW SLAVE STATUS 有三個(gè)字段 提供有關(guān)延遲的信息:
SQL_Delay:一個(gè)非負(fù)整數(shù),表示 副本必須滯后于源的秒數(shù)。SQL_Remaining_Delay:此字段包含一個(gè)整數(shù),表示 延遲的剩余秒數(shù)。Slave_SQL_Running_State:一個(gè)字符串 指示 SQL 線程的狀態(tài)(類似于 )。該值等于 將 SQL 線程的值為 由SHOW PROCESSLIST顯示。Slave_IO_StateState
1.4 延遲復(fù)制的操作
延遲復(fù)制在哪臺(tái)機(jī)子上做呢?是由哪個(gè)線程來完成
- 延遲復(fù)制時(shí)用來控制sql線程的,和i/o線程無關(guān)
- 這個(gè)延遲復(fù)制不是i/o線程過段時(shí)間來復(fù)制,i/o是正常工作的
- 是日志已經(jīng)保存在slave端了,那個(gè)sql要等多久進(jìn)行回放
2 MySQL 延遲復(fù)制 實(shí)操
2.1 實(shí)驗(yàn)環(huán)境
| MASTER/SLAVE | 服務(wù)器名稱 | IP地址 | server-id |
| MASTER | MySQL-01 | 192.168.239.210 | 10 |
| SLAVE-1 | MySQL-02 | 192.168.239.220 | 20 |
| SLAVE-2 | MySQL-03 | 192.168.239.230 | 30 |



2.2 對(duì) SLAVE --MySQL-3 進(jìn)行延遲復(fù)制操作
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.239.210
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 194
Relay_Log_File: mysql-3-relay-bin.000007
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 194
Relay_Log_Space: 742
Master_Server_Id: 10
Master_UUID: cd27e5ae-5fe3-11ef-a5d8-000c29a51779
Master_Info_File: /data/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
# 停止 SQL_thread 進(jìn)程,停止本地回放 mysql> stop slave sql_thread; Query OK, 0 rows affected (0.00 sec) # 改變 本地回放的延遲時(shí)間 mysql> change master to master_delay=60; Query OK, 0 rows affected (0.00 sec) # 打開本地回放 sql_thread 進(jìn)程 mysql> start slave sql_thread; Query OK, 0 rows affected (0.00 sec)
2.3 停止相關(guān)進(jìn)程的原因
為什么要停止本地 sql_thread 進(jìn)程而不是停止IO_thread呢?
這是由于停止sql_thread 只是 停止的是本地的回放,而不是停止IO_thread的復(fù)制。即使停掉本地的回放,IO_thread 進(jìn)程仍然會(huì)對(duì)MASTER 的bin-log 進(jìn)行接收并寫入本地的 Relay log,而不是停止寫入本地 Relay log 。等待sql_thread進(jìn)程再次啟動(dòng)進(jìn)程就會(huì)去讀取本地Realy log 并 將本地的 Relay log 回放到數(shù)據(jù)庫中。這樣子做 能在保證成功修改SLAVE參數(shù)的同時(shí)也能保持MASTER與SLAVE的數(shù)據(jù)一致性。
2.4 實(shí)驗(yàn)測(cè)試
MASTER 上操作
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ZUCONG | | mysql | | performance_schema | | shuyan | | sys | +--------------------+ 6 rows in set (0.03 sec) mysql> use shuyan; mysql> show tables; +------------------+ | Tables_in_shuyan | +------------------+ | wawa | +------------------+ mysql> select * from wawa; +----+------+ | id | name | +----+------+ | 1 | wawa | +----+------+ mysql> insert into wawa(id,name) values(2,'shuyan');

SLAVE 上 查看
MySQL-02 并沒有做延遲復(fù)制
mysql> select * from shuyan.wawa; +----+--------+ | id | name | +----+--------+ | 1 | wawa | | 2 | shuyan | +----+--------+

MySQL-03 做了60秒的延遲復(fù)制
mysql> select * from shuyan.wawa; +----+------+ | id | name | +----+------+ | 1 | wawa | +----+------+


2.5 動(dòng)圖演示全過程
接下來是一個(gè)動(dòng)圖的演示 修改 master_delay 參數(shù)并增加master 數(shù)據(jù) 觀察slave延遲復(fù)制的過程

到此這篇關(guān)于MySQL中延遲復(fù)制的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 延遲復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何獲取SqlServer2005表結(jié)構(gòu)(字段,主鍵,外鍵,遞增,描述)
本篇文章是對(duì)如何獲取SqlServer2005表結(jié)構(gòu)(字段,主鍵,外鍵,遞增,描述)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
MySQL海量數(shù)據(jù)(2億級(jí)表字段)無損更新方案
在大型互聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)表動(dòng)輒達(dá)到億級(jí)規(guī)模,當(dāng)需要對(duì)生產(chǎn)環(huán)境中的海量表進(jìn)行字段更新時(shí),如何在不影響業(yè)務(wù)正常讀寫的情況下完成任務(wù),是每個(gè)DBA和開發(fā)者都會(huì)面臨的挑戰(zhàn),本文將以一個(gè)真實(shí)案例詳細(xì)講解四種漸進(jìn)式更新方案及其實(shí)現(xiàn)原理,需要的朋友可以參考下2025-04-04
軟件測(cè)試-MySQL(六:數(shù)據(jù)庫函數(shù))
這篇文章主要介紹了MySQL數(shù)據(jù)庫函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
淺談mysql數(shù)據(jù)庫中的換行符與textarea中的換行符
下面小編就為大家?guī)硪黄獪\談mysql數(shù)據(jù)庫中的換行符與textarea中的換行符。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Linux系統(tǒng)中安裝MySQL的詳細(xì)圖文步驟
本文的主要內(nèi)容是在 Linux 上安裝 MySQL,以下內(nèi)容是源于 B站 - MySQL數(shù)據(jù)庫入門到精通 整理而來,需要的朋友可以參考下2023-06-06

