上篇文章咱們大體介紹了什麼是MySQL
主從複製,主從複製的幾種集羣架構
圖大概都有哪幾種,今天咱們就來說講如何實現MySQL集羣
的搭建。主從複製有兩種方式能夠實現,binlog
和GTID
,這期咱們先經過binlog
方式來實現,下篇咱們來說binlog
的原理,和注意事項。mysql
大讚
點起來,在看
刷起來。若是你以爲經過老哥的文章能學到一些知識,請把老哥推薦
給你的朋友。分享是一件快樂的事,咱們一塊兒來玩Java
。程序員
Mysql
中有一個binlog
二進制日誌,這個日誌會記錄下主服務器
全部修改了的SQL
語句,從服務器
把主服務器上的binlog
二進制日誌,在指定的位置開始複製主服務器
全部修改的語句,在從服務器
上執行一遍。web
簡而言之就是,主服務器
會把create、update、delete
語句都記錄到一個二進制文件中(binlog),從服務器
讀取這個文件,執行一遍文件中記錄的create、update、delete
語句。從而實現主從數據同步。spring
my.ini是Windows系統的,my.cnf是Linux系統的
,咱們這期主要以 Windows 系統爲例sql
server-id = 惟一ID
:主服務器惟一 ID,通常設置爲機器 IP 地址後三位log-bin = 二進制日誌文件存放路徑
:這個是啓動並記錄 binlog 日誌log-err = 錯誤日誌路徑
(可選):啓動錯誤日誌read-only = 0
:0是讀寫都行(主庫),1是隻讀(從庫)binlog-lgnore-db= 數據庫名
(可選):設置不要主從複製的數據庫binlog-do-db = 數據庫名
(可選):須要複製的數據庫名
當主庫和從庫都配置完 my.ini 文件以後,還須要主庫創建一個受權用戶,讓從庫能經過這個用戶登陸到主庫上。數據庫
111主庫執行:
GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'從機IP' IDENTIFIED BY '密碼';(創建受權用戶) FLUSH PRIVILEGES;(刷新MySQL的系統權限相關表) 複製代碼
222從庫執行: mysql -h 主機IP -usally -pilovesally 複製代碼
show master status;
複製代碼
這裏主要看
File
和Position
兩個參數,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
從庫改爲主庫,實現111
和222
兩個庫互爲主從,不懂的同窗能夠看看上篇文章的主主複製架構圖。編輯器
222
從庫變成主庫,在222上執行以下語句,注意此次的從機 IP 是
111
的 IP,由於要互爲主備
GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'從機IP' IDENTIFIED BY '密碼';(創建受權用戶)
FLUSH PRIVILEGES;(刷新MySQL的系統權限相關表) 複製代碼
auto_increment_increment=2 #步長值auto_imcrement。通常有n臺主MySQL就填n
auto_increment_offset=1 #起始值。通常填第n臺主MySQL 複製代碼
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,說明同步成功!這時候能夠插入一些新數據,看看111
和222
兩個庫能不能互相同步數據。
咱們在上面雙主集羣的基礎上,建立雙主多從集羣,這時候333
機器就該上場了。由於111
和222
機器都是主,那麼333
機器做爲從機,隨便掛靠在其中一個主機上即可。咱們這裏選111
吧。
步驟和第一個主從複製集羣搭建的同樣,按照上面的操做便可。
當咱們作好全部操做以後,在111
主機上新增數據進行測試,發現222
和333
均已同步數據。可是在222
新增數據測試時,會發現111
同步了,可是333
並無同步。由於333
是掛在111
下的從庫,全部222
主機新增數據的時候,333
並無同步222
的數據,這顯然是不行的。解決方案很簡單,在兩臺主機 111 和 222 的配置文件裏都加上以下配置,重啓便可。
log-slave-updates=on
複製代碼
從庫做爲其餘從庫的主庫時,必須添加這個參數才能生效。111
和222
互爲對方的從庫,333
是111
的從庫,因此111
和222
要加上這個參數,你們好好理解一下這個邏輯。
MySQL
主從複製,是實現高性能,高可用MySQL
的基石,因此必定要會這個知識,才能進一步往下深刻學習MySQL
,跟緊老哥的腳步,咱們下篇文章講講主從複製的原理。
一個在大廠作高級Java開發的程序猿
關注微信公衆號:IT 老哥
回覆:Java 全套教程,便可領取:Java 基礎、Java web、JavaEE 所有的教程,包括 spring boot 等
回覆:簡歷模板,便可獲取 100 份精美簡歷
回覆:Java 學習路線,便可獲取最新最全的一份學習路線圖
回覆:Java 電子書,便可領取 13 本頂級程序員必讀書籍
本文使用 mdnice 排版