手把手教你在Mysql5.7中搭建主從復(fù)制

在mysql5.7中如何搭建主從復(fù)制?下面這篇文章給大家介紹mysql5.7-主從復(fù)制搭建步驟,有需要的朋友可以學(xué)習(xí)了解一下~

手把手教你在Mysql5.7中搭建主從復(fù)制

一、概述

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

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

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

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

  1. 當(dāng) master 主服務(wù)器上的數(shù)據(jù)發(fā)生改變時(shí),則將其改變寫(xiě)入二進(jìn)制事件日志文件中
  2. salve 從服務(wù)器會(huì)在一定時(shí)間間隔內(nèi)對(duì) master 主服務(wù)器上的二進(jìn)制日志進(jìn)行探測(cè),探測(cè)其是否發(fā)生過(guò)改變,如果探測(cè)到 master 主服務(wù)器的二進(jìn)制事件日志發(fā)生了改變,則開(kāi)始一個(gè) I/O Thread 請(qǐng)求 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ù)庫(kù)初始化

#mysql?安裝bin目錄下執(zhí)行 #initialize-insecure?表示不生成MySQL數(shù)據(jù)庫(kù)root用戶(hù)的隨機(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ù)庫(kù)的配置文件my.cnf

注意:
1.建議在linux下創(chuàng)建文件防止windows 與 linux 編碼不一致
2.不同的實(shí)例下配置要修改端口號(hào)
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?是指定配置文件,&?符合表示后臺(tái)啟動(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ù)庫(kù)初始化配置

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

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

客戶(hù)端連接測(cè)試
手把手教你在Mysql5.7中搭建主從復(fù)制
7.數(shù)據(jù)庫(kù)唯一id配置

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

#/usr/local/mysql/bin?關(guān)閉實(shí)例 ./mysqladmin?-uroot?-p?-P3307?-h127.0.0.1?shutdown ./mysqladmin?-uroot?-p?-P3306?-h127.0.0.1?shutdown  #新加的配置 log-bin=mysql-bin???	#表示啟用二進(jìn)制日志 server-id=3307?		#表示server編號(hào),編號(hào)要唯一?建議和端口保持一致

加入完畢后啟動(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ù)的賬號(hào)并授權(quán)

#在/usr/local/mysql/bin目錄下執(zhí)行? ?./mysql?-uroot?-p?-P3306?-h127.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ī)客戶(hù)端

#在/usr/local/mysql/bin目錄下執(zhí)行??多臺(tái)從機(jī)‘|’分隔 ./mysql?-uroot?-p?-P3308|3309|3310?-h127.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í)行 開(kāi)始復(fù)制命令

start?slave;

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

show?slave?status?G;

手把手教你在Mysql5.7中搭建主從復(fù)制
7.測(cè)試主從復(fù)制

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

stop?slave; set?global?sql_slave_skip_counter?=1; start?slave; show?slave?statusG;

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

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

相關(guān)學(xué)習(xí)推薦:mysql教程(視頻)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享