MySQL5.7主從復(fù)制搭建

一主一從搭建

環(huán)境說明

  1. VMware虛擬機(jī)振劳,系統(tǒng)使用CentOS 7
    • 2臺(tái)CentOS7,都安裝了MySQL5.7
    • 2臺(tái)CentOS7的hostname分別為:rabbit-103(主機(jī))吹菱,ip:192.168.250.103 和 rabbit-104(從機(jī)),ip:192.168.250.104
  2. MySQL5.7
  3. 注意:如果是使用克隆VMware虛擬機(jī),再克隆后钾怔,需要修改hostnameip地址蒙挑,網(wǎng)卡UUID宗侦,MySQL實(shí)例的UUID(在/var/lib/mysql/auto.cnf中修改)

Master(主機(jī))配置

1、在主機(jī)MySQL中配置文件中(/etc/my.cnf)忆蚀,添加如下配置信息矾利,注意:需要在[mysqld]配置分組下(麻煩仔細(xì)看配置說明哦

#【必選配置】
#主機(jī)服務(wù)ID
server_id=103
#設(shè)置binlog日志目錄(此處log_bin配置,相當(dāng)于配置了:log_bin馋袜、log_bin_basename男旗、log_bin_index)
log_bin=/var/lib/mysql/binlog/rabbit-103-bin

#【可選配置】(可以不用配 ,都有默認(rèn)值)
#開啟mysql實(shí)例只讀:(0讀寫欣鳖,1只讀)
#注意:當(dāng)前配置為主機(jī)察皇,一般主機(jī)都是支持讀寫,故這里配置為0
read_only=0

#設(shè)置binlog日志保留時(shí)長
#binlog_expire_logs_seconds=86400 #MySQL8.0配置泽台,單位為秒
expire_logs_days=1 # MySQL5.7配置什荣,單位為天

#單個(gè)binlog文件大小,默認(rèn)值為1GB
max_binlog_size=512M

#設(shè)置不同步的數(shù)據(jù)庫怀酷,多個(gè)多行配置
binlog_ignore_db=test
binlog_ignore_db=nacos
binlog_ignore_db=seata

#設(shè)置需要同步的數(shù)據(jù)庫稻爬,不設(shè)置表示全部數(shù)據(jù)庫,多個(gè)多行配置
binlog_do_db=book
binlog_do_db=cloud_order

#設(shè)置binlog格式蜕依,默認(rèn)是ROW桅锄,可選:ROW、STATEMENT 和 MIXED
binlog_format=ROW 
圖一

Slave(從機(jī))配置

1样眠、在從機(jī)的MySQL配置文件中(/etc/my.cnf)添加如下配置竞滓,注意:需要在[mysqld]配置分組下(麻煩仔細(xì)看配置說明哦

#【必配項(xiàng)】
#從服務(wù)器唯一ID
server_id=104

#【可配項(xiàng)】
#啟用中繼日志
relay_log=/var/lib/mysql/relay/rabbit-104-relay-bin

#開啟數(shù)據(jù)庫實(shí)例只讀模式
#這里由于是從機(jī)配置,一般從機(jī)為讀數(shù)據(jù)吹缔,故設(shè)置為只讀模式商佑。
#只讀模式,只對(duì)普通權(quán)限用戶有控制效果厢塘,當(dāng)普通用戶執(zhí)行修改操作時(shí)茶没,
#會(huì)拋出:ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement錯(cuò)誤
#super用戶 和 用戶權(quán)限有【ALL PRIVILEGES】不受控制肌幽,單可以設(shè)置super_read_only=1來讓super用戶也只能讀
read_only=1 

Master(主機(jī))建立賬戶,并給賬戶賦予主從復(fù)制的權(quán)限

# GRANT授權(quán)語句抓半,如果用戶不存在喂急,會(huì)自動(dòng)創(chuàng)建用戶
GRANT REPLICATION SLAVE ON *.* TO '賬戶名'@'從庫IP地址' IDENTIFIED BY '密碼'

示例:
GRANT REPLICATION SLAVE ON *.* TO 'slave01'@'192.168.250.104' IDENTIFIED BY '123456'

Slave(從機(jī))配置需要復(fù)制的Master(主機(jī))信息

1、先查看Master信息笛求,在Master主機(jī)上廊移,執(zhí)行:show master statusSQL語句(注意:是執(zhí)行SQL語句),并記住FilePosition這2個(gè)字段的值

Master信息

2探入、在從機(jī)上執(zhí)行如下SQL語句:

CHANGE MASTER TO
MASTER_HOST=主機(jī)IP地址,
MASTER_USER=剛才授權(quán)主從復(fù)制權(quán)限的賬號(hào)
MASTER_PASSWORD=主從復(fù)制賬號(hào)的密碼
MASTER_LOG_FILE=第一步查到的File字段值
MASTER_LOG_POS=第一步查到的Position字段值

#示例:
change master to 
master_host='192.168.250.103',
master_user='slave104',
master_password='123456',
master_log_file='rabbit-103-bin.000001',
master_log_pos=698;

3狡孔、啟動(dòng)從機(jī)復(fù)制,執(zhí)行SQL語句:start slave;
4蜂嗽、查看主從復(fù)制狀態(tài)苗膝,執(zhí)行SQL語句:show slave status\G;

slave狀態(tài)

停止主從復(fù)制

1、停止從機(jī)的主從復(fù)制(從機(jī)上執(zhí)行):stop slave;
2植旧、重置從機(jī)的主從復(fù)制(從機(jī)上執(zhí)行):reset slave; 重置后可以通過重新執(zhí)行 CHANGE MASTER TO ... 來重設(shè)置主從
3辱揭、重置主機(jī)的主從復(fù)制信息(主機(jī)上執(zhí)行):reset master; 【注意:該命令會(huì)重置binlog日志文件,慎用

常見搭建問題說明

1病附、主機(jī)UUID從機(jī)UUID重復(fù)问窃,在/var/lib/mysql/auto.cnf中修改MySQL的UUID,使主從機(jī)上的UUID不重復(fù)即可

UUID重復(fù)

2完沪、從機(jī)無法連接到主機(jī)泡躯,一般從以下幾點(diǎn)排查:

  • 從機(jī)與主機(jī)是否能夠網(wǎng)絡(luò)通訊,即在從機(jī)上ping一下主機(jī)丽焊,看網(wǎng)絡(luò)是否OK
  • 確認(rèn)主從復(fù)制賬號(hào)密碼是否正確
  • 確認(rèn)主機(jī)3306端口是否開放
  • 嘗試關(guān)閉CentOS防火墻较剃,看一下是否因?yàn)榉阑饓?dǎo)致無法連接到主機(jī)
    從機(jī)無法連接到主機(jī)

    3、如果啟動(dòng)start slave報(bào)錯(cuò)時(shí)技健,執(zhí)行SQL語句:reset slave写穴,然后重新執(zhí)行 CHANGE MASTER TO ...操作
    start slave錯(cuò)誤

    4、如果執(zhí)行從機(jī)配置相關(guān)SQL語句出現(xiàn):STOP SLAVE FOR錯(cuò)誤時(shí)雌贱,則先執(zhí)行SQL:stop slave語句啊送,來停止主從復(fù)制
    stop slave錯(cuò)誤

    5、登錄的賬戶無權(quán)限操作欣孤,此時(shí)請(qǐng)使用有權(quán)的super用戶登錄進(jìn)行執(zhí)行SQL
    無權(quán)限

