使用Docker快速搭建Mariadb主從復(fù)制環(huán)境

參考:MariaDB/Mysql的主從復(fù)制部署(Docker)
食用方法在結(jié)尾

1. docker-compose.yml的編寫,首先需要一主一從兩個容器,在此定義好要用的鏡像,端口映射,掛載卷等。

version: "3"
services:
  master_db:
    build:
      context: ./master
    container_name: master
    ports:
      - "23306:3306"
    volumes:
      - "/var/docker/master/:/var/lib/mysql"
    restart: always
    environment:
      # 這里需要特別注意一下,這是mysql的密碼,我用的是從環(huán)境變量中讀取的方式,即在當前目錄中新建一個.env文件,文件中寫入對應(yīng)的值。
      MYSQL_ROOT_PASSWORD: 

  slave1_db:
    build:
      context: ./slave1
    container_name: slave1
    ports:
      - "23307:3306"
    volumes:
      - "/var/docker/slave1/:/var/lib/mysql"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 

2. master鏡像的構(gòu)建, Dockerfile如下

# 以mariadb/server鏡像為基礎(chǔ),方便自己寫的腳本隨容器啟動運行
FROM mariadb/server
# 添加當前目錄中的master_sql.sh到自啟動目錄
ADD ./master_sql.sh /docker-entrypoint-initdb.d
# 添加當前目錄中的master_my.cnf到mysql數(shù)據(jù)庫的配置文件目錄中
ADD ./master_my.cnf /etc/mysql/my.cnf
# 定義工作目錄(就是進入容器后的默認目錄)
WORKDIR /docker-entrypoint-initdb.d

master_sql.sh文件

#! /bin/bash
# mysql賬戶和密碼
USERNAME="root"
USERPASS="123456"
# 用于備份的賬戶和密碼
BACKNAME="backup"
BACKPASS="backup"

# 授予權(quán)限
mysql -u${USERNAME} -p${USERPASS} -e "grant replication slave on *.* to '${BACKNAME}'@'%' identified by '${BACKPASS}' " 
# 刷新
mysql -u${USERNAME} -p${USERPASS} -e "flush privileges"
# 查看
mysql -u${USERNAME} -p${USERPASS} -e "show master status\G"

my.cnf文件修改部分(我的是從第30行開始)

[mysqld]
# * My Settings
# 主機id,不能重復(fù)
server-id=1
# 開啟二進制日志
log_bin=master-bin
# 不同步mysql,information_schema,  performance_schema這幾個庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

innodb_flush_log_at_trx_commit=1
binlog_format=mixed

3. slave1鏡像的構(gòu)建, Dockerfile如下

FROM mariadb/server
ADD ./slave1_my.cnf /etc/mysql/my.cnf
ADD ./slave_sql.sh /root
WORKDIR /root

slave_sql.sh文件

#! /bin/bash
#----------以下內(nèi)容修改成自己的-----------
# mysql賬號和密碼
USERNAME="root"
USERPASS="123456"
# 用于備份的賬號和密碼
BACKNAME="backup"
BACKWORD="backup"
# 主機配置信息
HOST='192.168.0.106'
PORT=23306 
#---------------------分割線-----------------
# 在master容器中運行master_sql.sh進行查看并修改
LOG_FILE='master-bin.000003' 
LOG_POS=654 


# 停止復(fù)制
mysql -u${USERNAME} -p${USERPASS} -e "stop slave"
# 修改主機配置信息
mysql -u${USERNAME} -p${USERPASS} -e "change master to 
MASTER_HOST = '${HOST}', 
MASTER_USER = '${BACKNAME}',  
MASTER_PASSWORD = '${BACKWORD}', 
MASTER_PORT = ${PORT}, 
MASTER_LOG_FILE = '${LOG_FILE}', 
MASTER_LOG_POS = ${LOG_POS};" 
# 開啟復(fù)制
mysql -u${USERNAME} -p${USERPASS} -e "start slave"
# 展示配置信息
mysql -u${USERNAME} -p${USERPASS} -e "show slave status\G"

my.cnf文件修改部分(我的是從第30行開始)

[mysqld]
# * My Settings
server-id=2
relay-log-index=slave1-relay-bin.index
relay-log=slave1-relay-bin
relay_log_recovery=1

食用方法

  1. git clone https://github.com/kuprince/mariadb_master_slave_quick.git

  2. 進入mariadb_master_slave_quick文件夾,執(zhí)行docker-compose up -d即可;

  3. docker-composer exec master_db bash進入master容器,執(zhí)行sh master_sql.sh查看File和Position的值;

    File和Position

  4. docker-composer exec slave1_db bash進入從服務(wù)器修改slave_sql.sh中對應(yīng)的參數(shù),修改完成后保存運行sh slave_sql.sh查看是否配置成功;

其中clear.sh為清理腳本,只有部署失敗或者不需要此環(huán)境的時候才需要執(zhí)行,正常部署環(huán)境過程中不需要執(zhí)行此腳本

最后的最后還是附上地址:

https://github.com/kuprince/mariadb_master_slave_quick/tree/master

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容