SpringBoot實戰電商項目mall(25k+star)地址:github.com/macrozheng/…mysql
本文將從MySql主從複製的原理出發,詳細介紹MySql在Docker環境下的主從複製搭建,以一個主實例和一個從實例實現主從複製爲例。git
主從複製是指將主數據庫的DDL和DML操做經過二進制日誌傳到從數據庫上,而後在從數據庫上對這些日誌進行從新執行,從而使從數據庫和主數據庫的數據保持一致。github
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
複製代碼
/mydata/mysql-master/conf
中建立一個配置文件my.cnf
:touch 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
複製代碼
docker restart mysql-master
複製代碼
mysql-master
容器中:docker exec -it mysql-master /bin/bash
複製代碼
mysql -uroot -proot
複製代碼
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
複製代碼
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
複製代碼
/mydata/mysql-slave/conf
中建立一個配置文件my.cnf
:touch 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
複製代碼
docker restart mysql-slave
複製代碼
show master status;
複製代碼
mysql-slave
容器中:docker exec -it mysql-slave /bin/bash
複製代碼
mysql -uroot -proot
複製代碼
change master to master_host='192.168.6.132', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
複製代碼
主從複製命令參數說明:sql
查看主從同步狀態:docker
show slave status \G;
複製代碼
start slave;
複製代碼
主從複製的測試方法有不少,能夠在主實例中建立一個數據庫,看看從實例中是否有該數據庫,若是有,表示主從複製已經搭建成功。數據庫
mall
;mall
數據庫,能夠判斷主從複製已經搭建成功。mall項目全套學習教程連載中,關注公衆號第一時間獲取。bash