CHANGE MASTER TO master_def [, master_def] ...
master_def:
MASTER_HOST = 'host_name'
| MASTER_USER = 'user_name'
| MASTER_PASSWORD = 'password'
| MASTER_PORT = port_num
| MASTER_CONNECT_RETRY = count
| MASTER_LOG_FILE = 'master_log_name'
| MASTER_LOG_POS = master_log_pos
| RELAY_LOG_FILE = 'relay_log_name'
| RELAY_LOG_POS = relay_log_pos
| MASTER_SSL = {0|1}
| MASTER_SSL_CA = 'ca_file_name'
| MASTER_SSL_CAPATH = 'ca_directory_name'
| MASTER_SSL_CERT = 'cert_file_name'
| MASTER_SSL_KEY = 'key_file_name'
| MASTER_SSL_CIPHER = 'cipher_list'
可以更改從屬服務器用于與主服務器進行連接和通訊的參數。
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主服務器的 密碼被更改了,您只需發布這些語句,就可以告知從屬服務器新的密碼:
mysql> STOP SLAVE; -- if replication was running
mysql> CHANGE MASTER TO MASTER_PASSWORD='new3cret';
mysql> START SLAVE; -- if you want to restart replication
沒有必要指定沒有改變的參數(主機、接口、用戶等)。
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。
舉例說明:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master2.mycompany.com',
-> MASTER_USER='replication',
-> MASTER_PASSWORD='bigs3cret',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='master2-bin.001',
-> MASTER_LOG_POS=4,
-> MASTER_CONNECT_RETRY=10;
mysql> CHANGE MASTER TO
-> RELAY_LOG_FILE='slave-relay-bin.006',
-> RELAY_LOG_POS=4025;
第一個例子可以更改主服務器及其二進制日志坐標。當想要設置從屬服務器來復制主服務器時使用。
第二個例子顯示了較少被使用的一個操作。當從屬服務器含有中繼日志,并且您出于某種原因想要執行此日志時使用。要這么做時,不需要連接主服務器。您只需要使用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-start options選項。當服務器啟動后,發布以下語句:
mysql> CHANGE MASTER TO
-> RELAY_LOG_FILE='myhost-bin.153',
-> RELAY_LOG_POS=410,
-> MASTER_HOST='some_dummy_string';
mysql> START SLAVE SQL_THREAD;
服務器會讀取并執行自己的二進制日志,完成崩潰復原。當復原完成后,運行STOP SLAVE,關閉服務器,刪除master.info和relay-log.info,并使用原來的選項重新啟動服務器。
要讓服務器認為它是一個從屬服務器,需要指定MASTER_HOST(甚至使用假值)。