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

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

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

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)境變量中讀取的方式,即在當(dāng)前目錄中新建一個(gè).env文件,文件中寫(xiě)入對(duì)應(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ǔ),方便自己寫(xiě)的腳本隨容器啟動(dòng)運(yùn)行
FROM mariadb/server
# 添加當(dāng)前目錄中的master_sql.sh到自啟動(dòng)目錄
ADD ./master_sql.sh /docker-entrypoint-initdb.d
# 添加當(dāng)前目錄中的master_my.cnf到mysql數(shù)據(jù)庫(kù)的配置文件目錄中
ADD ./master_my.cnf /etc/mysql/my.cnf
# 定義工作目錄(就是進(jìn)入容器后的默認(rèn)目錄)
WORKDIR /docker-entrypoint-initdb.d

master_sql.sh文件

#! /bin/bash
# mysql賬戶(hù)和密碼
USERNAME="root"
USERPASS="123456"
# 用于備份的賬戶(hù)和密碼
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行開(kāi)始)

[mysqld]
# * My Settings
# 主機(jī)id,不能重復(fù)
server-id=1
# 開(kāi)啟二進(jìn)制日志
log_bin=master-bin
# 不同步mysql,information_schema,  performance_schema這幾個(gè)庫(kù)
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賬號(hào)和密碼
USERNAME="root"
USERPASS="123456"
# 用于備份的賬號(hào)和密碼
BACKNAME="backup"
BACKWORD="backup"
# 主機(jī)配置信息
HOST='192.168.0.106'
PORT=23306 
#---------------------分割線-----------------
# 在master容器中運(yùn)行master_sql.sh進(jìn)行查看并修改
LOG_FILE='master-bin.000003' 
LOG_POS=654 


# 停止復(fù)制
mysql -u${USERNAME} -p${USERPASS} -e "stop slave"
# 修改主機(jī)配置信息
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};" 
# 開(kāi)啟復(fù)制
mysql -u${USERNAME} -p${USERPASS} -e "start slave"
# 展示配置信息
mysql -u${USERNAME} -p${USERPASS} -e "show slave status\G"

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

[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. 進(jìn)入mariadb_master_slave_quick文件夾,執(zhí)行docker-compose up -d即可;

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

    File和Position

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

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

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

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

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

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