史上最詳細Docker部署Mysql主從複製
本文主要講怎麼用Docker部署Mysql的主從複製,看起來很長,實際非常簡單的,看一遍,立馬就能懂的。
直接CV也能搭建起來,莫慌。
我們一起加油!!!
封面地點:泰山日出
一、拉取映象
dockerpullmysql:5.7
相關命令:
- 檢視映象:
docker images
二、啟動映象
先啟動mysql01容器:(即之後的主機)
dockerrun-d-p3310:3306-v/home/mysql/node-1/config:/etc/mysql/-v/home/mysql/node-1/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=123456--namemysql01mysql:5.7
再啟動mysql02容器:(即之後的從機)
dockerrun-d-p3311:3306-v/home/mysql/node-2/config:/etc/mysql/-v/home/mysql/node-2/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=123456--namemysql02mysql:5.7
命令解釋:
- -d: 後臺執行容器,並返回容器ID
- -p 3311:3306 :將容器的3306埠對映到宿主機3310埠
- -e MYSQL_ROOT_PASSWORD=123456 :配置資料庫連線密碼
- -v /home/mysql/node-2/config:/etc/mysql/ :將配置資料夾掛載到宿主機
- --name mysql01(02):將容器命名為 mysql01(02)
相關命令:
dockerps-a#檢視全部容器(執行中加未執行的)
都已正常啟動。
三、連線測試
搭建過程中,為了減少錯誤的產生,就多了這一步的測試。
我們可以直接拿Navicat
來進行連線測試。
注意事項
: 記得開啟安全組,虛擬機器的話記得處理好防火牆。(另外我這裡是3310,可根據自己需要更改埠)
測試啟動成功後,我們再來進行下一步。
四、編寫主從複製配置檔案
之前我們啟動的時候寫了這句-v /home/mysql/node-1/config:/etc/mysql/
,將mysql 的配置資料夾和宿主機的資料夾掛載起來的。
那麼我們就可以直接在宿主機下的/home/mysql/node-1/config/
編寫配置檔案了。
4.1、編寫主機配置檔案
我們先編寫主機上的配置檔案:
vimmy.cnf
回車之後是這樣的:
先按insert
鍵,然後直接將下面主機的配置檔案複製上去即可:
[mysqld] #修改配置檔案:vim/etc/my.cnf #主伺服器唯一ID server-id=1 #啟用二進位制日誌 log-bin=mysql-bin #設定不要複製的資料庫(可設定多個) binlog-ignore-db=mysql binlog-ignore-db=information_schema #設定需要複製的資料庫需要複製的主資料庫名字 binlog-do-db=testdb #設定logbin格式 binlog_format=STATEMENT
退出方式:
先按Esc
鍵-->再按Shift+:
鍵-->輸入wq--儲存退出。
4.2、編寫從機配置檔案
從機上的my.cnf也是同樣的方式
[mysqld] #從伺服器唯一ID server-id=2 #啟用中繼日誌 relay-log=mysql-relay
重新啟動mysql容器
dockerrestartmysql01mysql02
dockerps-a#檢視容器
接下來就是搭建主從複製了。
五、搭建主從複製
5.1、主機設定
dockerexec-itmysql01/bin/bash#進入容器 mysql-uroot-p123456#連線mysql
5.2、主機上建立帳戶並授權 slave
給從機授權,為了讓從機能夠和主機連線起來。
GRANTREPLICATIONSLAVEON*.*TO'slave'@'%'IDENTIFIEDBY'123456';
5.3、查詢master狀態
showmasterstatus;#查詢master的狀態
把這裡的File和Position
記下來哈,等下在從機上要用到。
File:mysql-bin.000003 Position:438
Binlog_Do_DB
:需要複製的資料庫。
Binlog_Ignore_DB
:不需要複製的資料庫。
注意:此步驟後不要再操作主伺服器MySQL,防止主伺服器狀態值變化
5.4、從機設定
進入mysql02
容器
dockerexec-itmysql02/bin/bash mysql-uroot-p123456
複製主機的命令
CHANGEMASTERTOMASTER_HOST='主機的ip地址', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_PORT=3310, MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=438; #解釋: # CHANGEMASTERTOMASTER_HOST='主機的IP地址', # MASTER_USER='slave'(剛剛配置的使用者名稱), # MASTER_PASSWORD='123456'(剛剛授權的密碼), # master_port=主機開放的埠我這裡是3310埠, # MASTER_LOG_FILE='mysql-bin.具體數字',MASTER_LOG_POS=具體值(之前的Position);
注意事項
:如果在這裡出現錯誤,先重置。執行完下面兩條命令。
stopslave; resetmaster;
啟動從伺服器複製功能
startslave;
檢視從伺服器狀態
showslavestatus\G
#下面兩個引數都是Yes,則說明主從配置成功!
Slave_IO_Running:Yes Slave_SQL_Running:Yes
六、測試主從複製
6.1、主機新建庫 -從機複製
在主機新建testdb
後,從機也隨之就有了。(這裡的命名是確定的,因為在配置檔案中說明了複製testdb
資料庫)。
6.2、新建表-從機複製
6.3、insert 記錄-從機複製
當然這些還是有看不出到底有沒有複製的話,咱們直接測試函式,就能知道啦。
insertintomy_table01(id,name)VALUE(1,@@hostname);
這就可以看出主從複製確實是成功的,但是在使用函式上有資料不一致的問題。
七、重置配置主從
如何停止從服務複製功能
stopslave;
如何重新配置主從 (即清除之前的主從配置)
stopslave; resetmaster;