雙主雙從(主主互備馋没,主寫從讀)

環(huán)境說明

  1. VMware虛擬機(jī),系統(tǒng)使用CentOS 7
    • 4臺(tái)CentOS7降传,都安裝了MySQL5.7
    • 4臺(tái)CentOS7的hostname 和 ip地址 分別為:
rabbit-103(主機(jī))篷朵,ip:192.168.250.103
rabbit-104(主機(jī)),ip:192.168.250.104
rabbit-105(主機(jī)),ip:192.168.250.105
rabbit-106(主機(jī))声旺,ip:192.168.250.106
  1. MySQL5.7
  2. 注意:如果是使用克隆VMware虛擬機(jī)笔链,再克隆后,需要修改hostname腮猖、ip地址鉴扫,網(wǎng)卡UUIDMySQL實(shí)例的UUID(在/var/lib/mysql/auto.cnf中修改)

2臺(tái)Master(主機(jī))配置

  • 修改MySQL中的配置文件(/etc/my.cnf)澈缺,與一主一從配置一樣坪创,只多了一個(gè)必配項(xiàng):log_slave_updates(作用見配置說明)
  1. rabbit-103主機(jī)配置
#【必選配置】
#主機(jī)服務(wù)ID
server_id=103
#啟用binlog
log_bin=/var/lib/mysql/binlog/rabbit-103-bin
#雙主相互復(fù)制時(shí),設(shè)置MySQL實(shí)例切換為從數(shù)據(jù)庫時(shí)姐赡,有修改操作也要寫入binlog日志
log_slave_updates

