參考: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
食用方法
git clone https://github.com/kuprince/mariadb_master_slave_quick.git
進入mariadb_master_slave_quick文件夾,執(zhí)行
docker-compose up -d
即可;-
docker-composer exec master_db bash
進入master容器,執(zhí)行sh master_sql.sh
查看File和Position的值;
File和Position 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