更新時(shí)間:2020-08-07 11:39:36 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1696次
相信有些初學(xué)java的小伙伴對(duì)mysql主從復(fù)制搭建步驟還不是很了解,下面就由動(dòng)力節(jié)點(diǎn)java培訓(xùn)學(xué)校的小編就來告訴大家該如何做。
環(huán)境:
linux64位,一臺(tái)機(jī)器兩個(gè)實(shí)例,主庫(kù)3306端口,從庫(kù)3307端口
步驟:
一、下載安裝
先下載安裝mysql,這里使用了5.7.21版本,具體過程不做詳細(xì)說明,可自行查資料如何下載
二、配置
1.master配置,/etc/my.cnf文件入下
[mysqld]
port=3306
server-id=1
basedir=/home/shared_disk/mysql-5.7.21
datadir=/home/shared_disk/mysql-5.7.21/data
socket=/home/shared_disk/mysql-5.7.21/data/mysql.sock
symbolic-links=0
log-error=/home/shared_disk/mysql-5.7.21/data/error.log
pid-file=/home/shared_disk/mysql-5.7.21/data/mysql.pid
#skip-grant-tables
#開啟gtid模式,global transaction identified
gtid-mode=on
#保證gtid強(qiáng)一致性
enforce-gtid-consistency=1
#slave記錄binlog,否則slave執(zhí)行完relay log后就刪了,找不到slave的執(zhí)行記錄
log_slave_updates
#按行記錄binlog
binlog_format=row
#binlog文件名
log-bin=/home/shared_disk/mysql_datadir/mysql-bin
#需要記錄binlog的數(shù)據(jù)庫(kù),即需要同步的數(shù)據(jù)庫(kù),同步是通過binlog實(shí)現(xiàn)的
binlog-do-db=allen
#不需要記錄binlog的數(shù)據(jù)庫(kù)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
其中紅色部分是主從同步必須的配置
2.啟動(dòng)主庫(kù),安裝到系統(tǒng)服務(wù)的直接service命令啟動(dòng)即可,沒安裝的運(yùn)行mysqld --defaults-file=/etc/my.cnf --user=mysql &
3.登錄主庫(kù),創(chuàng)建主從復(fù)制的賬號(hào)
create user 'sync'@'localhost' identified by 'sync';
給賬號(hào)授權(quán)
grant file,replication slave on *.* to 'sync'@'localhost' identified by 'sync';
4.slave配置
配置文件/etc/my-slave.cnf入下
[mysqld]
port=3307
server-id=2
basedir=/home/shared_disk/mysql-slave
datadir=/home/shared_disk/mysql-slave/data
socket=/home/shared_disk/mysql-slave/data/mysql.sock
symbolic-links=0
log-error=/home/shared_disk/mysql-slave/data/error.log
pid-file=/home/shared_disk/mysql-slave/data/mysql.pid
#skip-grant-tables
gtid-mode=on
enforce-gtid-consistency=1
log_slave_updates
binlog_format=row
log-bin=/home/shared_disk/mysql_datadir/mysql-bin
#從庫(kù)啟動(dòng)時(shí)跳過自動(dòng)啟動(dòng)slave這一步
skip_slave_start=1
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
5.啟動(dòng)從庫(kù),service命令或mysqld --defaults-file=/etc/my-slave.cnf --user=mysql &
啟動(dòng)后登錄進(jìn)去,執(zhí)行
stop slave;
change master to master_host='locahost',master_port=3306,master_user='sync',master_password='sync',master_auto_position=1;
start slave;
show slave status\G;
看到以下兩個(gè)YES即說明主從已經(jīng)搭建成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
PS:
當(dāng)slave遇到問題時(shí)候,我們可以show slave status\G;看到同步情況
Retrieved_Gtid_Set: 9461bcc7-4850-11e8-a9f7-525400045eeb:1-7
Executed_Gtid_Set: 4f7a4829-9a29-11e8-aa21-525400045eeb:1-5,9461bcc7-4850-11e8-a9f7-525400045eeb:1-7。
其中9461bcc7-4850-11e8-a9f7-525400045eeb是主庫(kù)的mysql實(shí)例唯一id,4f7a4829-9a29-11e8-aa21-525400045eeb是從庫(kù)的mysql實(shí)例唯一id,
Retrieved_Gtid_Set和Executed_Gtid_Set分別為已接收的和已執(zhí)行的gtid,已執(zhí)行的gtid中有一個(gè)和Retrieved_Gtid一樣的,表明是執(zhí)行了從主庫(kù)同步過來的事務(wù),另一個(gè)則是本機(jī)自己執(zhí)行的事務(wù)。
假設(shè)現(xiàn)在Executed_Gtid_Set如下:
Executed_Gtid_Set: 4f7a4829-9a29-11e8-aa21-525400045eeb:1-5,9461bcc7-4850-11e8-a9f7-525400045eeb:1-3
我們可以看到同步的gtid從4之后就沒執(zhí)行了,應(yīng)該是遇到錯(cuò)誤了導(dǎo)致slave停止了,我們可以用以下操作跳過第四個(gè)gtid,讓slave繼續(xù)工作
stop slave;
set gtid_next='9461bcc7-4850-11e8-a9f7-525400045eeb:4';
begin;
commit;
set gtid_next='automatic';
start slave;
show slave status\G;
原理就是讓下一個(gè)事務(wù)指到第四個(gè),然后begin接著commit,中間為空實(shí)現(xiàn),讓slave以為這個(gè)事務(wù)執(zhí)行成功了。
三、驗(yàn)證
主庫(kù)建表,插入數(shù)據(jù),去從庫(kù)看是否存在相同數(shù)據(jù)。
從庫(kù)使用show slave status\G;命令查看Retrieved_Gtid_Set和Executed_Gtid_Set。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)學(xué)校的小編針對(duì)“mysql主從復(fù)制搭建步驟”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743