mysql5.6開始支援延時複制,預設master_delay為0秒,
CHANGE MASTER TO MASTER_DELAY = N;
表示延時N秒
原理:延時複制的本質是sql_thread需要等待延時時間之後才能執行。
延時複制适用場景:
(1)防止主庫誤操作,在複制同步之前,可以停止同步
(2)用作測試
(3)用來檢查資料庫以前的資料
reset slave會把master_delay清零;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<code>建立一個延時複制:</code>
<code>slave:</code>
<code>root@localhost [testdb]>stop slave;</code>
<code>root@localhost [testdb]>change master </code><code>to</code> <code>master_delay=60;</code>
<code>root@localhost [testdb]>start slave;</code>
<code>root@localhost [testdb]>show slave status\G</code>
<code>......</code>
<code> </code><code>SQL_Delay: 60 </code><code>--延時時間</code>
<code> </code><code>SQL_Remaining_Delay: 56 </code><code>--剩餘時間</code>
<code> </code><code>Slave_SQL_Running_State: Waiting until MASTER_DELAY seconds </code><code>after</code> <code>master executed event </code><code>--等待延時</code>
<code>master:</code>
<code>root@localhost [testdb]></code><code>delete</code> <code>from</code> <code>t1 </code><code>where</code> <code>c1=4;</code>
<code>slave:</code>
<code>root@localhost [testdb]></code><code>select</code> <code>* </code><code>from</code> <code>t1;</code>
<code>+</code><code>----+------+</code>
<code>| c1 | c2 |</code>
<code>| 1 | aaa |</code>
<code>| 2 | bbb |</code>
<code>| 3 | ccc |</code>
<code>| 4 | ddd |</code>
<code>root@localhost [testdb]>show processlist;</code>
<code>+</code><code>----+-------------+-----------+--------+---------+------+----------------------------------------------------------------+------------------+</code>
<code>| Id | </code><code>User</code> <code>| Host | db | Command | </code><code>Time</code> <code>| State | Info |</code>
<code>| 26 | root | localhost | testdb | Query | 0 | starting | show processlist |</code>
<code>| 27 | system </code><code>user</code> <code>| | </code><code>NULL</code> <code>| </code><code>Connect</code> <code>| 345 | Waiting </code><code>for</code> <code>master </code><code>to</code> <code>send event | </code><code>NULL</code> <code>|</code>
<code>| 28 | system </code><code>user</code> <code>| | </code><code>NULL</code> <code>| </code><code>Connect</code> <code>| 10 | Waiting until MASTER_DELAY seconds </code><code>after</code> <code>master executed event | </code><code>NULL</code> <code>|</code>
<code>#在沒有達到60秒之前檢視relay-log日志,發現已經寫入relay-lo中,說明延時是阻塞SQL_thread線程</code>
<code>[root@Darren1 data]# mysqlbinlog -vv </code><code>--base64-output=decode-rows relay-bin.000003</code>
<code>BEGIN</code>
<code>/*!*/;</code>
<code># </code><code>at</code> <code>452</code>
<code>#170409 22:12:27 server id 330622 end_log_pos 5624 CRC32 0x86f7edf4 Table_map: `testdb`.`t1` mapped </code><code>to</code> <code>number 147</code>
<code># </code><code>at</code> <code>502</code>
<code>#170409 22:12:27 server id 330622 end_log_pos 5668 CRC32 0x697c52ed Delete_rows: </code><code>table</code> <code>id 147 flags: STMT_END_F</code>
<code>### </code><code>DELETE</code> <code>FROM</code> <code>`testdb`.`t1`</code>
<code>### </code><code>WHERE</code>
<code>### @1=3 /* </code><code>INT</code> <code>meta=0 nullable=0 is_null=0 */</code>
<code>### @2=</code><code>'ccc'</code> <code>/* VARSTRING(30) meta=30 nullable=1 is_null=0 */</code>
本文轉自 Darren_Chen 51CTO部落格,原文連結:http://blog.51cto.com/darrenmemos/1921702,如需轉載請自行聯系原作者