一主一從搭建
環(huán)境說明
- 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
- MySQL5.7
- 注意:如果是使用克隆VMware虛擬機(jī),再克隆后钾怔,需要修改
hostname
、ip地址
蒙挑,網(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 status
SQL語句(注意:是執(zhí)行SQL語句),并記住File
和Position
這2個(gè)字段的值
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;
停止主從復(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ù)即可
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ī)
3、如果啟動(dòng)start slave
報(bào)錯(cuò)時(shí)技健,執(zhí)行SQL語句:reset slave
写穴,然后重新執(zhí)行CHANGE MASTER TO ...
操作
4、如果執(zhí)行從機(jī)配置相關(guān)SQL語句出現(xiàn):STOP SLAVE FOR
錯(cuò)誤時(shí)雌贱,則先執(zhí)行SQL:stop slave
語句啊送,來停止主從復(fù)制
5、登錄的賬戶無權(quán)限操作欣孤,此時(shí)請(qǐng)使用有權(quán)的super用戶登錄進(jìn)行執(zhí)行SQL
雙主雙從(主主互備馋没,主寫從讀)
環(huán)境說明
- 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
- MySQL5.7
- 注意:如果是使用克隆VMware虛擬機(jī)笔链,再克隆后,需要修改
hostname
腮猖、ip地址
鉴扫,網(wǎng)卡UUID
,MySQL實(shí)例的UUID
(在/var/lib/mysql/auto.cnf中修改)
2臺(tái)Master(主機(jī))配置
- 修改MySQL中的配置文件(/etc/my.cnf)澈缺,與一主一從配置一樣坪创,只多了一個(gè)必配項(xiàng):
log_slave_updates
(作用見配置說明)
- 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
- 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ī)配置無差異
- 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
- 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
- rabbit-105設(shè)置主機(jī)為rabbit-103,并開啟主從復(fù)制
- 先通過show master status查看rabbit-103上的binlog信息吴超,然后記住
File
和Position
字段信息 - 再進(jìn)行如下配置
- 先通過show master status查看rabbit-103上的binlog信息吴超,然后記住
#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;
- rabbit-106設(shè)置主機(jī)為rabbit-104,并開啟主從復(fù)制
- 先通過show master status查看rabbit-104上的binlog信息鲸阻,然后記住
File
和Position
字段信息 - 再進(jìn)行如下配置
- 先通過show master status查看rabbit-104上的binlog信息鲸阻,然后記住
#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;
-
兩臺(tái)從機(jī),通過show slave status\G; 查看主從同步狀態(tài)是否OK
2臺(tái)主機(jī)相互復(fù)制配置(即相互作為對(duì)方從機(jī))
- 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;
- 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ù)