【MySQL】MySQL主從之change master語(yǔ)法

前言:在我們配置主從復(fù)制的時(shí)候,在從庫(kù)上會(huì)用到change master語(yǔ)句,該語(yǔ)句用于確定主庫(kù)的IP、用戶(hù)名、密碼、binlog文件、binlog位置等信息。

語(yǔ)法

change master基本語(yǔ)法以及參數(shù)如下:

CHANGE MASTER TO option [, option] ...  
  
option:  
    MASTER_BIND = 'interface_name'  
  | MASTER_HOST = 'host_name'  
  | MASTER_USER = 'user_name'  
  | MASTER_PASSWORD = 'password'  
  | MASTER_PORT = port_num  
  | MASTER_CONNECT_RETRY = interval  
  | MASTER_RETRY_COUNT = count  
  | MASTER_DELAY = interval  
  | MASTER_HEARTBEAT_PERIOD = interval  
  | MASTER_LOG_FILE = 'master_log_name'  
  | MASTER_LOG_POS = master_log_pos  
  | MASTER_AUTO_POSITION = {0|1}  
  | 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_CRL = 'crl_file_name'  
  | MASTER_SSL_CRLPATH = 'crl_directory_name'  
  | MASTER_SSL_KEY = 'key_file_name'  
  | MASTER_SSL_CIPHER = 'cipher_list'  
  | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}  
  | IGNORE_SERVER_IDS = (server_id_list)  
  
server_id_list:  
    [server_id [, server_id] ... ]

執(zhí)行change master語(yǔ)句前如果從機(jī)上slave io及sql線(xiàn)程已經(jīng)啟動(dòng),需要先停止(執(zhí)行stop slave)。
change master to后面不指定某個(gè)參數(shù)的話(huà),該參數(shù)保留原值或默認(rèn)值。所以后續(xù)如果某些參數(shù)沒(méi)有更改的話(huà),change master to后無(wú)需帶該參數(shù),例如我們只改變了用于復(fù)制的用戶(hù)密碼,那么change master to只需針對(duì)MASTER_PASSWORD選項(xiàng)作出修改即可,例如:

mysql> stop slave;   
mysql> change master to master_password='new_password';  
mysql> start slave;   
參數(shù)解釋

MASTER_HOST, MASTER_USER, MASTER_PASSWORD,MASTER_PORT四個(gè)選項(xiàng)提供了slave從機(jī)連接到master主機(jī)的信息。

