目錄
一、準備官方鏡像
官方docker 鏡像 https://hub.docker.com/_/mysql
docker pull mysql:latest
# 創建mysql網絡
docker network create mysql-net --subnet 172.1.2.0/24
docker volume rm $(docker volume list |awk '{if(NR>0) print $2}')
主從規劃
role | ip | port | 複製賬號 | password |
---|---|---|---|---|
master | 172.1.2.2 | 3306 | Slave | slave |
slave | 172.1.2.3 | 3307 | - | - |
二、準備配置文件
cd ~
mkdir mysql mysql/master mysql/slave
cd mysql
# master 配置文件
echo "[mysqld]
server-id=1
log-bin=mysql-bin" >> master/mysql.cnf
# slave 配置文件
echo "[mysqld]
server-id=2
relay_log = /usr/local/mysql/data/mysql-relay-bin relay_log-index = /usr/local/mysql/data/mysql-relay-bin.index log_slave_updates = 1
read_only=1" >> slave/mysql.cnf
三、測試mysql的啓動
3.1 maste 配置
docker run --network mysql-net --name master -p 3306:3306 --ip 172.1.2.3 -e MYSQL_ROOT_PASSWORD=mysecret -d mysql:latest
# 創建slave用戶,並配置權限
CREATE USER 'slave'@'172.1.2.%' IDENTIFIED WITH mysql_native_password BY 'slave';
select user,host from mysql.user;
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.1.2.%';
# mysql master配置 mysql.cnf
docker cp master/mysql.cnf master:/etc/mysql/conf.d/mysql.cnf
# 修改配置之後,一定要重啓
docker restart master
# 驗證binlog文件是否開啓
show global variables like '%log_bin%';
3.2 slave 配置
docker run --network mysql-net --name slave -p 3307:3306 --ip 172.1.2.4 -e MYSQL_ROOT_PASSWORD=mysecret -d mysql:latest
# mysql slave配置 mysql.cnf
docker cp slave/mysql.cnf slave:/etc/mysql/conf.d/mysql.cnf
# 修改配置之後,一定要重啓
docker restart slave
# 指定主節點ip,端口,用戶,並配置主從
change master to master_host='172.1.2.3',master_port=3306,master_user='slave',master_password='slave';
# 或部分複製
change master to master_host='192.168.81.132',master_port=3306,master_user='slave',master_password='slave',master_log_file='mysql- bin.000002',master_log_pos=155;
start slave;
#檢測
show slave status;