1,--log-slave-updates
系統變量名:log_slave_updates
一般情況下slave不會把從master接收到的binlog記錄寫入自己的binlog,這個參數會使slave通過SQL線程把從master接受到的binlog寫進自己的binlog,但是前提是slave一定要開啟自己的binlog,此參數一般用于級聯復制,例如需要A復制到B,B復制到C,那么B就要開啟此參數。
2,--master-info-file=file_name
slave記錄的關于master信息的文件的名稱,默認master.info,在datadir下。
3,--max-relay-log-size=size
系統變量名:max_relay_log_size
自動輪流記錄的中轉日志文件的大小,如果設置為非0,當中轉日志文件的大小超過此值,則記錄下一個中轉日志文件,如果此值為0(默認),則中轉日志的大小由max_binlog_size決定。
4,--relay-log=file_name
系統變量名:relay_log
中轉日志文件前綴名(base name),對于默認的復制通道,默認值為host_name-relay-bin,對于非默認的復制通道,默認值為host_name-channel-relay-bin,這里channel為記錄在中轉日志的復制通道名稱,如果這個文件名稱前面沒有絕對路徑,則中轉文件路徑在datadir下,云服務器創建中轉文件的時候會在文件末尾添加一個數字的序號。如果指定了此參數但是沒有指定參數的值,則文件名稱取決于其他參數、參數的順序以及是在命令行指定還是在配置文件指定。此參數還被用于生成中轉日志索引文件,但是可以通過指定--relay-log-index參數進行覆蓋。
在下面幾種情況下,此參數非常有用:
1,創建獨立于master名的中轉日志文件。
2,如果你想把中轉日志放到別的地方而不是datadir下。
3,提高通過在磁盤之間做負載均衡的速度
可以從relay_log_basename系統變量獲得中轉日志文件的名稱和路徑。
5,--relay-log-index=file_name
系統參數名稱:relay_log_index
中轉日志后綴名,默認host_name-relay-bin.index,在datadir目錄下。
6,--relay-log-info-file=file_name
用來記錄中轉日志信息的文件的名稱。默認relay-log.info,在datadir目錄下。
7,--relay-log-purege={0|1}
系統參數名稱:relay_log_purge
開啟或關閉在不需要的時候自動刪除中轉日志。默認開啟(1),這是個全局變量,可以通過
SET GLOBAL relay_log_purge = N 動態設置。
8,--relay-log-recovery
開啟在云服務器啟動后立刻恢復中轉日志?;謴瓦M程會創建一個新的中轉日志文件并且使I/O線程從master讀取binlog寫入此中轉文件,使SQL線程讀取此中轉文件。此參數主要是為了防止slave宕機后SQL線程讀取損壞的中轉日志(如果這樣的話有可能會導致數據和master不一致)。不過為了達到此目的還需要將 --relay-log-info-repository參數設置為TABLE(即以表的形式記錄中轉日志的信息)以及開啟--relay-log-purege(默認開啟)參數,此參數默認為0,沒有開啟。當使用多線程復制的時候,有可能出現數據不連續的情況,如果開啟此參數還是不能解決則可以通過如下命令解決:
START SLAVE UNTILSQL_AFTER_MTS_GSPS,這樣會使云服務器處于更加連續的狀態,然后執行RESET SLAVE刪除中轉日志。
9,--relay-log-space-limit=size
系統變量名稱:relay_log_space_limit
設置所有中轉日志文件的大小總和的上限(單位:字節),如果設置為0,意味著沒有限制。在服務磁盤空間不大的情況這,這一參數非常有用,當中轉文件大于此值的時候I/O線程停止從master讀取binlog,直到SQL線程最趕上并刪除沒用的中轉日志。但是也不是絕對的,當SQL線程在刪除中轉日志前需要更多的事件的時候,I/O線程就會超出此值,否則就會導致死鎖(SQL線程和I/O線程互相等待),
另外此值不應該低于--max-relay-log-size(當--max-relay-log-size為0的時候不應該低于--max-binlog-size的兩倍)值的兩倍。有這么一種情況,當I/O線程因超出--relay-log-space-limit的值而等待空閑磁盤的時候,但是SQL線程沒有中轉日志刪除并且不能滿足I/O線程,此時會暫時的輕質I/O忽略--relay-log-space-limit。
10,--replicate-do-db=db_name
在slave創建過濾器復制指定數據庫,在5.7.3及以后的版本可以使用CHANGE REPLICATION FILTER REPLICATION_DO_DB命令創建,具體的復制細節在不同的binlog有不同的表現,具體如下:
基于語句的復制(Statement-based replication):告訴SQL線程那些庫需要復制,如果多個數據庫則使用多次此參數,SQL線程根據默認數據庫(USER DB1)來判斷是否需要復制,如果slave設置為--replicate-do-db=sales,那么下面的語句不會更新sales庫中的january表:
USE prices;
UPDATE sales.january SET amount=amount+1000;
因為SQL線程只根據默認數據庫去判斷是否需要復制,發現默認的數據庫不是sales則下面的所有SQL都不會執行。
基于行的復制(Row-based replication):基于行的復制則與基于語句的復制恰恰相反,SQL線程不關系默認庫是什么只關心sql語句是否影響了指定的數據庫,如果slave設置為--replicate-do-db=sales,那么下面的語句會更新sales庫中的february表:
USE prices;
UPDATE sales.february SET amount=amount+1000;
這種策略會帶來一些小副作用,例如下面的sql:
USE db1;
UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;
如果此時slave設置為--replicate-do-db=db1,那么不只是db1.table1表會發生變化,db2.table2也會發生變更。
綜上所述,考慮到數據庫復制,跨數據庫的sql一定要謹慎了。
11,--replicate-ignore-db=db_name
在slave上創建過濾器,指定忽略哪些數據庫,在5.7.3及以后的版本可以使用CHANGE REPLICATION FILTER REPLICATION_IGNORE_DB命令創建,不同格式的binlog的規則與--replicate-do-db=db_name類似。
12,--replicate-do-table=db_name.tbl_name
創建表級別的復制過濾器,告訴SQL線程那個庫的那些表需要復制,不管是跨數據庫的更新還是默認數據的更新都起作用,在5.7.3及以后的版本可以使用 CHANGE REPLICATION FILTER REPLICATION_DO_TABLE命令創建。只對sql語句起作用,對數據庫中的其他對象例如存儲程序不起作用。
13,--replicate-ignore-table=db_name.tbl_name
創建忽略哪些表的過濾器,跨數據庫更新依然有效,在5.7.3及以后的版本可以使用CHANGE REPLICATION FILTER REPLICATION_IGNORE_TABLE命令創建。只對sql語句起作用,對數據庫中的其他對象例如存儲程序不起作用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。