可以更改從屬服務器用於與主服務器進行連接和通訊的參數。
MASTER_USER,MASTER_PASSWORD,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_KEY和MASTER_SSL_CIPHER用於向從屬服務器提供有關如何與主服務器連接的信息。
即使對於在編譯時沒有SSL支持的從屬服務器,SSL選項(MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_KEY和MASTER_SSL_CIPHER)也可以被更改。它們被保存到master.info文件中,但是會被忽略,直到您使用一個SSL支持已啓用的服務器。
如果您不指定一個給定的參數,則它會保持其原有的值。例外情況在後面的討論中進行了說明。舉例說明,如果用於連接到您的MySQL主服務器的 密碼被更改了,您只需發佈這些語句,就可以告知從屬服務器新的密碼:
沒有必要指定沒有改變的參數(主機、接口、用戶等)。
MASTER_HOST和MASTER_PORT是主服務器主機和其TCP/IP接口的主機名(或IP地址)。注意,如果MASTER_HOST與localhost相等,那麼,和MySQL的其它部分一樣,接口可以被忽略(例如,如果可以使用Unix插槽文件)。
如果您指定了MASTER_HOST或MASTER_PORT,則從屬服務器會假定主服務器與以前不一樣(即使您指定的主機或接口值與當前值是一樣的。)在此情況下,主服務器二進制日誌的名稱和位置的原有值不再適用,因此,如果您不指定語句中的MASTER_LOG_FILE和MASTER_LOG_POS,MASTER_LOG_FILE=''和MASTER_LOG_POS=4會被靜默地添加。
在MASTER_LOG_FILE和MASTER_LOG_POS座標點,從屬服務器I/O線程在啓動之後從主服務器讀取。如果您只指定了其中一個,則從屬服務器不能指定RELAY_LOG_FILE或RELAY_LOG_POS。如果MSATER_LOG_FILE和MASTER_LOG_POS都沒有被指定,則從屬服務器會使用在CHANGE MASTER被髮布前的最後一個slave SQL thread座標。當您只想改變要使用的 密碼時,這可以確保複製的連續性。即使從屬服務器SQL線程落後於從屬服務器I/O線程,也可以確保複製的連續性。
CHANGE MASTER會刪除所有的中繼日誌文件並啓動一個新的日誌,除非您指定了RELAY_LOG_FILE或RELAY_LOG_POS。在此情況下,中繼日誌被保持;relay_log_purge全局變量被靜默地設置爲0。
CHANGE MASTER TO可以更新master.info和relay-log.info文件的內容。
當您擁有主服務器快照並擁有日誌和對應的偏移量時,CHANGE MASTER對於設置從屬服務器是有用的。在把快照載入從屬服務器之後,您可以在從屬服務器上運行CHANGE MASTER TO MASTER_LOG_FILE='log_name_on_master', MASTER_LOG_POS=log_offset_on_master。
舉例說明:
第一個例子可以更改主服務器及其二進制日誌座標。當想要設置從屬服務器來複制主服務器時使用。
第二個例子顯示了較少被使用的一個操作。當從屬服務器含有中繼日誌,並且您出於某種原因想要執行此日誌時使用。要這麼做時,不需要連接主服務器。您只需要使用CHANGE MASTER TO並啓動SQL線程(START SLAVE SQL_THREAD)。
您甚至可以在一個用於獨立非從屬服務器的非複製型設置中使用第二種操作,在崩潰之後進行復原。假設您的服務器已崩潰,同時您已恢復了備份。您想要重新播放服務器自己的二進制日誌(不是中繼日誌,而是正規的二進制文件),例如名爲myhost-bin.*。首先,應在安全的地方製作這些二進制日誌的備份,以防您沒有完全遵守以下步驟,意外地讓服務器清理了二進制文件。使用SET GLOBAL relay_log_purge=0,進一步增加安全性。然後啓動不含--log-bin選項的服務器。使用--replicate-same-server-id,--relay-log=myhost-bin(讓服務器相信,這些正規的二進制日誌是中繼日誌)和--skip-slave-startoptions選項。當服務器啓動後,發佈以下語句:
服務器會讀取並執行自己的二進制日誌,完成崩潰復原。當復原完成後,運行STOP SLAVE,關閉服務器,刪除master.info和relay-log.info,並使用原來的選項重新啓動服務器。
要讓服務器認爲它是一個從屬服務器,需要指定MASTER_HOST(甚至使用假值)。