中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Mysql主從復制原理及搭建方法

發布時間:2021-07-07 14:43:44 來源:億速云 閱讀:159 作者:chen 欄目:大數據

這篇文章主要介紹“ Mysql主從復制原理及搭建方法”,在日常操作中,相信很多人在 Mysql主從復制原理及搭建方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答” Mysql主從復制原理及搭建方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Mysql主從復制原理

主從復制是指一臺服務器充當主數據庫服務器,另一臺或多臺服務器充當從數據庫服務器,主服務器中的數據自動復制到從服務器之中。對于多級復制,數據庫服務器即可充當主機,也可充當從機。MySQL主從復制的基礎是主服務器對數據庫修改記錄二進制日志,從服務器通過主服務器的二進制日志自動執行更新。

Mysq主從復制的類型

  • 基于語句的復制:

    主服務器上面執行的語句在從服務器上面再執行一遍,在MySQL-3.23版本以后支持。

    存在的問題:時間上可能不完全同步造成偏差,執行語句的用戶也可能是不同一個用戶。

  • 基于行的復制:

    把主服務器上面改變后的內容直接復制過去,而不關心到底改變該內容是由哪條語句引發的,在MySQL-5.0版本以后引入。

    存在的問題:如果修改的行數過多,造成的開銷比較大。

MySQL默認使用基于語句的復制,當基于語句的復制會引發問題的時候就會使用基于行的復制,MySQL會自動進行選擇。

在MySQL主從復制架構中,讀操作可以在所有的服務器上面進行,而寫操作只能在主服務器上面進行。主從復制架構雖然給讀操作提供了擴展,可如果寫操作也比較多的話(多臺從服務器還要從主服務器上面同步數據),單主模型的復制中主服務器勢必會成為性能瓶頸。

Mysql主從復制的工作原理

Mysql主從復制原理及搭建方法

如上圖所示,主服務器上面的任何修改都會保存在二進制日志Binary log里面,從服務器上面啟動一個I/O thread(實際上就是一個主服務器的客戶端進程),連接到主服務器上面請求讀取二進制日志,然后把讀取到的二進制日志寫到本地的一個Realy log里面。從服務器上面開啟一個SQL thread定時檢查Realy log,如果發現有更改立即把更改的內容在本機上面執行一遍。

如果一主多從的話,這時主庫既要負責寫又要負責為幾個從庫提供二進制日志。此時可以稍做調整,將二進制日志只給某一從,這一從再開啟二進制日志并將自己的二進制日志再發給其它從。或者是干脆這個從不記錄只負責將二進制日志轉發給其它從,這樣架構起來性能可能要好得多,而且數據之間的延時應該也稍微要好一些。

Mysql主從復制的過程

  1. Slave上面的IO進程連接上Master,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內容。

  2. Master接收到來自Slave的IO進程的請求后,負責復制的IO進程會根據請求信息讀取日志指定位置之后的日志信息,返回給Slave的IO進程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經到Master端的bin-log文件的名稱以及bin-log的位置。

  3. Slave的IO進程接收到信息后,將接收到的日志內容依次添加到Slave端的relay-log文件的最末端,并將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候能夠清楚的告訴Master從何處開始讀取日志。

  4. Slave的Sql進程檢測到relay-log中新增加了內容后,會馬上解析relay-log的內容成為在Master端真實執行時候的那些可執行的內容,并在自身執行。

linux安裝mysql8并且實現主從同步

服務器準備

準備服務器Server1和Server2,如果在同一個服務器的話則安裝mysql時需要改變其端口。

卸載mysql

在安裝之前必須先檢查主機上有沒有安裝過mysql,如果安裝過的話必須先卸載。

安裝mysql

下載軟件包:

wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

本地安裝:

yum localinstall mysql80-community-release-el7-1.noarch.rpm

安裝mysql:

yum install mysql-community-server

設為開機啟動:

systemctl enable mysqld

systemctl daemon-reload

啟動mysql:

systemctl start mysqld

以上步驟就安裝好mysql8了。

獲取mysql的臨時密碼:

grep 'temporary password' /var/log/mysqld.log

登錄mysql:

