1. 程式人生 > >傳統復制的復制結構之間轉換

傳統復制的復制結構之間轉換

出錯 原因 IT 直接 sql chang info ble 一個

技術分享圖片

今天來寫一個傳統復制的復制結構之間的轉換問題。

a-->b
a-->c
轉換成a-->b-->c
a:create table i_hgr(id int);
此時b和c上都有了表 i_hgr
先在b和c刪除表i_hgr --> b,c:drop table i_hgr;
a:drop table i_hgr;
此時復制出錯,而b和c停在一個位置上
在b上獲取position位置,在c上change master to ... master_log_file=‘show b.master status.log_file‘,
master_log_pos=‘show b.master status.log_pos‘

c:start slave;
這時完成 了b-->c 復制

接下來修復a-->b復制
b;create table i_hgr(id int);
b:start sql_thread;
完成a-->b-->c復制結構。

如果想把a-->b--c 再還原回a--b,a--c的復制結構
b:stop slave;
此時b和c同步的位置一樣
註:判斷c和b是否一樣,去b 上show master status;
b.show master status.file=c.master_log_file
b.show master status.position=c.read_master_log_pos

另外:
假如b:show master status;
master_log_file,read_master_log_pos與relay_master_log_file,exec_master_log_pos不相等時,那要取哪個呢?
答案是用relay_master_log_file和exec_master_log_pos
原因是要選執行到的位置,即sql_thread
接下來在c 上 change master to .... master_log_file=‘xxx‘,master_log_pos=xxx;
c;start slave;
b上直接start slave
b;start slave;
完成了a-->b,a-->c的復制 結構。

傳統復制的復制結構之間轉換