- 构建MariaDB镜像
启动Centos容器并进入容器
docker run -it --rm --name=mariadb centos bash
yum install -y mariadb-server
安装数据库
mysql_install_db
将容器保存成一个新的镜像
docker commit <容器ID> mariadb
编写Dockerfile
FROM mariadb:latest
MAINTAINER zhoujz
ENV DATA_DIR=/var/lib/mysql \
LOG_ERROR=/var/log/mariadb \
PID_FILE=/var/run/mariadb \
ETC=/etc
EXPOSE 3306
VOLUME [$DATA_DIR,$LOG_ERROR,$PID_FILE,$ETC]
CMD mysqld_safe --defaults-file=/etc/my.cnf
通过Dockerfile构建镜像
docker build -t mariadb .
- 集群容器编排
编辑docker-compose.yml
version: '3'
services:
node1:
build: .
ports:
- 13306:3306
volumes:
- node1_data_dir:/var/lib/mysql
- node1_etc:/etc
- node1_log_error:/var/log/mariadb
- node1_pid_file:/var/run/mariadb
networks:
- app
hostname: node1
node2:
build: .
ports:
- 13307:3306
volumes:
- node2_data_dir:/var/lib/mysql
- node2_etc:/etc
- node2_log_error:/var/log/mariadb
- node2_pid_file:/var/run/mariadb
networks:
- app
hostname: node2
networks:
app:
volumes:
node1_data_dir:
node1_etc:
node1_log_error:
node1_pid_file:
node2_data_dir:
node2_etc:
node2_log_error:
node2_pid_file:
- 启动集群
docker-compose up -d
- 集群配置
配置权限
chown -R mysql /var/lib/mysql
chgrp -R mysql /var/lib/mysql
chmod -R ug+rwx /var/lib/mysql
创建开发账号
create user 'dev'@'%' identified by 'dev';
创建复制账号
grant replication slave, replication client on *.* to repl@'%' identified by 'repl';
进入节点1
docker-compose exec node1 bash
配置节点1为主库
vi /etc/my.conf
[mysqld_safe]下添加配置
user=mysql
[mysqld]下添加配置
user=mysql
# 服务器ID
server_id=10
# 机器ID
log_bin=mysql-bin
# 每次提交事务前将二进制日志同步到磁盘上,保证服务器崩溃时不会丢失事件
sync_binlog=1
innodb_flush_log_at_trx_commit
innodb_support_xa=1
退出,重启容器
docker-compose restart node1
进入节点2
docker-compose exec node2 bash
配置节点2为从库
vi /etc/my.conf
[mysqld_safe]下添加配置
user=mysql
[mysqld]下添加配置
user=mysql
server_id=20
log_bin=mysql-bin
# 指定中继日志的位置和命名
relay_log=/var/lib/mysql/mysql-relay-bin
# 允许从库将其重放的事件也记录到自身的二进制日志中
log_slave_updates=1
# 阻止任何没有特权权限的线程修改数据
read_only=1
# 阻止从库崩溃后自动重启
skip_slave_start
sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1
退出,重启容器
docker-compose restart node2
进入节点1
docker-compose exec node1 bash
进入mysql
mysql
查看主库状态
show master status;
进入节点2
docker-compose exec node2 bash
进入mysql
mysql
指定主库配置
change master to master_host='node1.mariadb_app', master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0;
查看从库状态
show salve status;
Slave_IO_State, Slave_IO_Running, Slave_SQL_Running表示从库复制状态,空表示尚未开始复制
开始复制
start slave;