1.獲取mysql鏡像
docker pull mysql:5.7
2.運行mysql鏡像復制配置文件
docker run -it --rm mysql:5.7 /bin/bash
# 查看容器id
docker ps
# 復制默認配置文件到宿主機
docker cp 容器di:/etc/mysql/mysql.conf.d ./
3.修改配置文件
cp -r mysql.conf.d mysql-master
cp -r mysql.conf.d mysql-slave
修改mysql-master中的mysql.conf,在[mysqld]中添加兩句:
server-id=1 # 主機id要比從機小
log-bin=/var/log/mysql/mysql-bin.log
修改mysql-slave中的mysql.conf,在[mysqld]中添加兩句:
server-id=2
general_log = 0
4.創建兩個空文件夾
為了防止mysql容器意外停止導致數據丟失,在本地創建目錄和容器中的數據目錄共享
mkdir master-db
mkdir slave-db
5.分別運行兩個容器
# mysql-master和master-db根據自己本地路徑修改
docker run -d -v /mysql-master/mysql.conf.d:/etc/mysql/mysql.conf.d -v /master-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql:5.7
docker run -d -v /mysql-slave/mysql.conf.d:/etc/mysql/mysql.conf.d -v /slave-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 mysql:5.7
6.連接數據庫
mysql -uroot -p123456 -h 127.0.0.1 --port=3307
mysql -uroot -p123456 -h 127.0.0.1 --port=3308
master配置:
# 創建從機賬號
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
# 刷新權限
FLUSH PRIVILEGES;
# 展示主機的二進制日志信息
# 展示主機的二進制日志信息
SHOW MASTER STATUS;
slave配置:
change master to master_host='172.17.0.2', master_port=3306, master_user='slave', master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=582;
slave配置:
172.17.0.2
的獲取是使用的docker network ls
然后檢查使用 docker network inspect bridge的id
得到的,
mysql-bin.000003和
582是主機的二進制日志信息里的
172.17.0.2
的獲取是使用的docker network ls
然后檢查使用 docker network inspect bridge的id
得到的, # 開啟從機服務
start slave;
# 展示從機服務狀態
show slave status \G
如果Slave_IO_Running:Yes和
Slave_SQL_Running:Yes都是yes表示配置成功
如果Slave_IO_Running:Yes和
如果有一個不是Yes的就百度,我就不復制過來了