共計 2585 個字符,預計需要花費 7 分鐘才能閱讀完成。
這期內容當中丸趣 TV 小編將會給大家帶來有關如何用兩臺服務器實現數據庫的主從同步與分離,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
使用背景:在網聯網不斷發展的時代,人們對數據的使用也不斷的增加,對于用戶的請求不斷的增加,數據庫的讀寫操作就特別大,就會導致服務器受不了那么多用戶的請求和對數據的操作,導致服務器負荷,相應的用戶的等待時間就會特別長,給用戶的體驗特別差, 而主從同步就很好的解決的這種并發的問題。
主從同步:簡單來說就是使用兩臺服務器,分別處理用戶的讀和寫的操作,從而實現了讀寫分離。由于從服務器同步的主服務器上的數據,所以主從同步極大的保證了數據的安全。
基本原理:主從同步,分為兩臺服務器
如圖:Master 為主服務器,Slave 為從服務器
1. 主服務器 (Master) 對數據的操作,對事務更新完成之前,mysql 將以串行的形式將日志以 2 進制的形式寫入到 Binary log 日志中(即二進制日志事件),在事務寫完以后,Master 通知存儲引擎,提交事務.
2. 提交事務后,Slave 服務器,將 Master 的 Binary log 日志拷貝到自己的 Relay log 中(即 Slave 開啟 I /O thread 讀取 Master 中的 Binary log,然后寫入到 Slave 中的 Relay log 中)
3.SOL thread 線程將 Relay log 中的日志讀取,重做數據,達到將 Master 中的數據改變同步到 Slave 中.
所以:兩臺服務器,Master 提供給用戶寫(增,刪,該)的操作,Slave 供公戶讀(查詢)的操作,從而大大的減輕了服務器的負荷,解決了高并發的問題。
那么接下來讓我們看看如何使用兩臺服務器搭建 mysql 的主從同步吧(ps:今天只介紹如何在服務器上搭建主從同步的實現)。
在開始之前,需要兩臺服務器, 安裝好 linux 系統,并且安裝好 mysql 5.1 以上的版本.(最好安裝有 vim 編輯器)。
那么這些環境準備好了,就開始搭建吧!
1. 使用 SSH 連接你的兩臺服務器(這里我用的兩臺為 Master 和 Slave 的服務器)
2. 修改 Master 和 Slave 上的 mysql 的配置文件
a. 修改主服務器(Master)的配置文件
輸入命令:vim /etc/my.cnf (mysql 的默認安裝位置)
會出現以下提示:
選擇 e,進行編輯.
按 i 鍵
在 mysqld 下添加以下配置:
server-id=1 log-bin=master-bin log-bin-index=master-bin.index
如圖(看圖上具體細節),wq 保存并退出,這里主服務器(Master)的配置就好了。
然后重載 mysql 配置
輸入:service mysqld restart
接下來我們看看是否成功配置
在 Master 中登錄 mysql
命令:mysql -uroot -p
輸入密碼后進入 mysql 界面,輸入 show master status,如圖:
b. 修改從服務器的配置(Slave)
連接 Slave 服務器,vim 打開 mysql 的配置文件
原理一樣,在 mysqld 添加下配置
server-id=2 relay-log=slave-relay-bin relay-log-index=slave-relay-bin.index
如圖:
保存退出
然后重啟 mysql,這里介紹另一種重啟 mysql 的方法
輸入命令:/etc/init.d/mysql stop 停止
/etc/init.d/mysql start 啟動
登錄 mysql 驗證配置是否有誤
說明,配置沒啥問題。
3. 開始主從連接
a. 在主服務器中添加從服務器連接所用到的用戶
在 master 中創建用戶 mengxin(ps: 這是筆者用的名字)
create user mengxin
再授予 mengxin 主從訪問權限
grant replication slave on *.* to mengxin @ 從服務器的 ip identified by 連接時需要的用戶密碼(自己設置)
然后輸入:flush privileges
刷新更新權限信息
b. 來到從服務器(Slave)進行連接
登錄到從服務器的 mysql
輸入命令:
change master to master_host= 主機 ip ,master_port=3306,master_user= mengxin ,master_password= mengxin ,master_log_file= master-bin.000001 ,master_log_pos=0
進行連接,
命令說明:master_host 為 Master 服務器的 ip,master_port 為 Master 服務器的端口(默認為 3306),master_user 為剛剛在 Master 服務器上設置的 user 名,master_password 為剛剛設置的密碼,master_log_file 為剛剛上面說到的要用的那個參數(ps:可以在 master 服務器上輸入命令:show master status 進行查看)
執行該命令后,表示連接已完成,
開啟主從同步:start slave
然后輸入:show slave status \G;
查看運行狀態:(如圖,沒有報錯,表示主從同步成功配置)
最后讓我們來驗證一下,主從同步的效果:
在 Master 中創建 mengxin_shop 數據庫
在 Slave 服務器中,查看數據庫,可以看到在 master 中添加的數據庫更新到 Slave 中了
呼,終于寫完了,遇到了各種各樣的錯誤,還是一點點的解決了
這里列舉出配置過程中遇到的集中常見的錯誤吧
1. 如果配置中,最后一步查看 Slave 的狀態出現如圖所示錯誤
這表明,mysql.user 中沒有 plugin 這個字段,這是因為你 mysql 的版本為 5.1,沒有這個字段,授權會出現問題
解決辦法:將兩臺服務器的 mysql 版本保持到 5.5 以上,盡量相同版本
2. 有時會出現 Slave 連接 Master 連接不上的錯誤,請檢查服務器上的 mysql 數據庫端口 3306 是否關閉防火墻。
3. 有時會出現 slave 和 master id 相同的錯誤,請確保 slave 配置中的 server-id 是否值只存在一個,并且為 2
上述就是丸趣 TV 小編為大家分享的如何用兩臺服務器實現數據庫的主從同步與分離了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。