Docker實戰:mysql主從備份讀寫分離,dockermysql
1)下載msql鏡像檔案
docker pull mysql/mysql-server
也可以指定mysql版本
docker pull mysql/mysql-server:5.7
查看鏡像檔案
docker images
2)設定目錄
為了使MySql的資料保持在宿主機上,我們先建立幾個目錄。
建立資料庫儲存目錄
mkdir -pv /root/docker/mysql/data
在data目錄下建立 master和slave目錄,用於儲存資料庫檔案。
建立主伺服器的配置目錄
mkdir -pv /root/docker/mysql/master
建立從伺服器的配置目錄
mkdir -pv /root/docker/mysql/slave
3)設定主從伺服器配置
vi ./master/master.cnf
代碼如下:
[mysqld]log-bin=mysql-binserver-id=101
vi ./slave/slave.cnf
代碼如下:
[mysqld]log-bin=mysql-binserver-id=102
注意:從庫裡的server-id必須是數字類型。
4)建立主從伺服器容器
docker create --name master -v /root/docker/mysql/data/master:/var/lib/mysql -v /root/docker/mysql/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.7docker create --name slave -v /root/docker/mysql/data/slave:/var/lib/mysql -v /root/docker/mysql/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3316:3306 mysql:5.7
啟動容器
docker start masterdocker start slave
5)登入主伺服器的mysql,查詢master的狀態
進入msql容器
docker exec -it cdd15f7b189b /bin/bash
登入msql服務
myql -u root -p
在master msql上查詢ip
ip addr
show master status;
記錄ip、File、Position
master庫上執行,建立資料同步的使用者
SET sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));
GRANT REPLICATION SLAVE ON . to backup@’%’ identified by ‘123456’;
6)登入從伺服器的mysql,設定與主伺服器相關的配置參數
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));change master to master_host='172.17.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=154;
說明:
master_host為mysql容器master裡的地址,不能寫127.0.0.1
master_user是在主庫建立的使用者
master_log_pos是主庫show master status;查詢出的Position
啟動slave服務
start slave;
slave庫上查看主從狀態
show slave status;
如果Slave_IO_State是Waiting for master to send event 就是成功了,如果是
Connecting to master 多半是串連不通,需要檢查配置是否有問題,通過是ip,File、Position配置得不對。
7)在主庫上建立資料庫、表觀察從庫上是否會同步過去
在宿主機上查看IP
使用mysql用戶端Navicat串連主庫和從庫,IP是宿主機的IP,連接埠是建立容器時映射的3306,3316,使用者名稱是admin,密碼123456,登入後可在主庫建立資料庫,建立表,在從程式庫重新整理後可看到在主庫建立的庫和表。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。