Docker mysql集群镜像制作

环境

服务器IP
mysql-master10.20.101.92
mysql-slave10.20.101.125

基础镜像

docker pull mysql:5.7.33

master

  • my.cnf
mkdir -p /data/mysql/master
cd /data/mysql/master

vim my.cnf
[mysqld]
# [必须]启用二进制日志
log-bin=mysql-bin
# [必须]服务器唯一ID
server-id=10
  • Dockerfile
FROM mysql:5.7.33
# 作者信息
MAINTAINER xun
ENV TZ Asia/Shanghai
COPY my.cnf /etc/mysql/

docker build --rm -t mysql-master:5.7.33 .

docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql mysql-master:5.7.33 --character-set-server=utf8 --collation-server=utf8_general_ci

slave

  • my.cnf
mkdir -p /data/mysql/slave
cd /data/mysql/slave
vim my.cnf
[mysqld]
# [必须]启用二进制日志
log-bin=mysql-bin
# [必须]服务器唯一ID
server-id=11
  • Dockerfile
FROM mysql:5.7.33
# 作者信息
MAINTAINER xun
ENV TZ Asia/Shanghai
COPY my.cnf /etc/mysql/

docker build --rm -t mysql-slave:5.7.33 .

docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql mysql-slave:5.7.33 --character-set-server=utf8 --collation-server=utf8_general_ci

配置master权限

# navicat登录mysql-master
# 创建同步账户以及授权
create user 'study'@'%' identified by 'study';
grant replication slave on *.* to 'study'@'%';
flush privileges;

# 查看master状态,需要关注File、Position两个字段,配置slave的时候会用到
show master status;

# 查看二进制日志相关的配置项
show global variables like 'binlog%';

# 查看server相关的配置项
show global variables like 'server%';

配置slave权限

# 设置master相关信息
# mysql-bin.000003替换为master中File字段值,741替换为Position值
CHANGE MASTER TO master_host='10.20.101.92', master_user='study', master_password='study', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=741;

# 启动同步
start slave;

# 查看master状态
# 关注Slave_IO_Running = YES, Slave_SQL_Running = YES
show slave status;

主从测试

# 在master上创建数据库 study
create database study;
# 建表 tb_user
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(30) DEFAULT NULL COMMENT '用户名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
# 增加数据
INSERT INTO `tb_user` VALUES (1, '张三');
INSERT INTO `tb_user` VALUES (2, '李四');

# 管擦从库是否有变化

bitnami/mysql – 非官方集群方式

环境

服务器IP
mysql-master10.20.101.92
mysql-slave10.20.101.125

基础镜像

docker pull bitnami/mysql:5.7.33

master

# -v 需要注意权限问题
# 初始化语句放在/data/bitnamimysql/docker-entrypoint-initdb.d/ 下
docker run -itd --name mysql-master \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_REPLICATION_MODE=master \
-e MYSQL_REPLICATION_USER=study \
-e MYSQL_REPLICATION_PASSWORD=study \
-v /data/bitnamimysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d \
bitnami/mysql:5.7.33

slave

docker run -itd --name mysql-slave \
-p 3306:3306 \
-e MYSQL_REPLICATION_MODE=slave \
-e MYSQL_REPLICATION_USER=study \
-e MYSQL_REPLICATION_PASSWORD=study \
-e MYSQL_MASTER_HOST=10.20.101.92 \
-e MYSQL_MASTER_ROOT_PASSWORD=123456 \
-e MYSQL_MASTER_PORT_NUMBER=3306 \
bitnami/mysql:5.7.33

主主复制

环境

服务器IP端口备注
mysql-server10.20.101.923301、3302、3303如果用多台服务器,就涉及到集群

基础镜像

docker pull percona/percona-xtradb-cluster:5.7.32
# 名字太长,修改以下
docker tag percona/percona-xtradb-cluster:5.7.32 pxc:5.7.32

搭建步骤

  • docker-compose方式
mkdir -p /data/pxc

cd /data/pxc

mkdir -p v1 v2 v3 master slave

# 目录授权
chmod -R 777 /data/pxc

# 创建网络
docker network create pxc_network -d bridge

# master docker-compose.yml
version: '3.8'
services:
  pxc01:
    restart: always
    image: pxc:5.7.32
    container_name: pxc01
    privileged: true
    ports:
    - 3301:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - CLUSTER_NAME=pxc
    volumes:
    - /data/pxc/v1:/var/lib/mysql
networks:
  default:
    external: 
      name: pxc_network

# 运行第一个节点
docker-compose up -d

# **剩下的两个节点,必须等待第一个节点完全启动之后,才能运行**

# slave docker-compose.yml
version: '3.8'
services:
  pxc02:
    restart: always
    image: pxc:5.7.32
    container_name: pxc02
    privileged: true
    ports:
    - 3302:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - CLUSTER_NAME=pxc
      - CLUSTER_JOIN=pxc01
    volumes:
    - /data/pxc/v2:/var/lib/mysql
  pxc03:
    restart: always
    image: pxc:5.7.32
    container_name: pxc03
    privileged: true
    ports:
      - 3303:3306
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - CLUSTER_NAME=pxc
      - CLUSTER_JOIN=pxc01
    volumes:
      - /data/pxc/v3:/var/lib/mysql
networks:
  default:
    external: 
      name: pxc_network

# 运行节点
docker-compose up -d

# 测试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值