溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在Mysql5.7中如何搭建主從復(fù)制

發(fā)布時(shí)間:2021-08-26 10:05:44 來源:億速云 閱讀:162 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要為大家展示了“在Mysql5.7中如何搭建主從復(fù)制”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“在Mysql5.7中如何搭建主從復(fù)制”這篇文章吧。

一、概述

主從復(fù)制可以實(shí)現(xiàn)對數(shù)據(jù)庫備份和讀寫分離:

為了避免服務(wù)的不可用以及保障數(shù)據(jù)的安全可靠性,我們至少需要部署兩臺或兩臺以上服務(wù)器來存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù),也就是我們需要將數(shù)據(jù)復(fù)制多份部署在多臺不同的服務(wù)器上,即使有一臺服務(wù)器出現(xiàn)故障了,其他服務(wù)器依然可以繼續(xù)提供服務(wù).
MySQL提供了主從復(fù)制功能以提高服務(wù)的可用性與數(shù)據(jù)的安全可靠性.
主從復(fù)制是指服務(wù)器分為主服務(wù)器和從服務(wù)器,主服務(wù)器負(fù)責(zé)讀和寫,從服務(wù)器只負(fù)責(zé)讀,主從復(fù)制也叫 master/slave,master是主,slave是從,但是并沒有強(qiáng)制,也就是說從也可以寫,主也可以讀,只不過一般我們不這么做。

二、主從復(fù)制架構(gòu)

一主多從架構(gòu):
在Mysql5.7中如何搭建主從復(fù)制
多主多從架構(gòu):
在Mysql5.7中如何搭建主從復(fù)制
主從復(fù)制原理:

  1. 當(dāng) master 主服務(wù)器上的數(shù)據(jù)發(fā)生改變時(shí),則將其改變寫入二進(jìn)制事件日志文件中

  2. salve 從服務(wù)器會(huì)在一定時(shí)間間隔內(nèi)對 master 主服務(wù)器上的二進(jìn)制日志進(jìn)行探測,探測其是否發(fā)生過改變,如果探測到 master 主服務(wù)器的二進(jìn)制事件日志發(fā)生了改變,則開始一個(gè) I/O Thread 請求 master 二進(jìn)制事件日志

  3. 同時(shí) master 主服務(wù)器為每個(gè) I/O Thread 啟動(dòng)一個(gè)dump Thread,用于向其發(fā)送二進(jìn)制事件日志

  4. slave 從服務(wù)器將接收到的二進(jìn)制事件日志保存至自己本地的中繼日志文件中

  5. salve 從服務(wù)器將啟動(dòng) SQL Thread 從中繼日志中讀取二進(jìn)制日志,在本地重放,使得其數(shù)據(jù)和主服務(wù)器保持一致;

  6. 最后 I/O Thread 和 SQL Thread 將進(jìn)入睡眠狀態(tài),等待下一次被喚醒

三、一主多從搭建

搭建環(huán)境:
1. Linux 版本 CentOS release 6.9 (Final)
2. mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz下載地址

1.解壓 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

#/usr/local下解壓
tar xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
#重命名文件
mv mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mysql

2.創(chuàng)建多實(shí)例數(shù)據(jù)目錄

cd /usr/local/mysql
mkdir data
cd data
#主
mkdir 3306
#從
mkdir 3307

在Mysql5.7中如何搭建主從復(fù)制
3.數(shù)據(jù)庫初始化

#mysql 安裝bin目錄下執(zhí)行
#initialize-insecure 表示不生成MySQL數(shù)據(jù)庫root用戶的隨機(jī)密碼,即root密碼為空

#初始化3306
./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3306 --user=mysql
#初始化3307
./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3307 --user=mysql

若出現(xiàn)錯(cuò)誤執(zhí)行
yum install libaio-devel.x86_64
yum -y install numactl在Mysql5.7中如何搭建主從復(fù)制
4.創(chuàng)建各個(gè)數(shù)據(jù)庫的配置文件my.cnf

注意:
1.建議在linux下創(chuàng)建文件防止windows 與 linux 編碼不一致
2.不同的實(shí)例下配置要修改端口號
3.將修改好的my.cnf分別放至3306、3307文件夾內(nèi)

[client]
port        = 3306
socket      = /usr/local/mysql/data/3306/mysql.sock
default-character-set=utf8

