如何通过docker搭建percona-xtradb(mysql)集群,并使用xtrabackup实现全备与增备

环境准备

1台服务器,CentOS 7.2 及以上,1G内存以上,1核处理器以上,40G存储以上
percona使用pxc协议,同步使用wsrep,备份使用xtrabackup
这里为了方便演示,我们只在同一台宿主机上启用两个容器,一个是master,一个是node

配置环境

#安装docker
yum install -y docker
#启动docker
systemctl enable docker && systemctl start docker
#如果启动docker失败,请修改如下值
#重新编辑docker配置文件:
sed -i 's/--selinux-enabled/--selinux-enabled=false/' /etc/sysconfig/docker
#下载percona-xtradb-cluster镜像
docker pull percona/percona-xtradb-cluster
docker tag percona/percona-xtradb-cluster pxc #更改镜像标签
#添加一个专用的网络用于pxc
docker network create --subnet=172.19.0.0/24 pxc_net
docker network inspect pxc_net
#添加本地数据持久化目录,这里也可选择使用nfs挂载文件服务器的目录或者使用ceph分工化文件集群
mkdir /home/pxc/backup -p
mkdir /home/pxc/master.data /home/pxc/master.log /home/pxc/node.data /home/pxc/node.data
chmod -R 777 /home/pxc/* #或者chmod -R mysql:mysql /home/pxc/*

启动容器

#创建master容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root --net pxc_net \
-v /home/pxc/master.data/:/var/lib/mysql -v /home/pxc/master.log/:/logs \
-v /home/pxc/backup/:/backup --privileged --name master pxc
#创建node容器
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=root -e CLUSTER_JOIN=master \
--net pxc_net \
-v /home/pxc/slave.data/:/var/lib/mysql -v /home/pxc/slave.log/:/logs \
-v /home/pxc/backup/:/backup --privileged --name node1 pxc

测试

docker exec -it master /bin/bash
mysql -u root -p
#输入密码
show databases;
#在master上创建一个新库test
create database test default character set utf8;
quit;
exit;
#连接到node上
docker exec -it node1 /bin/sh
mysql -u root -p
show databases;
#这里我们会看到新刚创建的test数据库

全备份与恢复

docker exec -it master /bin/sh
#开始全备份
innobackupex --user root --password root -- /backup/
#查看全备份
ls -l /backup
#结果可以看到新产生一个文件夹,如:2020-03-27_01-09-09
#尝试在这里将test数据库删除
mysql -u root -p
drop database test; #此步删除,会将集群所有的test数据库同步删除
#然后通过恢复备份,找回数据
#首先需要apply全备份
innobackupex --apply-log /backup/2020-03-27_01-09-09/
#看到completed OK!说明成功了
#然后清空data
rm -rf /var/lib/mysql/*
#恢复数据
innobackupex --copy-back /backup/2020-03-27_01-09-09/
#测试
mysql -u root -p
show databases;
#这里可以看到被删除的test恢复了。
#请注意,这里恢复之后,需要重启docker容器,因我们使用了集群,所以需要将所有的容器都重启一次。
#重启后,node节点会自动从master节点同步
docker restart master node1

增量备份与恢复

#在test里,添加一个表并插入数据
docker exec -it master /bin/sh
mysql -u root -p
use test;
CREATE TABLE t (
  id int(11) NOT NULL,
  PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;
insert into t values(1);
#开始基于上次的全备份做一次增量备份
innobackupex --user root --password root --incremental /backup/increment/ --incremental-basedir /backup/all_db/2020-03-27_01-37-58/
#删除表t
mysql -uroot -proot test
drop table t;
#恢复增量
rm -rf /var/lib/mysql/*
innobackupex --apply-log --redo-only /backup/all_db/2020-03-27_01-37-58/
innobackupex --apply-log --redo-only /backup/all_db/2020-03-27_01-37-58/ --incremental-dir=/backup/increment/2020-03-27_02-23-13/
innobackupex --copy-back /backup/all_db/2020-03-27_01-37-58/
#完成。
#请注意,这里恢复之后,需要重启docker容器,因我们使用了集群,所以需要将所有的容器都重启一次。
#重启后,node节点会自动从master节点同步
docker restart master node1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值