MySQL中延遲復制的實現(xiàn)
1 MySQL 延遲復制介紹
MySQL 5.7 支持延遲復制,使得 副本服務器故意滯后于源服務器至少一個 指定的時間量。默認延遲為 0 秒。使用 CHANGE MASTER TO 選項設(shè)置延遲 到 N
秒:MASTER_DELAY
1.1 延遲復制語法:
CHANGE MASTER TO MASTER_DELAY = N;
1.2 延遲復制可用于多種用途:
為了防止用戶在MASTER頭上出現(xiàn)錯誤。DBA 可以滾動 將延遲的SLAVE返回到災難發(fā)生前的時間。
檢查數(shù)據(jù)庫很久以前的樣子,沒有必須重新加載備份。例如,如果延遲為 1 周,DBA 需要查看數(shù)據(jù)庫的外觀 在最近幾天的發(fā)展之前,耽誤了可以檢查SLAVE。
1.3 延遲復制的有關(guān)的參數(shù)
SHOW SLAVE STATUS 有三個字段 提供有關(guān)延遲的信息:
SQL_Delay
:一個非負整數(shù),表示 副本必須滯后于源的秒數(shù)。SQL_Remaining_Delay
:此字段包含一個整數(shù),表示 延遲的剩余秒數(shù)。Slave_SQL_Running_State
:一個字符串 指示 SQL 線程的狀態(tài)(類似于 )。該值等于 將 SQL 線程的值為 由SHOW PROCESSLIST
顯示。Slave_IO_State
State
1.4 延遲復制的操作
延遲復制在哪臺機子上做呢?是由哪個線程來完成
- 延遲復制時用來控制sql線程的,和i/o線程無關(guān)
- 這個延遲復制不是i/o線程過段時間來復制,i/o是正常工作的
- 是日志已經(jīng)保存在slave端了,那個sql要等多久進行回放
2 MySQL 延遲復制 實操
2.1 實驗環(huán)境
MASTER/SLAVE | 服務器名稱 | 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 對 SLAVE --MySQL-3 進行延遲復制操作
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 進程,停止本地回放 mysql> stop slave sql_thread; Query OK, 0 rows affected (0.00 sec) # 改變 本地回放的延遲時間 mysql> change master to master_delay=60; Query OK, 0 rows affected (0.00 sec) # 打開本地回放 sql_thread 進程 mysql> start slave sql_thread; Query OK, 0 rows affected (0.00 sec)
2.3 停止相關(guān)進程的原因
為什么要停止本地 sql_thread 進程而不是停止IO_thread呢?
這是由于停止sql_thread 只是 停止的是本地的回放,而不是停止IO_thread的復制。即使停掉本地的回放,IO_thread 進程仍然會對MASTER 的bin-log 進行接收并寫入本地的 Relay log,而不是停止寫入本地 Relay log 。等待sql_thread進程再次啟動進程就會去讀取本地Realy log 并 將本地的 Relay log 回放到數(shù)據(jù)庫中。這樣子做 能在保證成功修改SLAVE參數(shù)的同時也能保持MASTER與SLAVE的數(shù)據(jù)一致性。
2.4 實驗測試
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 并沒有做延遲復制
mysql> select * from shuyan.wawa; +----+--------+ | id | name | +----+--------+ | 1 | wawa | | 2 | shuyan | +----+--------+
MySQL-03 做了60秒的延遲復制
mysql> select * from shuyan.wawa; +----+------+ | id | name | +----+------+ | 1 | wawa | +----+------+
2.5 動圖演示全過程
接下來是一個動圖的演示 修改 master_delay 參數(shù)并增加master 數(shù)據(jù) 觀察slave延遲復制的過程
到此這篇關(guān)于MySQL中延遲復制的實現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 延遲復制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL5.7 mysqldump備份與恢復的實現(xiàn)
這篇文章主要介紹了MySQL5.7 mysqldump備份與恢復的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢
這篇文章主要介紹了Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢,concat函數(shù)在SQL注入查詢中會有意想不到的作用,本文就起講解它的使用,需要的朋友可以參考下2015-04-04Mysql中in和exists的區(qū)別?&?not?in、not?exists、left?join的相互轉(zhuǎn)換問題
這篇文章主要介紹了Mysql中in和exists的區(qū)別?&?not?in、not?exists、left?join的相互轉(zhuǎn)換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09