MySQL主從複製結構中常用引數

白及88發表於2016-02-24

MySQL主從複製結構中常用引數

這篇文章主要簡單說一下MySQL主從複製結構中常用到的一些引數。引數是一個程式的翅膀,正是因為有了很多不同的配置引數,程式才會這麼強大。一般來說,引數越多越複雜的程式,功能也越強大,因為要處理的組合關係越多,同時掌握起來也越難。即使是一個你天天用的程式,比如 ls 你也很難掌握他的全部引數,所以沒事的時候多翻翻man page,你會發現,我靠!這個命令居然還有這個引數,真是NB大了。好了,進入正題:

server-id

ID值唯一的標識了複製群集中的主從伺服器,因此它們必須各不相同。master_id必須為1到2^32–1之間的一個正整數值,slave_id值必須為2到2^32–1之間的一個正整數值。

log-bin

表示開啟binlog,開啟該選項才可以通過I/O寫到Slave的relay-log,也是可以進行replication的前提;

binlog-do-db

表示需要記錄二進位制日誌的資料庫。如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項

binlog-ignore-db

表示不需要記錄二進位制日誌的資料庫。如果有多個資料庫可用逗號分隔,或者使用多個binlog-do-db選項

replicate-do-db

表示需要同步的資料庫,如果有多個資料庫可用逗號分隔,或者使用多個replicate-do-db選項

replicate-ignore-db

表示不需要同步的資料庫,如果有多個資料庫可用逗號分隔,或者使用多個replicate-ignore-db=mysql選項

log-slave-updates

配置從庫上的更新操作是否寫入二進位制檔案,如果這臺從庫,還要做其他從庫的主庫,那麼就需要打這個引數,以便從庫的從庫能夠進行日誌同步

slave-skip-errors

在複製過程,由於各種原因導致binlog中的sql出錯,預設情況下,從庫會停止複製,要使用者介入。可以設定slave-skip-errors來定義錯誤號,如果複製過程中遇到的錯誤號是定義的錯誤號,便可以跳過。如果從庫是用來做備份,設定這個引數會存在資料不一致,不要使用。如果是分擔主庫的查詢壓力,可以考慮。

sync_binlog

sync_binlog的預設值是0,這種模式下,MySQL不會同步到磁碟中去。這樣的話,MySQL依賴作業系統來重新整理二進位制日誌binary log,就像作業系統刷其他檔案的機制一樣。因此如果作業系統或機器(不僅僅是MySQL伺服器)崩潰,有可能binlog中最後的語句丟失了。要想防止這種情況,你可以使用sync_binlog全域性變數,使binlog在每N次binlog寫入後與硬碟同步。當sync_binlog變數設定為1是最安全的,因為在crash崩潰的情況下,你的二進位制日誌binary log只有可能丟失最多一個語句或者一個事務。但是,這也是最慢的一種方式(除非磁碟有使用帶蓄電池後備電源的快取cache,使得同步到磁碟的操作非常快)。

即使sync_binlog設定為1,出現崩潰時,也有可能表內容和binlog內容之間存在不一致性。如果使用InnoDB表,MySQL伺服器處理COMMIT語句,它將整個事務寫入binlog並將事務提交到InnoDB中。如果在兩次操作之間出現崩潰,重啟時,事務被InnoDB回滾,但仍然存在binlog中。可以用–innodb-safe-binlog選項來增加InnoDB表內容和binlog之間的一致性。(註釋:在MySQL 5.1中不需要–innodb-safe-binlog;由於引入了XA事務支援,該選項作廢了),該選項可以提供更大程度的安全,使每個事務的
binlog(sync_binlog =1)和(預設情況為真)InnoDB日誌與硬碟同步,該選項的效果是崩潰後重啟時,在滾回事務後,MySQL伺服器從binlog剪下回滾的 InnoDB事務。這樣可以確保binlog反饋InnoDB表的確切資料等,並使從伺服器保持與主伺服器保持同步(不接收回滾的語句)。

auto_increment_offset和auto_increment_increment

auto_increment_increment和auto_increment_offset用於主-主伺服器(master-to-master)複製,並可以用來控制AUTO_INCREMENT列的操作。兩個變數均可以設定為全域性或區域性變數,並且假定每個值都可以為1到65,535之間的整數值。將其中一個變數設定為0會使該變數為1。

這兩個變數影響AUTO_INCREMENT列的方式:auto_increment_increment控制列中的值的增量值,auto_increment_offset確定AUTO_INCREMENT列值的起點。

如果auto_increment_offset的值大於auto_increment_increment的值,則auto_increment_offset的值被忽略。例如:表內已有一些資料,就會用現在已有的最大的自增值做為初始值。

下面再簡單介紹一下用於控制主、從伺服器的SQL語句

1),用於控制主伺服器的SQL語句

PURGE MASTER LOGS

用於刪除列於在指定的日誌或日期之前的日誌索引中的所有二進位制日誌。這些日誌也會從記錄在日誌索引檔案中的清單中被刪除,這樣被給定的日誌成為第一個。

RESET MASTER

可以刪除列於索引檔案中的所有二進位制日誌,把二進位制日誌索引檔案重新設定為空,並建立一個新的二進位制日誌檔案。

SET SQL_LOG_BIN

如果客戶端使用一個有SUPER許可權的賬戶連線,則可以禁用或啟用當前連線的二進位制日誌記錄。如果客戶端沒有此許可權,則語句被拒絕,並伴隨有錯誤。

SHOW BINLOG EVENTS

用於在二進位制日誌中顯示事件。如果您不指定’log_name’,則顯示第一個二進位制日誌。

SHOW MASTER LOGS

用於列出伺服器中的二進位制日誌檔案。

SHOW MASTER STATUS

用於提供主伺服器二進位制日誌檔案的狀態資訊。

SHOW SLAVE HOSTS

用於顯示當前使用主伺服器註冊的複製從屬伺服器的清單。

2),用於控制從伺服器的SQL語句

CHANGE MASTER TO

可以更改從屬伺服器用於與主伺服器進行連線和通訊的引數。

LOAD DATA FROM MASTER

用於對主伺服器進行快照,並拷貝到從屬伺服器上。

LOAD TABLE tbl_name FROM MASTER

用於把表的拷貝從主伺服器轉移到從屬伺服器。

MASTER_POS_WAIT()

這實際上是一個函式,而不是一個語句。它被用於確認,從屬伺服器已讀取並執行了到達主伺服器二進位制日誌的給定位置。

RESET SLAVE

用於讓從屬伺服器忘記其在主伺服器的二進位制日誌中的複製位置。

SET GLOBAL SQL_SLAVE_SKIP_COUNTER

從主伺服器中跳過後面的n個事件。要復原由語句導致的複製中止,這是有用的。

SHOW SLAVE STATUS

用於提供有關從屬伺服器執行緒的關鍵引數的資訊。

START SLAVE

用於啟動從屬伺服器執行緒

STOP SLAVE

用於中止從屬伺服器執行緒

以上內容摘自MySQL官方手冊,具體用法詳見:http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#reset-master


相關文章