1 Docker開啟master容器(使用mysql5.7)
docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 --privileged=true -v /home/mysql/mysql-master/log:/var/log/mysql -v /home/mysql/mysql-master/data:/var/lib/mysql -v /home/mysql/mysql-master/conf:/etc/mysql/conf.d -d mysql:5.7
2 進入master conf 目錄 建立my.cnf
cd /home/mysql/mysql-master/conf
vim /my.cnf
# my.cnf 内容
[mysqld]
## 設定server_id,同一區域網路中需要唯一
server_id=101
## 指定不需要同步的資料庫名稱
binlog-ignore-db=mysql
## 開啟二進制日志功能
log-bin=mall-mysql-bin
## 設定二進制日志使用記憶體大小(事務)
binlog_cache_size=1M
## 設定使用的二進制日志格式(mixed,statement,row)
binlog_format=mixed
## 二進制日志過期清理時間。預設值為0,表示不自動清理。
expire_logs_days=7
## 跳過主從複制中遇到的所有錯誤或指定類型的錯誤,避免slave端複制中斷。
## 如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從資料庫資料不一緻
slave_skip_errors=1062
3 重新開機master資料庫
docker restart mysql-master
4 進入mysql-master
docker exec -it mysql-master /bin/bash

5 master 容器執行個體内建立使用者同步資料
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
6 建立從資料庫容器執行個體
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 --privileged=true -v /home/mysql/mysql-slave/log:/var/log/mysql -v /home/mysql/mysql-slave/data:/var/lib/mysql -v /home/mysql/mysql-slave/conf:/etc/mysql/conf.d -d mysql:5.7
7 在主控端從資料庫配置檔案目錄建立my.cnf
# 建立my.cnf 檔案
vim /home/mysq/mysql-slave/conf/my.cnf
# 檔案内容
[mysqld]
## 設定server_id,同一區域網路中需要唯一
server_id=102
## 指定不需要同步的資料庫名稱
binlog-ignore-db=mysql
## 開啟二進制日志功能,以備Slave作為其它資料庫執行個體的Master時使用
log-bin=mall-mysql-slave1-bin
## 設定二進制日志使用記憶體大小(事務
binlog_cache_size=1M
## 設定使用的二進制日志格式(mixed,statement,row
binlog_format=mixed
## 二進制日志過期清理時間。預設值為0,表示不自動清理。
expire_logs_days=7
## 跳過主從複制中遇到的所有錯誤或指定類型的錯誤,避免slave端複制中斷。
## 如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從資料庫資料不一緻
slave_skip_errors=1062
## relay_log配置中繼日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将複制事件寫進自己的二進制日志
log_slave_updates=1
## slave設定為隻讀(具有super權限的使用者除外)
read_only=1
8 重新開機slave執行個體
# 重新開機mysql-slave
docker restart mysql-slave
9 在主資料庫中檢視主從狀态
show master status;
10 進入從伺服器配置主從複制
docker exec -it mysql-slave /bin/bash
mysql>change master to master_host='192.168.61.3', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
# 參數說明
master_host:主資料庫的IP位址;
master_port:主資料庫的運作端口;
master_user:在主資料庫建立的用于同步資料的使用者賬号;
master_password:在主資料庫建立的用于同步資料的使用者密碼;
master_log_file:指定從資料庫要複制資料的日志檔案,通過檢視主資料的狀态,擷取File參數;
master_log_pos:指定從資料庫從哪個位置開始複制資料,通過檢視主資料的狀态,擷取Position參數;
master_connect_retry:連接配接失敗重試的時間間隔,機關為秒。
#從資料庫檢視主從同步狀态
show slave status \G;
11 在從資料庫中開啟主從同步
mysql>start slave;
此時檢視主從同步狀态
mysql>show slave status \G;
12 測試
主資料庫建立庫,建立表,從資料庫可以直接檢視。