MASTER_HOST 與 MASTER_PORT:
分別代表master主機(jī)名(或IP地址)及mysql實(shí)例端口號(hào)。
注意: 復(fù)制不能使用unix socet文件,必須使用tcp/ip 連接到master。
如果我們指定MASTER_HOST 與 MASTER_PORT參數(shù),slave會(huì)認(rèn)為master與之前的不是同一個(gè)(即便MASTER_HOST 與 MASTER_PORT所帶的參數(shù)與之前相同),之前指定的master的binlog文件名及位置將不再適用。所以如果我們?cè)诤竺娌幻鞔_指定MASTER_LOG_FILE 和 MASTER_LOG_POS 的參數(shù)值,那么MASTER_LOG_FILE='' 以及 MASTER_LOG_POS=4 將會(huì)默認(rèn)的追加到后面。
設(shè)置MASTER_HOST為空(MASTER_HOST=' ')與不設(shè)置該參數(shù)是不同的,mysql5.5開(kāi)始,將MASTER_HOST設(shè)為空將會(huì)失敗并報(bào)錯(cuò)【驗(yàn)證】
MASTER_USER 與 MASTER_PASSWORD:
連接到master主機(jī)復(fù)制賬戶(hù)所對(duì)應(yīng)的用戶(hù)名及密碼。
mysql5.6.4及其后續(xù)版本,MASTER_USER不能設(shè)置為空;當(dāng)明確設(shè)置MASTER_PASSWORD參數(shù)時(shí),MASTER_USER 不能設(shè)置為空或不進(jìn)行設(shè)置【驗(yàn)證2.1實(shí)例】。
MASTER_PASSWORD參數(shù)對(duì)應(yīng)的密碼長(zhǎng)度最大為32位字符【驗(yàn)證】,如果字符超長(zhǎng)(超過(guò)32位),語(yǔ)句會(huì)執(zhí)行成功,但超出的長(zhǎng)度會(huì)被截取掉,mysql復(fù)制的這個(gè)問(wèn)題在mysql5.7版本中得到了修復(fù)。
###### MASTER_LOG_FILE 與 MASTER_LOG_POS:
這兩項(xiàng)確定slave的io線(xiàn)程下次開(kāi)始執(zhí)行時(shí)從master開(kāi)始讀取的位置坐標(biāo),RELAY_LOG_FILE 與 RELAY_LOG_POS這兩項(xiàng)確定slave的sql線(xiàn)程下次開(kāi)始執(zhí)行時(shí)從relay log開(kāi)始讀取的位置坐標(biāo)。如果我們指定了MASTER_LOG_FILE 或 MASTER_LOG_POS中的任意一項(xiàng),就不能再指定RELAY_LOG_FILE 或 RELAY_LOG_POS,也不能指定MASTER_AUTO_POSITION = 1 (mysql5.6.5及其后續(xù)版本)。如果二者都沒(méi)有指定,slave使用上次slave sql線(xiàn)程保存的位置。
RELAY_LOG_FILE 與 RELAY_LOG_POS:
change master to操作刪除所有relay log文件并創(chuàng)建一個(gè)新的,除非我們指定RELAY_LOG_FILE 或 RELAY_LOG_POS。如果全局變量relay_log_purge設(shè)置為0(默認(rèn)為ON),relay log也將會(huì)保持。
mysql5.6.2之前,RELAY_LOG_FILE需要配置絕對(duì)路徑,mysql5.6.2及其后續(xù)版本,可以配置相對(duì)路徑(相對(duì)mysql的data目錄)。
MASTER_AUTO_POSITION:
該參數(shù)在mysql5.6.5版本引入,如果進(jìn)行change master to時(shí)使用MASTER_AUTO_POSITION = 1,slave連接master將使用基于GTID的復(fù)制協(xié)議。
使用基于GTID協(xié)議的復(fù)制,slave會(huì)告訴master它已經(jīng)接收到或執(zhí)行了哪些事務(wù)。計(jì)算這個(gè)集,slave需要讀取全局參數(shù)gtid_executed以及通過(guò)show slave status獲取的參數(shù)Retrieved_gtid_set。
結(jié)果集作為初次握手的一部分,發(fā)送到master,master發(fā)回它已經(jīng)執(zhí)行的且不在結(jié)果集這部分的所有事務(wù)。如果這些事務(wù)在master的binlog文件中已經(jīng)被清除,master將會(huì)發(fā)送一個(gè)ER_MASTER_HAS_PURGED_REQUIRED_GTIDS錯(cuò)誤信息到slave,復(fù)制將不會(huì)開(kāi)啟。
使用基于GTID的復(fù)制時(shí)(MASTER_AUTO_POSITION = 1),首先要開(kāi)啟gtid_mode(在my.cnf中設(shè)置gtid-mode = ON),MASTER_LOG_FILE 與 MASTER_LOG_POS也不能使用,否則會(huì)報(bào)錯(cuò)。
使用GTID后想要恢復(fù)到老的基于文件的復(fù)制協(xié)議,在change master to時(shí)需要指定MASTER_AUTO_POSITION = 0以及MASTER_LOG_FILE 或 MASTER_LOG_POSITION中至少一項(xiàng)。
MASTER_CONNECT_RETRY:
重連到master時(shí)的超時(shí)等待時(shí)間,默認(rèn)為60秒。
MASTER_RETRY_COUNT:
mysql5.6.1引入該參數(shù),限制重連次數(shù)以及更新show slave status輸出的Master_Retry_Count列。默認(rèn)值是24 * 3600 = 86400。MASTER_RETRY_COUNT主要用于替代mysqld服務(wù)器參數(shù) --master-retry-count(該參數(shù)在mysql5.6.1及其后續(xù)版本廢除)。MASTER_RETRY_COUNT = 0表示重連次數(shù)無(wú)限制。
MASTER_HEARTBEAT_PERIOD:
設(shè)置復(fù)制心跳的周期,取值范圍為0 到 4294967秒。精確度可以達(dá)到毫秒,最小的非0值是0.001秒。心跳信息由master在主機(jī)binlog日志文件在設(shè)定的間隔時(shí)間內(nèi)沒(méi)有收到新的事件時(shí)發(fā)出,以便slave知道m(xù)aster是否正常。
slave連接到master后,該參數(shù)可通過(guò)mysql.slave_master_info表查看。默認(rèn)值為slave_net_timeout的值除以2,設(shè)置為0表示完全的禁用心跳。
MASTER_DELAY:
默認(rèn)值為0,取值范圍為0至2^31–1,表示slave至少落后master的復(fù)制時(shí)間。來(lái)自master的事件不直接執(zhí)行,而是至少等到master執(zhí)行完該該事件MASTER_DELAY所指定的時(shí)間間隔后才執(zhí)行。
MASTER_BIND:
在slave復(fù)制從機(jī)多網(wǎng)絡(luò)接口的情況下使用,以確定用哪一個(gè)slave網(wǎng)絡(luò)接口連接到master。該參數(shù)在mysql5.6.2版本加入,同時(shí)也支持MySQL Cluster NDB 7.3.1及其后續(xù)版本。
該參數(shù)可通過(guò)show slave status的Master_Bind列進(jìn)行查看,如果啟動(dòng)mysql時(shí)指定了--master-info-repository=TABLE,也可通過(guò)mysql.slave_master_info表查看(Bind列)。
IGNORE_SERVER_IDS = (server_id_list):