mysql -uroot -p

會提示輸入密碼,輸入之前獲取的臨時密碼即可登錄。

此時需要修改mysql的密碼,要不然之后的步驟也會強制提示你需要修改密碼:

ALTER USER 'root'@'localhost' IDENTIFIED BY '121b33dAj934J1^Sj9ag';

mysql8默認對密碼的強度有要求,需要設置復雜一點,要不然也會提示錯誤。

刷新配置:

FLUSH PRIVILEGES;

主從配置

在主從配置之前需要確保兩臺mysql需要同步的庫狀態一致。

配置文件默認在/etc/my.cnf下。

在配置文件中新增配置:

[mysqld]
## 同一局域網內注意要唯一
server-id=100  
## 開啟二進制日志功能,可以隨便取(關鍵)
log-bin=mysql-bin

修改配置后需要重啟才能生效:

service mysql restart

重啟之后進入mysql:

mysql -uroot -p

在master數據庫創建數據同步用戶,授予用戶 slave REPLICATION SLAVE權限和REPLICATION CLIENT權限,用于在主從庫之間同步數據。

CREATE USER 'slave'@'%' IDENTIFIED BY '@#$Rfg345634523rft4fa';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

語句中的%代表所有服務器都可以使用這個用戶,如果想指定特定的ip,將%改成ip即可。

查看主mysql的狀態:

show master status;

記錄下FilePosition的值,并且不進行其他操作以免引起Position的變化。

在從my.cnf配置中新增:

mysqld]
## 設置server_id,注意要唯一
server-id=101  
## 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin   
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin

修改配置后需要重啟才能生效:

service mysql restart

重啟之后進入mysql:

mysql -uroot -p

change master to master_host='172.17.0.2', master_user='slave', master_password='@#$Rfg345634523rft4fa', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

master_host :Master的地址

master_port:Master的端口號

master_user:用于數據同步的用戶

master_password:用于同步的用戶的密碼

master_log_file:指定 Slave 從哪個日志文件開始復制數據,即上文中提到的 File 字段的值

master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值

master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,默認是60秒

在從mysql中查看主從同步狀態:

show slave status \G;

此時的SlaveIORunning 和 SlaveSQLRunning 都是No,因為我們還沒有開啟主從復制過程。

開啟主從復制:

start slave;

再次查看同步狀態:

show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是Yes說明主從復制已經開啟。

若SlaveIORunning一直是Connecting,有下面4種原因:

1、網絡不通,檢查ip端口

2、密碼不對,檢查用于同步的用戶名和密碼

3、pos不對,檢查Master的Position

4、mysql8特有的密碼規則問題引起:

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa';

將密碼規則修改為:mysql_native_password

如果需要指定想要主從同步哪個數據庫,可以在master的my.cnf添加配置:

binlog-do-db:指定mysql的binlog日志記錄哪個db

或者在slave的my.cnf添加配置:

replicate-do-db=需要復制的數據庫名,如果復制多個數據庫,重復設置這個選項即可 replicate-ignore-db=需要復制的數據庫名,如果復制多個數據庫,重復設置這個選項即可

如果想要同步所有庫和表,在從mysql執行:

STOP SLAVE SQL_THREAD; CHANGE REPLICATION FILTER REPLICATE_DO_DB = (); start SLAVE SQL_THREAD;

如果以上步驟出現問題,可以查看日志:

/etc/log/mysqld.log

至此完成了mysql8主從同步搭建工作。

到此,關于“ Mysql主從復制原理及搭建方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

碌曲县| 合江县| 浮山县| 苏尼特右旗| 自治县| 微博| 张掖市| 临漳县| 乌什县| 普安县| 德兴市| 扬中市| 黔西县| 富阳市| 佛山市| 仁寿县| 宣化县| 河东区| 宁波市| 龙口市| 古蔺县| 夏津县| 威海市| 桦南县| 柳林县| 社会| 疏勒县| 马龙县| 仁化县| 青浦区| 收藏| 安宁市| 镇平县| 海林市| 怀来县| 武隆县| 桂林市| 龙陵县| 阿荣旗| 合肥市| 巩义市|