Docker搭建Mysql主從複製

安裝Docker

由於我用的是Windows10,所以我打開了Hyper-V,然後在Dcoker官網下載並安裝了Docker。

使Docker容器和Windows10建立局域網連接

Docker創建一個局域網

docker network create --subnet=[IP]/[掩碼位數] 子網名稱

指令示例:

docker network create --subnet=192.168.100.0/24 homenet

在Windows10中將這個子網添加到路由表中

route add -p [局域網ip] mask [子網掩碼] [經過網關(使用Docker默認網關)]

指令示例(管理員模式下運行指令):

route add -p 192.168.100.0 mask 255.255.255.0 10.0.75.2

簡單Mysql持久化

預先準備

先啓動一個mysql,查看需要持久化的文件有哪些。

docker run -itd --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 mysql
docker exec -it mysql000 /bin/bash
# find / -name "mysql"

然後發現了以下需要映射的文件
/etc/mysql/my.cnf
/var/lib/mysql
保存一份my.cnf文件到宿主機,掛載文件時需要用到

然後刪除剛纔創建的Mysql,刪除前順便測試下局域網有沒有用

 mysql -h 192.168.100.10 -u root -p
 [mysql]exit
 docker stop mysql000
 docker rm mysql000

啓動3個mysql

其中主數據庫配置文件添加:

server-id=1
log-bin=mysql-bin

從數據庫配置文件依次添加:

server-id=2
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
server-id=3
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin

然後創建mysql容器,命令示例(在掛載過程中需要輸入Windows10密碼授權本地文件操作):

docker run -itd --privileged=true --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/varlib:/var/lib/mysql mysql
docker run -itd --privileged=true --net homenet --ip 192.168.100.11 --name mysql001 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/varlib:/var/lib/mysql mysql
docker run -itd --privileged=true --net homenet --ip 192.168.100.12 --name mysql002 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/varlib:/var/lib/mysql mysql

在主數據庫中創建專門用於從數據庫登錄操作的賬號,並查看主數據庫狀態

mysql -h 192.168.100.10 -u root -p
mysql> create user 'slave'@'%' identified by '00300100';
mysql> grant REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
mysql> show master status;

有用信息
這兩個字段在從數據庫中是有用的,它標識了主數據庫當前語句執行狀態(執行日誌)。

在從數據庫中啓用同步

對兩個從數據庫都做如下處理

mysql -h 192.168.100.12 -u root -p
mysql> change master to master_host='192.168.100.11', master_user='slave', master_password='00300100', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 702, master_connect_retry=30;
start slave;
show slave status \G;

開啓狀態
如果成功了的話,就是這個樣子的。

測試

在主數據庫中創建一個表
然後查看從數據庫是否同步

最後完全同步了

最後完全同步了,而且因爲持久化設置,因此在關閉容器重新打開也不會出現數據丟失。
數據未丟失

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章