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