捐血一袋救人一命

2013年7月4日 星期四

MySQL Replication

 

Master Server Configuration

server-id=伺服器代號(數字,範圍介於 1~232,每台伺服器代號必須唯一)

--binlog-do-db=資料庫名稱

使用參數,要注意使用的是 Statement-based 或是 Row-based 的 log 格式

在 statement-based 格式下,Replication 只會發生在 USE 資料庫與 --binlog-do-db 指定的資料庫相同,如果 USE 資料庫與 --binlog-do-db 資料庫不同,即使指令異動 --binlog-do-db 指定的資料庫,也是不會被 Replication 的

例如:

在 Statement-based logging format 下被 Replication
--binlog-do-db=db_a;
USE db_a;
UPDATE db_b.table_a SET field_1 = filed_1 + 100;

在 Statement-based logging formate 下不會被 Replication
--binlog-do-db=db_a;
USE db_b;
UPDATE db_a.table_a SET field_1 = filed_1 + 100;

也就是說 在 statement-based logging format 下,指定 --binlog-do-db ,會受 USE 指令影響,

USE 與 --binlog-do-db 指定相同的 DB,才會被 Replication


但是在 Row-based 時,就不管 USE 哪個資料庫

只要是異動 --binlog-do-db 指定的資料庫,就會被 Replication

例如:

在 Row-based logging format 下被 Replication
--binlog-do-db=db_a;
USE db_b;
UPDATE db_a.table_a SET field_1 = filed_1 + 100;

在 Row-based logging formate 下不會被 Replication
--binlog-do-db=db_a;
USE db_a;
UPDATE db_b.table_a SET field_1 = filed_1 + 100;


再來

如果在 Statement-base 下, USE 資料與 --binlog-do-db 指定的資料庫相同,且同時異動多個資料庫時,都會被 Replocation

例如:

在 Statement-based logging format 下被 Replication
--binlog-do-db=db_a;
USE db_a;
UPDATE db_a.table_a SET field_1 = 100, db_b.table_b SET field_2 = 50;

但是如果是在 Row-based 下,上述指令中,只有 db_a.table_a 會被 Replication


當 Master Server 出問題時,要切換到 Slave Server ,可以使用
CHANGE MASTER TO 指令

要注意的是,使用 CHANGE MASTER TO / RESET SLAVE 指令時,必須先停止Slave Server 的 Replication,請使用 STOP SLAVE 指令

0 意見: