基於Docker搭建mysql主從複製


由於機器限制,在兩臺機器上搞主從似乎有點奢望,於是改用docker玩玩MySQL的主從配置。

前提

假設已經安裝好docker了,另外,本測試基於centos系統。

安裝mysql

docker pull mysql:5.7

設置主庫

-p 容器對外端口:容器內部端口
--name 容器名稱 ,docker rename 源名稱 新名稱 進行改名
-e 傳遞環境變量、設置密碼
docker run -p 9990:3306 --name myqlMaster -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7

設置從庫

docker run -p 9991:3306 --name mysqlSlave -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7

查看docker容器

-a 帶上參數a,顯示所有容器,默認顯示運行中的容器
docker ps
或
docker ps -a

在這裏插入圖片描述

進入主庫和從庫的容器內

-it 後邊是容器的id 號
/bin/bash 啓動容器後啓動bash
docker exec -it df247720c8d6 /bin/bash
docker exec -it df247720c8d6 /bin/bash

設置主庫的my.cnf文件

插曲

一般用vi、vim編輯文件,在這個容器內需要安裝一下:

apt-get update
apt-get install vim
server-Id 注意起名的Id不能和其他庫重複了
log-bin 給日誌文件起個名字,從庫從該文件進行備份

在這裏插入圖片描述

重啓mysql

重啓mysql服務後,容器停止並退出,docker start 容器名稱,重新開啓即可,然後運行上述exec命令,重新進入

service mysql restart
docker start mysqlMaster

創建用於主從同步的賬號

備註

在主庫中,創建用於同步數據的賬號,授予賬號REPLICATION CLIENT權限,這樣我們可以使用 show master status, show slave statusshow binary logs來確定複製狀態。

授予複製賬號REPLICATION SLAVE權限,複製才能真正地工作。

CREATE USER 'test'@'%' IDENTIFIED BY '123@456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';

配置從庫

同理,配置從庫的my.cnf文件,然後也是重啓

relay-log 將主服務器的二進制日誌讀取過來,並記錄到從服務器本地relay-log文件

在這裏插入圖片描述

關聯主庫和叢庫

登錄數據庫後,查看主庫狀態

show master status;在這裏插入圖片描述

查看主庫和從庫IP

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlMaster
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlSlave

進入叢庫中進行關聯

master_host 主庫的的ip
master_user 用於主從複製的賬號
master_host 主庫的的ip
master_log_filer 即剛剛的主庫的File字段,表明叢庫從哪個日誌文件同步日誌
master_log_pos 即剛剛的主庫的Position字段,表明叢庫從日誌文件的哪個位置開始讀
master_connect_retry 連接失敗,重試時間,單位秒,默認60
change master to master_host='172.17.0.2', master_user='test', master_password='123@456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 336, master_connect_retry=60;

成功

在這裏插入圖片描述

測試

用Navicat連接,如果在服務器上搭建,本地連接時記得ping一下和Telnet一下,可能由於防火牆設置導致無法連接。分別連接主庫和叢庫,然後在主庫新建庫和表,刷新叢庫,即可得到對應庫表。

補充

安全退出容器而不會終止容器

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