[mysqld]
port    = 3306
socket  = /usr/local/mysql/data/3306/mysql.sock
datadir = /usr/local/mysql/data/3306
log-error = /usr/local/mysql/data/3306/error.log
pid-file = /usr/local/mysql/data/3306/mysql.pid

character-set-server=utf8
lower_case_table_names=1
autocommit = 1

log-bin=mysql-bin
server-id=3306

5.多實(shí)例啟動(dòng)

切換到/usr/local/mysql-5.7.24/bin目錄下,使用 msyqld_safe 命令指定配置文件并啟動(dòng)MySQL服務(wù):

#其中 --defaults-file 是指定配置文件,& 符合表示后臺啟動(dòng)
./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

6.數(shù)據(jù)庫初始化配置

分別在各個(gè)實(shí)例內(nèi)進(jìn)行配置 如3306:

#客戶端連接
./mysql -uroot -p -P3306 -h227.0.0.1
#修改Mysql密碼
alter user 'root'@'localhost' identified by 'root';
#授權(quán)遠(yuǎn)程訪問(這樣遠(yuǎn)程客戶端才能訪問)
grant all privileges on *.* to root@'%' identified by 'root';
#刷新配置
flush privileges;

客戶端連接測試
在Mysql5.7中如何搭建主從復(fù)制
7.數(shù)據(jù)庫唯一id配置

1.確定各個(gè)實(shí)例正常啟動(dòng)無誤后進(jìn)行主從配置
2.關(guān)閉實(shí)例分別在各個(gè)實(shí)例的my.cnf文件加入以下配置

#/usr/local/mysql/bin 關(guān)閉實(shí)例
./mysqladmin -uroot -p -P3307 -h227.0.0.1 shutdown
./mysqladmin -uroot -p -P3306 -h227.0.0.1 shutdown

#新加的配置
log-bin=mysql-bin   	#表示啟用二進(jìn)制日志
server-id=3307 		#表示server編號,編號要唯一 建議和端口保持一致

加入完畢后啟動(dòng)各個(gè)實(shí)例

./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &

./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

7.主機(jī)設(shè)置
1.在主服務(wù)器上創(chuàng)建復(fù)制數(shù)據(jù)的賬號并授權(quán)

#在/usr/local/mysql/bin目錄下執(zhí)行 
 ./mysql -uroot -p -P3306 -h227.0.0.1
 grant replication slave on *.* to 'copy'@'%' identified by 'root';

2.查看主服務(wù)器狀態(tài)

# mysql主服務(wù)器默認(rèn)初始值:
#			File:mysql-bin.000001
#			Position:154

show master status;

3.如果主服務(wù)狀態(tài)不是初始狀態(tài),需要重置狀態(tài)

reset master;

7.從機(jī)設(shè)置

1.需要登錄到 3306|3307|3308的從機(jī)客戶端

#在/usr/local/mysql/bin目錄下執(zhí)行  多臺從機(jī)‘|’分隔
./mysql -uroot -p -P3308|3309|3310 -h227.0.0.1

2.查看從機(jī)狀態(tài)

#初始狀態(tài):Empty set 
show slave status;

3.若不是初始狀態(tài),重置一下

stop slave; 	#停止復(fù)制,相當(dāng)于終止從服務(wù)器上的IO和SQL線程
reset slave;

4.設(shè)置從機(jī)設(shè)置主機(jī)配置

change master to 
master_host='主機(jī)ip',master_user='copy',
master_port=主機(jī)端口,master_password='連接主機(jī)密碼',
master_log_file='mysql-bin.000001',master_log_pos=154;

5.執(zhí)行 開始復(fù)制命令

start slave;

6.查看從機(jī)狀態(tài)

show slave status \G;

在Mysql5.7中如何搭建主從復(fù)制
7.測試主從復(fù)制

在主數(shù)據(jù)庫中進(jìn)行創(chuàng)建表,從庫同步就算搭建成功了!
在Mysql5.7中如何搭建主從復(fù)制
若你在從庫進(jìn)行寫操作,則從服務(wù)器不再同步主庫數(shù)據(jù),在從庫中執(zhí)行此命令即可解決!

stop slave;
set global sql_slave_skip_counter =1;
start slave;
show slave status\G;

若主從復(fù)制速度較慢的話,執(zhí)行此命令

 slave-parallel-type=LOGICAL_CLOCK
 slave-parallel-workers=16
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 relay_log_recovery=ON

以上是“在Mysql5.7中如何搭建主從復(fù)制”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI