Docker實現MySQL主從復制(主主復制同理)
因為最近在學習MySQL,看到很多地方有“分庫分表”,“讀寫分離”的字眼,就想嘗試一下吧!
首先,因為本人經濟能力有限,買不起那麽多服務器,所以就借用Docker來搭建虛擬機來作為兩臺服務器。
一、準備主從服務器
1、創建主服務器
$docker run -it --name=mysql_master ubuntu:14.04 /bin/bash
2、創建從服務器
$docker run -it --name=mysql_slave ubuntu:14.04 /bin/bash
至此,兩臺服務器準備完畢,參數如下:
操作系統(OS):Ubuntu 14.04
主服務器IP:172.17.0.2
從服務器IP:172.17.0.3
二、在主從服務器上安裝MySQL
因為版本問題,需要先更新一下軟件源(如果不更新的話,後面安裝MySQL的時候會提示沒有安裝包)
$ apt-get update
我這裏安裝MySQL也只需要一步就可以了
apt-get install mysql-server
中間會出現確認的停止,按“y”即可。
最後會出現讓你輸入MySQL的root用戶的登錄密碼,後面會用到。
再確認一次密碼
至此,主從服務器MySQL的安裝完成
三、搭建MySQL主從復制
這裏簡單說一下主從復制的原理,就是根據MySQL的日誌文件,將主服務器的MySQL操作日誌文件發送給從服務器,讓從服務器執行日誌文件,達到主從復制的目的。
1、配置主服務器(以下在主服務器中操作)
在主服務器中找到MySQL的配置文件(my.cnf),修改該配置文件。(最近也在學習Linux基礎,小秀一把)
$ find -name mf.cnf
表示配置文件在這個目錄
然後修改該文件
$ vi /etc/mysql/my.cnf
然後就進到這個界面
然後找到這麽幾行,這個就是我們要配置的地方了
把server-id和log_bin前面的“#”的註釋符去掉即可。
server-id:用於識別服務器MySQL,以後只要是有關於做MySQL集群的,server-id在集群中一定是要唯一的。
log_bin:用於存放二進制日誌文件的,其他MySQL就是根據這個文件進行復制的。
其他可以先不用管。
保存退出即可。之後需要重啟MySQL服務(service mysql restart)
然後在MySQL進行授權,至於為什麽要授權呢?其他服務器的MySQL要獲取日誌文件總要一些權限吧
登錄MySQL
這個就比較尷尬,是MySQL服務沒開起來的原因
出現紅色一行即為開啟成功,然後再登錄MySQL就可以了。
然後就是授權了,因為是主從復制,所以授權命令有點特殊,正常的話可以看下我之前寫的一篇。
其中以後會用到的是,用戶名和密碼,即“usr”和“123”,其中“flush privileges”是更新權限的命令。
然後就是查看主服務器相關日誌文件的信息。
這裏的文件“mysql-bin.000001”和“48481”我們會用到。
然後退出MySQL,再來看看我們的日誌文件生產沒有。日誌文件生成的目錄在上面的配置中也有。
有了這個文件就說配置已經生效了
2、配置從服務器
進入從服務器,也是一樣,要修改MySQL的配置文件(my.cnf),server-id一定不能與主服務器的相同
這樣既可
保存退出,重啟MySQL服務(service mysql restart)
然後進入MySQL,接收主服務器的日誌文件。
是不是在這裏看到很多熟悉的信息?
master_host:發送日誌文件的主機
master_user:被授權的用戶
master_password:用戶密碼
master_log_file:日誌文件名
master_log_pos:日誌文件位置
最後在查看從服務器的狀態。
紅框裏的兩行都為Yes,即為成功了!!!
如果不是,就多檢查檢查以上步驟。
最後就來驗證一下吧。
1、在主服務器創建數據庫
2、在從服務器創建數據庫
最後結果說明,主從復制只是單向的復制,那如何進行雙向的復制,這個就是主主復制了。
實現主主復制的效果也很簡單,在配置的時候,將在主從服務器所做的再反過做一次就好。
即,在從服務器進行一次授權,在主服務器MySQL進行配置就好
。
Docker實現MySQL主從復制(主主復制同理)