MySQL主從原理及配置

来源:https://www.cnblogs.com/Infi-chu/archive/2018/03/20/8608826.html
-Advertisement-
Play Games

Infi-chu: http://www.cnblogs.com/Infi-chu/ MySQL主從配置及原理 一、環境選擇: 1.Centos 6.5 2.MySQL 5.7 二、什麼是MySQL主從複製 MySQL主從複製是其最重要的功能之一。主從複製是指一臺伺服器充當主資料庫伺服器,另一臺或多 ...


 Infi-chu:

http://www.cnblogs.com/Infi-chu/

 

MySQL主從配置及原理

一、環境選擇:

1.Centos 6.5

2.MySQL 5.7

 

二、什麼是MySQL主從複製

MySQL主從複製是其最重要的功能之一。主從複製是指一臺伺服器充當主資料庫伺服器,另一臺或多台伺服器充當從資料庫伺服器,主伺服器中的數據自動複製到從伺服器之中。對於多級複製,資料庫伺服器即可充當主機,也可充當從機。MySQL主從複製的基礎是主伺服器對資料庫修改記錄二進位日誌,從伺服器通過主伺服器的二進位日誌自動執行更新。

 

三、MySQL主從複製的類型

1.基於語句的複製

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

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

 

2.基於行的複製

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

缺點:比如一個工資表中有一萬個用戶,我們把每個用戶的工資+1000,那麼基於行的複製則要複製一萬行的內容,由此造成的開銷比較大,而基於語句的複製僅僅一條語句就可以了。

 

3.混合類型的複製

MySQL預設使用基於語句的複製,當基於語句的複製會引發問題的時候就會使用基於行的複製,MySQL會自動進行選擇。

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

 

四、原理

1.主從(master-slave)

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

 

2.主從從(master-slave-slave)

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

 

【註意】

1.在老版本的MySQL中,主從複製的slave段並不是由兩個進程完成的,而是由一個進程完成的,之後就出現了很多風險和性能的相關問題。具體有以下問題:

  1.一個進程會使複製bin-log日誌和解析日誌併在自身執行的過程成為一個串列的過程,性能受到了一定的限制,非同步複製的延遲也會比較長。

2. Slave端從Master端獲取bin-log過來之後,需要接著解析日誌內容,然後在自身執行。在這個過程中,Master端可能又產生了大量變化並新增了大量的日誌。如果在這個階段Master端的存儲出現了無法修複的錯誤,那麼在這個階段所產生的所有變更都將永遠無法找回。如果在Slave端的壓力比較大的時候,這個過程的時間可能會比較長。

 

五、MySQL主從複製的過程

1.兩種情況:同步複製和非同步複製,生產環境中大多數採用非同步複製。

2. 複製的基本過程:

  1.slave上面的I/O進程連接上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“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”。

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

 

六、配置:

1.首先明確兩種情況:

  1.兩台相互獨立的伺服器或虛擬機。

  2.兩台通過模板創建的虛擬機。

2.下麵對兩台伺服器進行命名,分別為:MySQL主伺服器,MySQL從伺服器。

 

3.主從伺服器分別進行如下操作:

  1.MySQL版本一致

  2.初始化表

4.修改MySQL主伺服器和MySQL從伺服器:

 vim /etc/my.cnf

 [mysqld]

 log-bin=取任意名稱   //啟用二進位日誌

 server-id=任意取數字   //伺服器唯一ID,預設值是1,一般設置為IP地址的最後一段數字

5.若是第一種情況,直接重啟兩台伺服器;若是第二種情況,還需將兩台伺服器的auto.cnf文件重命名為auto.cnf.bak,然後重啟MySQL服務。

6.在MySQL主伺服器上建立賬戶並授權slave

grant replication slave on *.* to '用戶名'@'%' identified by '任意密碼';

7.查詢MySQL主伺服器的狀態

 show master status;

8.配置MySQL從伺服器

 change master to

 master_host='MySQL主伺服器IP地址',

 master_user='之前在MySQL主伺服器上面創建的用戶名',

 master_password='之前創建的密碼',

 master_log_file='MySQL主伺服器狀態中的二進位文件名',

 master_log_pos='MySQL主伺服器狀態中的position值';

9.啟用slave

 start slave;

10.查看MySQL從伺服器的狀態

 show slave status\G

查看

Slave_IO_Running: Yes    //此狀態必須YES

Slave_SQL_Running: Yes     //此狀態必須YES

全變YES說明主從配置成功,當MySQL主伺服器有更新變化時,從伺服器會根據具體配置做相應的同步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在CentOS 6中,修改主機名方式很簡單,臨時修改主機名使用hostname命令,永久修改主機名直接寫進文件/etc/sysconfig/network中即可。 但在CentOS 7中,主機名就沒那麼簡單了,它涉及了一些彎彎繞繞。 在CentOS 7中,主機名分3類:static(靜態主機名)、p ...
  • windows安裝nginx,下載地址:http://nginx.org/download/ 下載的時候,下載 .zip 尾碼的壓縮包,因為 .zip 的壓縮包有nginx.exe 啟動文件,其他沒有。 下載好之後,放在自己本地磁碟某個目錄下, cmd 命令框進入該目錄,輸入 則可以啟動 nginx ...
  • Linux系統是一種典型的多用戶系統,不同的用戶處於不同的地位,擁有不同的許可權。為了保護系統的安全性,Linux系統對不同的用戶訪問同一文件(包括目錄文件)的許可權做了不同的規定 ...
  • 操作系統概論 電腦系統由硬體和軟體兩部分組成。硬體指電腦的各個部件,包括:存儲器、處理器、輸入/輸出設備及電源、機箱等。軟體是指存在電腦系統中或外存儲器中的程式及數據的集合。 電腦軟體分為系統軟體和應用軟體。 系統軟體是電腦廠商為了便於用戶使用電腦而駐存在電腦硬體(如硬碟和軟盤)內的系 ...
  • 本文主要解決:使用nginx反向代理處理前後端跨域訪問的問題 問題如下: 問題分析: 禁止跨域問題其實是瀏覽器的一種安全行為 該問題是由於前端和後臺伺服器在不同伺服器(IP)上,前端訪問後臺無法通過同一條鏈路傳輸數據導致的,這時如果直接ajax遠程後臺伺服器,則會報錯 解決方法: 配置nginx,將 ...
  • 先執行命令 如果返回空白就是沒有安裝 記得把23埠打開 telnet服務是有xinetd守護的,重啟xinetd服務 至於想開機啟動 ,修改etc/xinetd.d/telnet文件 將disable=yes 改成disable=no,(但是我的這個目錄下並沒有telnet,誰要是知道怎麼回事+怎 ...
  • 一、允許遠程連接 sudo apt-get install ssh #安裝遠程ssh服務 service ssh start #啟動遠程ssh連接服務 二、更換更新源 1)備份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2) ...
  • 解決辦法: 1.wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate 2.tar -xzvf ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...