#【可選配置】(可以不用配 莱预,都有默認(rèn)值)
#啟用中繼日志,由于雙主也會(huì)作為相互的從機(jī)雏吭,故配置中繼日志
relay_log=/var/lib/mysql/relay/rabbit-103-relay-bin
#開啟mysql實(shí)例只讀:(0讀寫锁施,1只讀)
#注意:當(dāng)前配置為主機(jī)陪踩,一般主機(jī)都是支持讀寫杖们,故這里配置為0
read_only=0
#設(shè)置binlog日志保留時(shí)長
#binlog_expire_logs_seconds=86400 #MySQL8.0配置,單位為秒
expire_logs_days=1 # MySQL5.7配置肩狂,單位為天
#單個(gè)binlog文件大小摘完,默認(rèn)值為1GB
max_binlog_size=512M
#設(shè)置不同步的數(shù)據(jù)庫,多個(gè)多行配置
binlog_ignore_db=test
binlog_ignore_db=nacos
binlog_ignore_db=seata
#設(shè)置需要同步的數(shù)據(jù)庫傻谁,不設(shè)置表示全部數(shù)據(jù)庫孝治,多個(gè)多行配置
binlog_do_db=atguigudb
binlog_do_db=cloud_order
#設(shè)置binlog格式,默認(rèn)是ROW审磁,可選:ROW谈飒、STATEMENT 和 MIXED
binlog_format=ROW
  1. rabbit-104配置
#【必配項(xiàng)】
#從服務(wù)器唯一ID
server_id=104
log_bin=/var/lib/mysql/binlog/rabbit-104-bin
log_slave_updates

#【可選配置】
relay_log=/var/lib/mysql/relay/rabbit-104-relay-bin
read_only=0
expire_logs_days=1
max_binlog_size=512M
binlog_ignore_db=test
binlog_ignore_db=nacos
binlog_ignore_db=seata
binlog_do_db=atguigudb
binlog_do_db=cloud_order
binlog_format=ROW

2臺(tái)從機(jī)配置

  • 修改從機(jī)的配置文件(/etc/my.cnf),與一主一從的從機(jī)配置無差異
  1. rabbit-105配置
#【必配項(xiàng)】
server_id=105

#【可配項(xiàng)】
#啟用中繼日志
relay_log=/var/lib/mysql/relay/rabbit-105-relay-bin
#開啟數(shù)據(jù)庫實(shí)例只讀模式
#這里由于是從機(jī)配置态蒂,一般從機(jī)為讀數(shù)據(jù)杭措,故設(shè)置為只讀模式。
#只讀模式钾恢,只對(duì)普通權(quán)限用戶有控制效果手素,當(dāng)普通用戶執(zhí)行修改操作時(shí),
#會(huì)拋出:ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement錯(cuò)誤
#super用戶 和 用戶權(quán)限有【ALL PRIVILEGES】不受控制瘩蚪,單可以設(shè)置super_read_only=1來讓super用戶也只能讀
read_only=1
  1. rabbit-106配置
#【必配項(xiàng)】
server_id=106
#【可配項(xiàng)】
relay_log=/var/lib/mysql/relay/rabbit-106-relay-bin
read_only=1

創(chuàng)建主從復(fù)制賬號(hào)泉懦,并授予主從復(fù)制權(quán)限

  • 為了方便,2臺(tái)主機(jī)創(chuàng)建相同賬號(hào)(注意:2臺(tái)主機(jī)都要?jiǎng)?chuàng)建
  • 又因?yàn)?臺(tái)機(jī)器要相互設(shè)置主從疹瘦,故賬號(hào)host設(shè)置為通用[%]
