說明
MySQL使用的是5.7版本,其實用Docker裝數據庫就是圖個方便,生產環境還是不建議哈!
本文重點在主從復制,需要部署單機版請查看另外一個教程:CentOS 7 使用Docker方式安裝部署MySQL 5.7
第一步,分別在機器上裝好docker并啟動(不會使用docker的話請先百度了解一下)
第二步,分別在機器上創建掛載目錄,如下
主庫機器
mkdir -p /usr/local/docker/mysql/data/
從庫機器
mkdir -p /usr/local/docker/mysql/data/
第三步,分別以docker方式部署mysql,如下
主庫
docker run -dit --name mysql-5.7-master -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my1234 mysql:5.7 --lower_case_table_names=1 --server-id=100 --log-bin=mysql-bin
從庫
docker run -dit --name mysql-5.7-slave -p 3306:3306 -v /etc/localtime:/etc/localtime:ro -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my1234 mysql:5.7 --lower_case_table_names=1 --server-id=101 --log-bin=mysql-slave-bin --relay_log=edu-mysql-relay-bin --log_slave_updates=1
image.png
說明
- lower_case_table_names設置不區分大小寫。
- MYSQL_ROOT_PASSWORD設置root用戶密碼,本例子中賬號密碼都設置為my1234,連接請用該賬號密碼。
- /etc/localtime:/etc/localtime:ro設置時區跟隨宿主機。
- 端口隨自己修改,修改后注意docker容器的映射端口要跟著改。
- server_id注意要唯一。
- log-bin開啟二進制日志功能。
- relay_log配置中繼日志。
- log_slave_updates復制的數據寫入日志中。
第四步,主庫創建數據同步的用戶slave,如下
并授予slave用戶REPLICATION SLAVE權限和REPLICATION CLIENT權限,用于在主從庫之間同步數據
# 進入容器
docker exec -it mysql-5.7-master /bin/bash
# 進入mysql
mysql -uroot -pmy1234
# 創建用戶
CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
# 授予用戶
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
image.png
第五步,備份主庫數據到從庫(如果是新建數據庫,跳過這一步),如下
1. 在主庫上加鎖,使只有只讀權限,防止新數據的寫入
# 進入容器
docker exec -it mysql-5.7-master /bin/bash
# 進入mysql
mysql -uroot -pmy1234
# 加鎖
flush table with read lock;
image.png
2. 查看當前主庫狀態,記下這個數值,后面要用
show master status;
image.png
3. 備份數據
# 進入容器
docker exec -it mysql-5.7-master /bin/bash
# 進入mysql
mysql -uroot -pmy1234
# 備份數據
mysqldump -uroot -pmy1234 --all-databases|gzip > dump.sql.gz
# 釋放鎖
unlock tables;
image.png
4. 將文件傳到從庫所在機器,ip,路徑自行替換
# 復制數據到宿主機
docker cp mysql-5.7-master:/dump.sql.gz /usr/local/docker/mysql
# 服務器傳輸
scp /usr/local/docker/mysql/dump.sql.gz root@從庫機器ip:/usr/local/docker/mysql
5. 恢復數據到從庫,路徑自行替換
# 解壓文件
gzip -d /usr/local/docker/mysql/dump.sql.gz
# 移動文件到掛載目錄下
mv /usr/local/docker/mysql/dump.sql /usr/local/docker/mysql/data/dump.sql
# 進入容器
docker exec -it mysql-5.7-slave /bin/bash
# 進入mysql
mysql -uroot -pmy1234
# 恢復數據,慢慢等吧,比較耗時
source /var/lib/mysql/dump.sql
第六步,配置從庫進行同步,如下
1. 配置同步
# 進入容器
docker exec -it mysql-5.7-slave /bin/bash
# 進入mysql
mysql -uroot -pmy1234
# 配置同步
change master to master_host='主庫機器ip', master_user='slave', master_password='my1234', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=46781778;
說明
- master_user和master_password為第四步在主庫創建的用戶和密碼
- master_log_file和master_log_pos均為第五步第2點查看的主庫狀態(新創建的庫直接用"show master status;"命令查看主庫狀態即可得到)
2. 開啟同步
# 開啟同步
start slave;
# 查看從庫同步狀態
show slave status;
image.png
說明
- Slave_IO_Running為讀取master的binaryLog的線程
- Slave_SQL_Running為執行SQL的線程
- 如圖,Slave_IO_Running和Slave_SQL_Running都為YES即配置成功