基于Docker部署MariaDB单机主从复制集群

  • 构建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;

 

转载于:https://my.oschina.net/u/3188204/blog/3011762

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值