server_id_list: [server_id [, server_id] ... ]
后面接以逗號(hào)分隔的0個(gè)或多個(gè)server-id,主要用于多主復(fù)制或環(huán)形復(fù)制的情況,處于復(fù)制鏈條中間的服務(wù)器異常,可以通過(guò)以下語(yǔ)句跳過(guò)出問(wèn)題的MySQL實(shí)例。

mysql> CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS= [server_id [, server_id] ... ]  

清除忽略的主機(jī)列表使用如下命令:

mysql> CHANGE MASTER TO IGNORE_SERVER_IDS = ();  
MASTER_SSL*:
該選項(xiàng)提供使用ssl連接的信息。它們保存在master的信息表,即使slave沒(méi)有使用SSL選項(xiàng)編譯,這些參數(shù)依然可以更改,只不過(guò)會(huì)被忽略。MASTER_SSL_CRL 與 MASTER_SSL_CRLPATH 在 MySQL 5.6.3版本加入。

原文地址:
http://blog.csdn.net/jesseyoung/article/details/41942809

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、復(fù)制概述: MySQL內(nèi)建的復(fù)制功能是構(gòu)建大型,高性能應(yīng)用程序的基礎(chǔ)。將mysql的數(shù)據(jù)分布到多個(gè)系統(tǒng)上去,這...
    魔法師_閱讀 5,753評(píng)論 0 5
  • 從開(kāi)始放假回來(lái)的那一刻,自己先前做的計(jì)劃全部泡湯。馬不停蹄的兼職,家務(wù),小孩,應(yīng)酬,手機(jī),吃吃喝喝,每一天過(guò)得就像...
    叫我梅芳就好閱讀 285評(píng)論 0 0
  • 鮮血染紅了盔甲 盼望再看你一眼不變的容顏 前世今生的約定 不過(guò)一場(chǎng)過(guò)眼云煙 為你披甲上馬 斬殺千軍萬(wàn)馬 出征時(shí)刻 ...
    夢(mèng)之幻舞閱讀 173評(píng)論 0 0
  • 今天是周六,也是參加“21天中國(guó)式眾籌原創(chuàng)挑戰(zhàn)”第七天,是不是可以讓思想開(kāi)開(kāi)小差,寫(xiě)點(diǎn)其它話(huà)題呢?連上帝他老人家都...
    Hao思嘉閱讀 364評(píng)論 0 1
  • 成長(zhǎng),是一個(gè)殘忍又美好的詞語(yǔ),當(dāng)我們作為過(guò)來(lái)人再去看正在走或馬上要走你走過(guò)的路時(shí),你總是忍不住要把你遇到的問(wèn)題告訴...
    梧桐雨兒閱讀 408評(píng)論 0 1

友情鏈接更多精彩內(nèi)容