MySQL主從複製集羣搭建—binlog二進制文件方式

老哥絮叨

上篇文章咱們大體介紹了什麼是MySQL主從複製,主從複製的幾種集羣架構圖大概都有哪幾種,今天咱們就來說講如何實現MySQL集羣的搭建。主從複製有兩種方式能夠實現,binlogGTID,這期咱們先經過binlog方式來實現,下篇咱們來說binlog的原理,和注意事項。mysql

大讚點起來,在看刷起來。若是你以爲經過老哥的文章能學到一些知識,請把老哥推薦給你的朋友。分享是一件快樂的事,咱們一塊兒來玩Java程序員

一主一從集羣搭建

binlog 簡介

Mysql中有一個binlog二進制日誌,這個日誌會記錄下主服務器全部修改了的SQL語句,從服務器把主服務器上的binlog二進制日誌,在指定的位置開始複製主服務器全部修改的語句,在從服務器上執行一遍。web

簡而言之就是,主服務器會把create、update、delete語句都記錄到一個二進制文件中(binlog),從服務器讀取這個文件,執行一遍文件中記錄的create、update、delete語句。從而實現主從數據同步。spring

準備工做

  • 三臺服務器:192.168.216.1十一、192.168.216.22二、192.168.216.333
  • 主從和主主咱們用 111 和 222 兩臺機器,111 位主,222 位從。主主時兩臺機器都爲主。雙主多從時,333爲從
  • 服務器環境:採用 Windows 的,由於大多數小夥伴都是用 Windows 系統,方便你們學習,真實企業中用 Linux。
  • 三臺機器分別裝好 MySQL 數據庫,並能互相 ping 通。

配置主從庫 my.ini 或者 my.cnf 文件

my.ini是Windows系統的,my.cnf是Linux系統的,咱們這期主要以 Windows 系統爲例sql

  • 在 111 和 222 的 my.ini 中的[mysqld]節點下配置
    • server-id = 惟一ID:主服務器惟一 ID,通常設置爲機器 IP 地址後三位
    • log-bin = 二進制日誌文件存放路徑:這個是啓動並記錄 binlog 日誌
    • log-err = 錯誤日誌路徑(可選):啓動錯誤日誌
    • read-only = 0:0是讀寫都行(主庫),1是隻讀(從庫)
    • binlog-lgnore-db= 數據庫名(可選):設置不要主從複製的數據庫
    • binlog-do-db = 數據庫名(可選):須要複製的數據庫名

111 主庫建受權用戶給 222 從庫

當主庫和從庫都配置完 my.ini 文件以後,還須要主庫創建一個受權用戶,讓從庫能經過這個用戶登陸到主庫上。數據庫

  • 語法
111主庫執行:
GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'從機IP' IDENTIFIED BY '密碼';(創建受權用戶) FLUSH PRIVILEGES;(刷新MySQL的系統權限相關表) 複製代碼
  • 在從機上試試能否鏈接上主機
222從庫執行:
mysql -h 主機IP -usally -pilovesally 複製代碼
  • 若是鏈接失敗,看看是否是防火牆的緣由,配置防火牆的 IP 規則

開始主從複製

  • 查看 master 111 主機狀態
show master status;
複製代碼

這裏主要看FilePosition兩個參數,File表明從哪一個日誌文件裏同步數據,Position表明從這個文件的什麼位置開始同步數據,binlog-do-db 和 binlog-lgnore-db 意思爲同步哪幾個數據庫和不一樣步哪幾個數據庫。服務器

  • 從庫登陸主庫設置同步數據文件

若是以前作過同步數據,那麼請先中止(stop slave;),不然會報錯。微信

222執行:
MASTER_HOST='主機IP', MASTER_USER='主機用戶名', MASTER_PASSWORD='主機密碼', MASTER_LOG_FILE='File名字', MASTER_LOG_POS=Position數字; 複製代碼
  • 啓動從庫複製功能
start slave;
複製代碼
  • 查看從庫同步狀態
show slave status\G;
複製代碼

這兩個參數都是 YES,說明同步成功!這時候能夠插入一些新數據,試試從庫能不能同步這些數據!架構

主主複製集羣搭建

上面介紹了主從複製的實現方法,咱們在主從複製的基礎上介紹主主複製(只須要把 111 也變成 222 的從機),把上面講的222從庫改爲主庫,實現111222兩個庫互爲主從,不懂的同窗能夠看看上篇文章的主主複製架構圖。編輯器

從庫轉主庫

  • 將上面 222從庫變成主庫,在222上執行以下語句,注意此次的從機 IP 是 111的 IP,由於要互爲主備
GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'從機IP' IDENTIFIED BY '密碼';(創建受權用戶)
FLUSH PRIVILEGES;(刷新MySQL的系統權限相關表) 複製代碼

配置兩個主主數據庫 my.ini

  • 在[mysqld]下配置以下參數
auto_increment_increment=2   #步長值auto_imcrement。通常有n臺主MySQL就填n
auto_increment_offset=1 #起始值。通常填第n臺主MySQL 複製代碼

111 同步 222 數據

  • 查看 master 222 主機狀態
show master status;
複製代碼
  • 111設置同步 222數據文件

若是以前作過同步數據,那麼請先中止(stop slave;),不然會報錯。

MASTER_HOST='主機IP',
MASTER_USER='主機用戶名', MASTER_PASSWORD='主機密碼', MASTER_LOG_FILE='File名字', MASTER_LOG_POS=Position數字; 複製代碼
  • 查看 111庫同步狀態
show slave status\G;
複製代碼

這兩個參數都是 YES,說明同步成功!這時候能夠插入一些新數據,看看111222兩個庫能不能互相同步數據。

雙主多從集羣搭建

咱們在上面雙主集羣的基礎上,建立雙主多從集羣,這時候333機器就該上場了。由於111222機器都是主,那麼333機器做爲從機,隨便掛靠在其中一個主機上即可。咱們這裏選111吧。

步驟和第一個主從複製集羣搭建的同樣,按照上面的操做便可。

當咱們作好全部操做以後,在111主機上新增數據進行測試,發現222333均已同步數據。可是在222新增數據測試時,會發現111同步了,可是333並無同步。由於333是掛在111下的從庫,全部222主機新增數據的時候,333並無同步222的數據,這顯然是不行的。解決方案很簡單,在兩臺主機 111 和 222 的配置文件裏都加上以下配置,重啓便可。

log-slave-updates=on
複製代碼

從庫做爲其餘從庫的主庫時,必須添加這個參數才能生效。111222互爲對方的從庫,333111的從庫,因此111222要加上這個參數,你們好好理解一下這個邏輯。

老哥結語

MySQL主從複製,是實現高性能,高可用MySQL的基石,因此必定要會這個知識,才能進一步往下深刻學習MySQL,跟緊老哥的腳步,咱們下篇文章講講主從複製的原理。

IT 老哥

一個在大廠作高級Java開發的程序猿

關注微信公衆號:IT 老哥

回覆:Java 全套教程,便可領取:Java 基礎、Java web、JavaEE 所有的教程,包括 spring boot 等

回覆:簡歷模板,便可獲取 100 份精美簡歷

回覆:Java 學習路線,便可獲取最新最全的一份學習路線圖

回覆:Java 電子書,便可領取 13 本頂級程序員必讀書籍

本文使用 mdnice 排版

相關文章
相關標籤/搜索