1. 程式人生 > 其它 >史上最詳細Docker部署Mysql主從複製

史上最詳細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;