docker的mysql8映象主從複製搭建過程記錄
mysql
# 版本 mysql:8.0.28 # mysql檔案繫結掛載,使用系統的/Users/jaylen/var/lib/mysql 目錄 # 配置檔案掛載到docker volume docker run --name mysql-master -v /Users/jaylen/var/lib/mysql:/var/lib/mysql -v mysql-master-home:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -dp 3306:3306 mysql:8.0.28 # slaver docker run --name mysql-slaver -v /Users/jaylen/var/lib/mysql-slaver:/var/lib/mysql -v mysql-slaver-home:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -dp 3316:3306 mysql:8.0.28
複製
用mysql的docker映象一主一從配置:
假設已經安裝了倆mysql8:mysql-master和mysql-slaver,埠分別為3306,3316。如下是配置步驟:
serverid配置:在mysql配置檔案:conf.d中配置,也可以設定全域性變數。
-
Mysql.cnf配置
master上:(server-id預設是1,遞增的整型,可以不配)
[mysqld]
log-bin=mysql-bin
server-id=1
slaver上:
[mysqld]
log-bin=mysql-bin
server-id=2 -
配置一個複製許可權的使用者,專門用來複制bin log
CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON .
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave'; // 改為內建的密碼認證方式,否則後面配置同步資料時密碼需要填加密後的
FLUSH PRIVILEGES; -
master資料庫加鎖,防止操作過程中有資料變動。歷史資料遷移:手動匯出master資料庫dump到slaver。(步驟省略)
-
master上檢視狀態
show master status;
得到file和position的值,下面設定時需要。 -
slaver上認主
CHANGE MASTER TO
master_host = '172.17.0.2',
master_port = 3306,
master_log_file = 'mysql-bin.000002', // master status 裡的 file
master_log_pos = 5153, // master status 裡的position 從這裡開始複製
master_user = 'slave',
master_password = 'slave';
這裡埠就是docker暴露出來的埠,但是host需要檢視一下。
docker inspect containerID|containerName; // 找到容器對應的地方寫著ip
或者執行下面這句,得到ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名或id 檢視master的ip(docker內容器的ip) -
slaver開啟及其他操作
start slave; // 開啟主從複製
stop slave; // stop
reset slave; // 停下後重置,完了可以重新設定 第五步(change master to)
show slave status; // 檢視slaver狀態