用 Docker 構建 MySQL 主從環境

前言

本篇文章記錄我使用 docker-compose 以及 dockerfile 來構建基於 binlog 的 MySQL 主從環境。若是你嚴格按照文中的步驟進行配置,相信很快就能夠搭建好一個基礎的 MySQL 主從環境。mysql

介紹


MySQL 主從同步分爲 5 個步驟:sql

  1. master 節點將數據的更新記錄寫到 binary log 中。
  2. slave 節點開啓 IO 線程鏈接 master 節點,請求獲取指定 binary log 文件的指定位置以後的日誌。
  3. master 節點的 binary log dump 線程將指定的 binary log 信息推送給 slave 節點。
  4. slave 節點的 IO 線程接收到消息後,將日誌內容寫入 relay log 文件。
  5. slave 節點的 SQL 線程檢測到 relay log 新增了內容,立刻解析 relay log 文件生成相應的 SQL 語句,並將這些 SQL 語句重放到數據庫,保證主從數據一致性。

配置

建立目錄結構

首先先搞定目錄結構,個人目錄結構以下,若是想按照本身的想法來組建目錄,在下文中的 docker-compose.yaml 文件與 Dockerfile 文件要注意修改文件路徑。
docker

配置 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

運行上述命令進行容器建立,若是構建時間過長,能夠考慮更換鏡像源,例以下面幾個國內優質鏡像源:數據庫

  1. 網易:http://hub-mirror.c.163.com
  2. 阿里雲:http://<你的ID>.mirror.aliyuncs.com
  3. 中國科學技術大學:http://docker.mirrors.ustc.ed...

構建完成以後,使用 docker ps 命令查看一下容器是否正常運行,出現以下情形則能夠認爲已經構建成功。
bash

配置 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; 命令,查看是否成功同步,出現以下情形則配置成功。其餘操做能夠本身嘗試,這裏再也不作演示。
ui

總結

這是我本身嘗試搭建 MySQL 主從架構所記錄的步驟,若是有卡在哪一步,能夠留言與我交流。😊😊😊阿里雲

相關文章
相關標籤/搜索