# 注意:2臺(tái)主機(jī)上都要?jiǎng)?chuàng)建該賬號(hào)
# MySQL5.7中崩哩,給賬號(hào)授權(quán)命令時(shí),如果賬號(hào)不存在言沐,會(huì)自動(dòng)創(chuàng)建該賬號(hào)
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';

2臺(tái)從機(jī)琢锋,分別設(shè)置自己的主機(jī)

  • rabbit-105從機(jī)設(shè)置的主機(jī)為rabbit1-03辕漂,rabbit-106從機(jī)設(shè)置主機(jī)為rabbit-104
  1. rabbit-105設(shè)置主機(jī)為rabbit-103,并開啟主從復(fù)制
    • 先通過show master status查看rabbit-103上的binlog信息吴超,然后記住FilePosition字段信息
    • 再進(jìn)行如下配置
#rabbit-105上钉嘹,設(shè)置103的binlog file和position值
mysql> change master to 
master_host='192.168.250.103',
master_user='slave',
master_password='slave',
master_log_file='rabbit-103-bin.000001',
master_log_pos=154;

#啟動(dòng)主從復(fù)制
mysql> start slave;
  1. rabbit-106設(shè)置主機(jī)為rabbit-104,并開啟主從復(fù)制
    • 先通過show master status查看rabbit-104上的binlog信息鲸阻,然后記住FilePosition字段信息
    • 再進(jìn)行如下配置
#rabbit-106上跋涣,設(shè)置104的binlog file和position值
mysql> change master to 
master_host='192.168.250.104',
master_user='slave',
master_password='slave',
master_log_file='rabbit-104-bin.000001',
master_log_pos=154;

#啟動(dòng)主從復(fù)制
mysql> start slave;
  1. 兩臺(tái)從機(jī),通過show slave status\G; 查看主從同步狀態(tài)是否OK


    從機(jī)狀態(tài)

2臺(tái)主機(jī)相互復(fù)制配置(即相互作為對(duì)方從機(jī))

  1. rabbit-103配置作為rabbit-104的從機(jī)(跟rabbit-106配置一樣)
mysql> change master to 
master_host='192.168.250.104',
master_user='slave',
master_password='slave',
master_log_file='rabbit-104-bin.000001',
master_log_pos=154;
# 啟動(dòng)主從復(fù)制
mysql> start slave;
  1. rabbit-104配置作為rabbit-103的從機(jī)(跟rabbit-105配置一樣)
mysql> change master to 
master_host='192.168.250.103',
master_user='slave',
master_password='slave',
master_log_file='rabbit-103-bin.000001',
master_log_pos=154;

#啟動(dòng)主從復(fù)制
mysql> start slave;

驗(yàn)證

  • 通過show slave status\G; 查看每臺(tái)MySQL上的主從配置和狀態(tài)是否正常
  • 在rabbit-103或rabbit-104主機(jī)上插入數(shù)據(jù)鸟悴,觀察另外3臺(tái)是否同步數(shù)據(jù)


    驗(yàn)證數(shù)據(jù)同步
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陈辱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子细诸,更是在濱河造成了極大的恐慌沛贪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件震贵,死亡現(xiàn)場(chǎng)離奇詭異利赋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)猩系,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門媚送,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寇甸,你說我怎么就攤上這事塘偎。” “怎么了拿霉?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵吟秩,是天一觀的道長。 經(jīng)常有香客問我绽淘,道長涵防,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任收恢,我火速辦了婚禮武学,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伦意。我一直安慰自己火窒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布驮肉。 她就那樣靜靜地躺著熏矿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上票编,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天褪储,我揣著相機(jī)與錄音,去河邊找鬼慧域。 笑死鲤竹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昔榴。 我是一名探鬼主播辛藻,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼互订!你這毒婦竟也來了吱肌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤仰禽,失蹤者是張志新(化名)和其女友劉穎氮墨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吐葵,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡规揪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了折联。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粒褒。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡识颊,死狀恐怖诚镰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祥款,我是刑警寧澤清笨,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站刃跛,受9級(jí)特大地震影響抠艾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桨昙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一检号、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛙酪,春花似錦齐苛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春玛痊,著一層夾襖步出監(jiān)牢的瞬間汰瘫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工擂煞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留混弥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓对省,卻偏偏與公主長得像剑逃,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子官辽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容