詳解用Docker構(gòu)建MySQL主從環(huán)境
前言
本篇文章記錄我使用 docker-compose 以及 dockerfile 來構(gòu)建基于 binlog 的 MySQL 主從環(huán)境。如果你嚴(yán)格按照文中的步驟進(jìn)行配置,相信很快就可以搭建好一個(gè)基礎(chǔ)的 MySQL 主從環(huán)境。
介紹
MySQL 主從同步分為 3 個(gè)步驟:
- master 節(jié)點(diǎn)將數(shù)據(jù)的更新記錄寫到 binary log 中。
- slave 節(jié)點(diǎn)開啟 IO 線程連接 master 節(jié)點(diǎn),請(qǐng)求獲取指定 binary log 文件的指定位置之后的日志。
- master 節(jié)點(diǎn)的 binary log dump 線程將指定的 binary log 信息推送給 slave 節(jié)點(diǎn)。
- slave 節(jié)點(diǎn)的 IO 線程接收到消息后,將日志內(nèi)容寫入 relay log 文件。
- slave 節(jié)點(diǎn)的 SQL 線程檢測(cè)到 relay log 新增了內(nèi)容,馬上解析 relay log 文件生成相應(yīng)的 SQL 語句,并將這些 SQL 語句重放到數(shù)據(jù)庫,保證主從數(shù)據(jù)一致性。
配置
創(chuàng)建目錄結(jié)構(gòu)
首先先搞定目錄結(jié)構(gòu),我的目錄結(jié)構(gòu)如下,如果想按照自己的想法來組建目錄,在下文中的 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 節(jié)點(diǎn)的 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 節(jié)點(diǎn)的 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
創(chuàng)建容器
docker-compose up -d mysql-master mysql-slave
運(yùn)行上述命令進(jìn)行容器創(chuàng)建,如果構(gòu)建時(shí)間過長(zhǎng),可以考慮更換鏡像源,例如下面幾個(gè)國(guó)內(nèi)優(yōu)質(zhì)鏡像源:
網(wǎng)易: http://hub-mirror.c.163.com
阿里云: http://< ;你的ID>.mirror.aliyuncs.com
中國(guó)科學(xué)技術(shù)大學(xué): http://docker.mirrors.ustc.ed...
構(gòu)建完成之后,使用 docker ps
命令查看一下容器是否正常運(yùn)行,出現(xiàn)如下情形則可以認(rèn)為已經(jīng)構(gòu)建成功。
配置 slave 節(jié)點(diǎn)
首先使用 docker 命令進(jìn)入到 mysql-master 容器中,再登錄到 mysql 輸入 show master status
命令獲取主庫狀態(tài),這里我們要關(guān)心兩個(gè)參數(shù) File
以及 Position
,之后配置從庫會(huì)用到這兩個(gè)參數(shù)。
接下來使用 docker 命令進(jìn)入 mysql-slave 容器,再登錄到 mysql 輸入以下語句進(jìn)行與 mysql-master 連接。
CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='root', MASTER_PASSWORD=你設(shè)置的密碼, MASTER_LOG_FILE=上一步得到的 File 參數(shù), MASTER_LOG_POS=上一步得到的 Position 參數(shù);
輸入完成后再鍵入 start slave
命令啟動(dòng) slave 服務(wù)。啟動(dòng)之后輸入 show slave status \G
命令查看 slave 節(jié)點(diǎn)狀態(tài),出現(xiàn)如下情形可認(rèn)為配置成功。
測(cè)試主從節(jié)點(diǎn)同步狀態(tài)
登錄到 mysql-master 節(jié)點(diǎn),創(chuàng)建一個(gè)全新的庫,創(chuàng)建成功之后,切換到 mysql-slave 節(jié)點(diǎn),輸入 show databases;
命令,查看是否成功同步,出現(xiàn)如下情形則配置成功。其他操作可以自己嘗試,這里不再做演示。
總結(jié)
這是我自己嘗試搭建 MySQL 主從架構(gòu)所記錄的步驟,到此這篇關(guān)于詳解用Docker構(gòu)建MySQL主從環(huán)境的文章就介紹到這了,更多相關(guān)Docker構(gòu)建MySQL主從內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用docker compose一鍵部署多個(gè)服務(wù)的方法
docker compose 是 docker 官方的開源項(xiàng)目,用來實(shí)現(xiàn)對(duì) docker 容器集群的快速編排,通過docker-compose可以一鍵創(chuàng)建和刪除多個(gè)容器 ,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-01-01關(guān)于docker安全之Docker-TLS加密通訊問題
這篇文章主要介紹了docker安全之Docker-TLS加密通訊,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12使用docker部署springboot項(xiàng)目到服務(wù)器的詳細(xì)過程
這篇文章主要介紹了docker部署springboot項(xiàng)目到服務(wù)器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06Docker安裝MySQL并使用Navicat連接的使用示例
在Docker里運(yùn)行MySQL的方式還是很方便的,本文主要介紹了Docker安裝MySQL并使用Navicat連接的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié)
本文主要介紹了Docker數(shù)據(jù)卷掛載命令volume(-v)與mount的使用總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08docker批量啟動(dòng)關(guān)閉所有容器的操作
這篇文章主要介紹了docker批量啟動(dòng)關(guān)閉所有容器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03