mysql主從復制選項設置 master.info文件格式包括對應SSL選項的值。並且,文件格式包括文件中的行號,如同第1行。如果你將舊的服務器升級到新的版本,新服務器啟動時自動將smaster.info文件升級到新的格式。然而,如果將新服務器降 級到舊的版本,首次啟動舊版本的服務器之前應刪除第1行。 如果從服務器啟動時master.info文件不存在,選項采用選項文件或命令行中指定的值。首次將服務器作為從服務器啟動時,或者已經運行RESET SLAVE然後已經關閉並重啟從服務器時會發生。如果從服務器啟動時master.info文件存在,服務器忽略那些選項。使用master.info文件中發現的值。 如果你使用與master.info文件中相對應的啟動選項的不同的值重啟從服務器,啟動選項的不同的值不會效, 因為服務器繼續使用master.info文件。要想使用啟動選項的不同的值,必須刪除master.info文件並重啟從服務器,或(最好是)在從服務器運行時使用CHANGE MASTER TO語句重新設置值。 假定在my.cnf文件中指定該選項: [mysqld] master-host=some_host 第1次作為復制從服務器啟動服務器時,從my.cnf文件讀取並使用選項。服務器然後記錄master.info文件中的值。下次啟動服務器時,它只從服務器的master.info文件讀取主服務器主機值並忽略選項文件中的值。如果你修改my.cnf文件為some_other_host指定其它主服務器主機,更改仍然不會生效。你應使CHANGEMASTER TO。因為服務器給已有master.info文件的優先權高於剛剛描述的啟動選項,可以選擇不使用這些值的啟動選項,而是使用CHANGE MASTER TO語句來指定。下面的例子顯示了如何更廣泛地使用啟動選項來配置從服務器: [mysqld] server-id=2 master-host=db-master.mycompany.com master-port=3306 master-user=pertinax master-password=freitag master-connect-retry=60 report-host=db-slave.mycompany.com 下面列出了控制復制的啟動選項:許多選項可以在服務器運行時通過CHANGE MASTER TO語句重新進行設置。其它選項,例如--replicate-*選項,只能在從服務器啟動時進行設置。我們計劃將修復該問題。 · --logs-slave-updates 通常情況,從服務器從主服務器接收到的更新不記入它的二進制日志。該選項告訴從服務器將其SQL線程執行的更新記入到從服務器自己的二進制日志。為了使該選項生效,還必須用--logs-bin選項啟動從服務器以啟用二進制日志。如果想要應用鏈式復制服務器,應使用--logs-slave-updates。例如,可能你想要這樣設置:A -> B -> C也就是說,A為從服務器B的主服務器,B為從服務器C的主服務器。為了能工作,B必須既為主服務器又為從服務器。你必須用--logs-bin啟動A和B以啟用二進制日志,並且用--logs-slave-updates選項啟動B。 · --logs-warnings 讓從服務器向錯誤日志輸出更詳細的關於其執行操作的消息。例如,通知你網絡/連接失敗後已經成功重新連接,並通知你每個從服務器線程如何啟動。該選項默認啟用;要想禁用它,使用--skip-logswarnings。放棄的連接不記入錯誤日志,除非該值大於1。請注意該選項的效果不限於復制。可以對服務器的部分動作產生警告。 · --master-connect-retry=seconds 在主服務器宕機或連接丟失的情況下,從服務器線程重新嘗試連接主服務器之前睡眠的秒數。如果主服 務器.info文件中的值可以讀取則優先使用。如果未設置, 默認值為60。 · --master-host=host 主復制服務器的主機名或IP地址。如果沒有給出該選項,從服務器線程不啟動。如果主服務器.info文件中的值可以讀取則優先使用。 · --master-info-file=file_name 從服務器用於記錄主服務器的相關信息使用的文件名。默認名為數據目錄中的mysql.info。 · --master-password=password 連接主服務器時從服務器線程用於鑒定的賬戶的密碼。如果主服務器.info文件中的值可以讀取則優先使 用。如果未設置,假定 密碼為空。 · --master-port=port_number 主服務器正幀聽的TCP/IP端口號。如果主服務器.info文件中的值可以讀取則優先使用。如果未設置,假定使用編譯進來的設定值。如果你未曾用configure選項進行修改,該值應為3306。 · --master-ssl、--master-ssl-ca=file_name、--master-ssl-capath=directory_name、--master-ssl-cert=file_name、--master-sslcipher=cipher_list、--master-ssl-key=file_name 這些選項用於使用SSL設置與主服務器的安全復制連接。描述的相應—ssl、--ssl-ca、--ssl-capath、--ssl-cert、--ssl-cipher、--ssl-key選項相同。如果主服務器.info文件中的值可以讀取則優先使用。 · --master-user=username 連接主服務器時從服務器線程用於鑒定的賬戶的用戶名。該賬戶必須具有REPLICATION SLAVE權限。如果主服務器.info文件中的值可以讀取則優先使用。如果未設置主服務器用戶,假定使用用戶test。 · --max-relay-logs-size=size 自動循環中繼日志。 · --read-only 該選項讓從服務器只允許來自從服務器線程或具有SUPER權限的用戶的更新。可以確保從服務器不接受來自客戶的更新。 · --relay-log=file_name 中繼日志名。默認名為host_name-relay-bin.nnnnnn,其中host_name是從服務器主機的名,nnnnnn表示中繼日志在編號序列中創建。如果中繼日志太大(並且你不想降低max_relay_log_size),需要將它們放到數據目錄之外的其它地方,或者如果想要通過硬盤之間的負載均衡提高速度,可以指定選項創建與主機名無關的中繼日志名。 · --relay-log-index=file_name 中繼日志索引文件使用的位置和名稱。默認名為host_name-relay-bin.index,其中host_name為從服務器名。 · --relay-log-info-file=file_name 從服務器用於記錄中繼日志相關信息的文件名。默認名為數據目錄中的relay-log.info。 · --relay-log-purge={0|1} 禁用或啟用不再需要中繼日志時是否自動清空它們。默認值為1(啟用)。這是一個全局變量,可以用SETGLOBAL Relay_log_purge動態更改。 · --relay-log-space-limit=size 限制所有中繼日志在從服務器上所占用空間的上限(0值表示“無限制”)。從服務器主機硬盤空間有限時很有用。達到限制後,I/O線程停止從主服務器讀取二進制日志中的事件,直到SQL線程被閉鎖並且刪除了部分未使用的中繼日志。請注意該限制並不是絕對的:有可能SQL線程刪除中繼日志前需要更多的事件。在這種情況下,I/O線程將超過限制,直到SQL線程可以刪除部分中繼日志。(不這樣做將會造成死鎖)。--relay-log-space-limit的值不能小於--max-relay-logs-size(或如果--max-relay-logs-size為0,選--maxbinlog-size)的值的兩倍。在這種情況下,有可能I/O線程等待釋放空間,因為超過了--relay-log-space-limit,但SQL線程沒有要清空的中繼日志,不能滿足I/O線程的需求。強制I/O線程臨時忽視--relay-logspacelimit。 · --replicate-do-db=db_name 告訴從服務器限制默認數據庫(由USE所選擇)為db_name的語句的復制。要指定多個數據庫,應多次使用該選項,每個數據庫使用一次。請注意不復制跨數據庫的語句,例如當已經選擇了其它數據庫或沒有數據庫時執行UPDATEsome_db.some_table SET foo='bar'。如果需要跨數據庫進行更新,使用--replicate-wild-dotable=db_name.%。請讀取該選項列表後面的注意事項。一個不能按照期望工作的例子:如果用--replicate-do-db=sales啟動從服務器,並且在主服務器上執行下面的語句,UPDATE語句不會復制: USE prices; UPDATE sales.january SET amount=amount+1000; 如果需要跨數據庫進行更新,應使用--replicate-wild-do-table=db_name.%。“只檢查默認數據庫”行為的主要原因是語句自己很難知道它是否應被復制(例如,如果你正使用跨數據庫的多表DELETE語句或多表UPDATE語句)。如果不需要,只檢查默認數據庫比檢查所有數據庫要快得多。 · --replicate-do-table=db_name.tbl_name 告訴從服務器線程限制對指定表的復制。要指定多個表,應多次使用該選項,每個表使用一次。同--replicate-do-db對比,允許跨數據庫更新。請讀取該選項列表後面的注意事項。 · --replicate-ignore-db=db_name 告訴從服務器不要復制默認數據庫(由USE所選擇)為db_name的語句。要想忽略多個數據庫,應多次使用該選項,每個數據庫使用一次。如果正進行跨數據庫更新並且不想復制這些更新,不應使用該選項。請讀取該選項後面的注意事項。一個不能按照期望工作的例如:如果用--replicate-ignore-db=sales啟動從服務器,並且在主服務器上執行下面的語句,UPDATE語句不會復制: · USE prices; · UPDATE sales.january SET amount=amount+1000; 如果需要跨數據庫更新,應使用--replicate-wild-ignore-table=db_name.%。 · --replicate-ignore-table=db_name.tbl_name 告訴從服務器線程不要復制更新指定表的任何語句(即使該語句可能更新其它的表)。要想忽略多個表,應多次使用該選項,每個表使用一次。同--replicate-ignore-db對比,該選項可以跨數據庫進行更新。請讀取該選項後面的注意事項。 · --replicate-wild-do-table=db_name.tbl_name 告訴從服務器線程限制復制更新的表匹配指定的數據庫和表名模式的語句。模式可以包含‘%’和‘_’通配符,與LIKE模式匹配操作符具有相同的含義。要指定多個表,應多次使用該選項,每個表使用一次。該選項可以跨數據庫進行更新。請讀取該選項後面的注意事項。 例如:--replicate-wild-do-table=foo%.bar%只復制數據庫名以foo開始和表名以bar開始的表的更新。 如果表名模式為%,可匹配任何表名,選項也適合數據庫級語句(CREATE DATABASE、DROP DATABASE 和ALTER DATABASE)。例如,如果使用--replicate-wild-do-table=foo%.%,如果數據庫名匹配模式foo%,則復制數據庫級語句。 要想在數據庫或表名模式中包括通配符,用反斜線對它們進行轉義。例如,要復制名為my_own%db的數 據庫的所有表,但不復制my1ownAABCdb數據庫的表,應這樣轉義‘_’和‘%’字符:--replicate-wild-dotable=my\_own\%db。如果在命令行中使用選項,可能需要雙反斜線或將選項值引起來,取決於命令解釋符。例如,用bash外殼則需要輸入--replicate-wild-do-table=my\\_own\\%db。 · --replicate-wild-ignore-table=db_name.tbl_name 告訴從服務器線程不要復制表匹配給出的通配符模式的語句。要想忽略多個表,應多次使用該選項,每個表使用一次。該選項可以跨數據庫進行更新。請讀取該選項後面的注意事項。例如:--replicate-wild-ignore-table=foo%.bar%不復制數據庫名以foo開始和表名以bar開始的表的更新。關於匹配如何工作的信息,參見--replicate-wild-do-table選項的描述。在選項值中包括通配符的規則與--replicate-wild-ignore-table相同。 · --replicate-rewrite-db=from_name->to_name 告訴從服務器如果默認數據庫(由USE所選擇)為主服務器上的from_name,則翻譯為to_name。只影響含有表的語句(不是類似CREATE DATABASE、DROP DATABASE和ALTER DATABASE的語句),並且只有from_name為主服務器上的默認數據庫時。該選項不可以跨數據庫進行更新。請注意在測試--replicate-*規則之前翻譯數據庫名。如果在命令行中使用該選項, ‘>’字符專用於命令解釋符,應將選項值引起來。例如:shell> mysqld --replicate-rewrite-db="olddb->newdb" · --replicate-same-server-id 將用於從服務器上。通常可以默認設置為0以防止循環復制中的無限循環。如果設置為1,該從服務器不跳過有自己的服務器id的事件;通常只在有很少配置的情況下有用。如果使用--logs-slave-updates不能設置為1。請注意默認情況下如果有從服務器的id,服務器I/O線程不將二進制日志事件寫入中繼日志(該優化可以幫助節省硬盤的使用)。因此如果想要使用--replicate-same-server-id,讓從服務器讀取自己的SQL線程執行的事件前,一定要用該選項啟動。 · --report-host=slave_name 從服務器注冊過程中報告給主服務器的主機名或IP地址。該值出現在主服務器上SHOW SLAVE HOSTS的輸出中。如果不想讓從服務器自己在主服務器上注冊,則不設置該值。請注意從服務器連接後,主服務器僅僅從TCP/IP套接字讀取從服務器的IP號是不夠的。由於 NAT和其它路由問題,IP可能不合法,不能從主服務器或其它主機連接從服務器。 · --report-port=slave_port 連接從服務器的TCP/IP端口號,從服務器注冊過程中報告給主服務器。只有從服務器幀聽非默認端口或如果有一個特殊隧道供主服務器或其它客戶連接從服務器時才設置它。如果你不確定,不設置該選項。 · --skip-slave-start 告訴從服務器當服務器啟動時不啟動從服務器線程。使用START SLAVE語句在以後啟動線程。 · --slave_compressed_protocol={0|1} 如果該選項設置為 1,如果從服務器和主服務器均支持,使用壓縮從服務器/主服務器協議。 · --slave-load-tmpdir=file_name 從服務器創建臨時文件的目錄名。該選項默認等於tmpdir系統變量的值。當從服務器SQL線程復制LOADDATA INFILE語句時,從中繼日志將待裝載的文件提取到臨時文件,然後將這些文件裝入到表中。如果裝載到主服務器上的文件很大,從服務器上的臨時文件也很大。因此,建議使用該選項告訴從服務器將臨時文件放到文件系統中有大量可用空間的目錄下。在這種情況下,也可以使用--relay-log選項將中繼日志放到該文件系統中,因為中繼日志也很大。--slave-load-tmpdir應指向基於硬盤的文件系統,而非基於內存的文件系統:從服務器需要用臨時文件在機器重啟時用於復制LOAD DATA INFILE。系統啟動過程中操作系統也不能清除該目錄。 · --slave-net-timeout=seconds 放棄讀之前從主服務器等候更多數據的秒數,考慮到連接中斷和嘗試重新連接。超時後立即開始第1次重試。由--master-connect-retry選項控制重試之間的間隔。 · --slave-skip-errors=[err_code1,err_code2,... | all] 通常情況,當出現錯誤時復制停止,這樣給你一個機會手動解決數據中的不一致性問題。該選項告訴從服務器SQL線程當語句返回任何選項值中所列的錯誤時繼續復制。如果你不能完全理解為什麼發生錯誤,則不要使用該選項。如果復制設置和客戶程序中沒有bug,並且MySQL自身也沒有bug,應不會發生停止復制的錯誤。濫用該選項會使從服務器與主服務器不能保存同步,並且你找不到原因。對於錯誤代碼,你應使用從服務器錯誤日志中錯誤消息提供的編號和SHOW SLAVE STATUS的輸出。你也可以(但不應)使用不推薦的all值忽略所有錯誤消息,不考慮所發生的錯誤。無需而言,如果使用該值,我們不能保證數據的完整性。在這種情況下,如果從服務器的數據與主服務器上的不相近請不要抱怨(或編寫bug報告)。已經警告你了。例如: --slave-skip-errors=1062,1053 --slave-skip-errors=all /*-------------------------------------備注---------------------------------------*/ 1、如果主服務器運行時沒有啟用--logs-bin,SHOW MASTER STATUS或mysqldump --master-data顯示的日志名和位置值為空。在這種情況下,當以後指定從服務器的日志文件和位置時需要使用的值為空字符串 ('')和4. 2、復制賬戶權限REPLICATION SLAVE、SUPER、RELOAD 3、更改主服務器信息CHANGE MASTER TO -> MASTER_HOST='master_host_name', -> MASTER_USER='master_user_name', -> MASTER_PASSWORD='master_pass', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position; 4、創建主服務器快照,記錄日志文件名、偏移量方法 FLUSH TABLES WITH READ LOCK;鎖表 SHOW MASTER STATUS;查看日志文件名、偏移量 UNLOCK TABLES;解除表鎖定