前言
本篇文章記錄我使用 docker-compose 以及 dockerfile 來構建基于 binlog 的 MySQL 主從環境。如果你嚴格按照文中的步驟進行配置,相信很快就可以搭建好一個基礎的 MySQL 主從環境。
介紹

MySQL 主從同步分為 3 個步驟:
- master 節點將數據的更新記錄寫到 binary log 中。
- slave 節點開啟 IO 線程連接 master 節點,請求獲取指定 binary log 文件的指定位置之后的日志。
- master 節點的 binary log dump 線程將指定的 binary log 信息推送給 slave 節點。
- slave 節點的 IO 線程接收到消息后,將日志內容寫入 relay log 文件。
- slave 節點的 SQL 線程檢測到 relay log 新增了內容,馬上解析 relay log 文件生成相應的 SQL 語句,并將這些 SQL 語句重放到數據庫,保證主從數據一致性。
配置
創建目錄結構
首先先搞定目錄結構,我的目錄結構如下,如果想按照自己的想法來組建目錄,在下文中的 docker-compose.yaml 文件與 Dockerfile 文件要注意修改文件路徑。

配置 docker-compose 模版文件
version: "3"
services:
mysql-master:
build:
context: ./
dockerfile: mysql/master/Dockerfile
container_name: mysql-master
volumes:
- ./mysql/master/data:/var/lib/mysql
restart: always
ports:
- 3305:3306
links:
- mysql-slave
mysql-slave:
build:
context: ./
dockerfile: mysql/slave/Dockerfile
container_name: mysql-slave
volumes:
- ./mysql/slave/data:/var/lib/mysql
restart: always
ports:
- 3306:3306
配置 master 節點的 cluster.cnf 文件以及 Dockerfile 文件
[mysqld]
server_id=100
binlog-ignore-db=mysql
log-bin=replicas-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
slave_skip_errors=1062
# 我的 MySQL 為 8.x,需要如下配置
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
FROM mysql:latest
ADD ./mysql/master/cluster.cnf /etc/mysql/conf.d/cluster.cnf
ENV MYSQL_ROOT_PASSWORD=password
配置 slave 節點的 cluster.cnf 文件以及 Dockerfile 文件
[mysqld]
server_id=101
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
slave_skip_errors=1062
relay_log=replicas-mysql-relay-bin
log_slave_updates=1
read_only=1
# 我的 MySQL 為 8.x,需要如下配置
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
FROM mysql:latest
ADD ./mysql/slave/cluster.cnf /etc/mysql/conf.d/cluster.cnf
ENV MYSQL_ROOT_PASSWORD=password
創建容器
docker-compose up -d mysql-master mysql-slave
運行上述命令進行容器創建,如果構建時間過長,可以考慮更換鏡像源,例如下面幾個國內優質鏡像源:
網易: http://hub-mirror.c.163.com
阿里云: http://< ;你的ID>.mirror.aliyuncs.com
中國科學技術大學: http://docker.mirrors.ustc.ed...
構建完成之后,使用 docker ps
命令查看一下容器是否正常運行,出現如下情形則可以認為已經構建成功。

配置 slave 節點

首先使用 docker 命令進入到 mysql-master 容器中,再登錄到 mysql 輸入 show master status
命令獲取主庫狀態,這里我們要關心兩個參數 File
以及 Position
,之后配置從庫會用到這兩個參數。

接下來使用 docker 命令進入 mysql-slave 容器,再登錄到 mysql 輸入以下語句進行與 mysql-master 連接。
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='root',
MASTER_PASSWORD=你設置的密碼,
MASTER_LOG_FILE=上一步得到的 File 參數,
MASTER_LOG_POS=上一步得到的 Position 參數;
輸入完成后再鍵入 start slave
命令啟動 slave 服務。啟動之后輸入 show slave status \G
命令查看 slave 節點狀態,出現如下情形可認為配置成功。

測試主從節點同步狀態

登錄到 mysql-master 節點,創建一個全新的庫,創建成功之后,切換到 mysql-slave 節點,輸入 show databases;
命令,查看是否成功同步,出現如下情形則配置成功。其他操作可以自己嘗試,這里不再做演示。

總結
這是我自己嘗試搭建 MySQL 主從架構所記錄的步驟,到此這篇關于詳解用Docker構建MySQL主從環境的文章就介紹到這了,更多相關Docker構建MySQL主從內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!