MySQL中延遲復制的實現(xiàn)
1 MySQL 延遲復制介紹
MySQL 5.7 支持延遲復制,使得 副本服務器故意滯后于源服務器至少一個 指定的時間量。默認延遲為 0 秒。使用 CHANGE MASTER TO 選項設置延遲 到 N 秒:MASTER_DELAY
1.1 延遲復制語法:
CHANGE MASTER TO MASTER_DELAY = N;
1.2 延遲復制可用于多種用途:
為了防止用戶在MASTER頭上出現(xiàn)錯誤。DBA 可以滾動 將延遲的SLAVE返回到災難發(fā)生前的時間。
檢查數據庫很久以前的樣子,沒有必須重新加載備份。例如,如果延遲為 1 周,DBA 需要查看數據庫的外觀 在最近幾天的發(fā)展之前,耽誤了可以檢查SLAVE。
1.3 延遲復制的有關的參數
SHOW SLAVE STATUS 有三個字段 提供有關延遲的信息:
SQL_Delay:一個非負整數,表示 副本必須滯后于源的秒數。SQL_Remaining_Delay:此字段包含一個整數,表示 延遲的剩余秒數。Slave_SQL_Running_State:一個字符串 指示 SQL 線程的狀態(tài)(類似于 )。該值等于 將 SQL 線程的值為 由SHOW PROCESSLIST顯示。Slave_IO_StateState
1.4 延遲復制的操作
延遲復制在哪臺機子上做呢?是由哪個線程來完成
- 延遲復制時用來控制sql線程的,和i/o線程無關
- 這個延遲復制不是i/o線程過段時間來復制,i/o是正常工作的
- 是日志已經保存在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 停止相關進程的原因
為什么要停止本地 sql_thread 進程而不是停止IO_thread呢?
這是由于停止sql_thread 只是 停止的是本地的回放,而不是停止IO_thread的復制。即使停掉本地的回放,IO_thread 進程仍然會對MASTER 的bin-log 進行接收并寫入本地的 Relay log,而不是停止寫入本地 Relay log 。等待sql_thread進程再次啟動進程就會去讀取本地Realy log 并 將本地的 Relay log 回放到數據庫中。這樣子做 能在保證成功修改SLAVE參數的同時也能保持MASTER與SLAVE的數據一致性。
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 參數并增加master 數據 觀察slave延遲復制的過程

到此這篇關于MySQL中延遲復制的實現(xiàn)的文章就介紹到這了,更多相關MySQL 延遲復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何獲取SqlServer2005表結構(字段,主鍵,外鍵,遞增,描述)
本篇文章是對如何獲取SqlServer2005表結構(字段,主鍵,外鍵,遞增,描述)的方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06

