专栏首页编程坑太多「实战篇」开源项目docker化运维部署-mysql 热备份数据(五)

「实战篇」开源项目docker化运维部署-mysql 热备份数据(五)

本次说说热热备份数据,上次搭建了pxc的集群,搭建好了复杂均衡,做了双机热备这种方案。无论做前后端分离的项目,还是做微服务的项目,都需要有一个强大稳定的集群。数据库备份分为:热备份和冷备份,如果项目没有上线冷备份没问题。如果上线用冷备份就有问题。源码:https://github.com/limingios/netFuture/tree/master/mysql-pxc/

冷备份

  1. 冷备份是关闭数据库时候的备份方式,通常做法是拷贝数据文件
  2. 冷备份是最简单最安全的一种备份方式
  3. 大型网站无法做到关闭业务备份数据,所以冷备份不是最佳选择
  • PXC冷备份方案

先让其中的一个PXC下线,然后通过拷贝数据文件的方式完成备份,备份完毕下线的PXC上线,完整于其他节点的自动同步。

热备份

  1. 热备份是在系统运行的状态下备份数据,也是难度最大的备份。举个例子,如果淘宝下线1个小时备份数据,淘宝损失多少钱,谁受的的了啊。这都是白花花的银子啊。
  2. Mysql常用的热备份有LVM和XtraBackup两种方案。LVM是针对的分区备份,针对linux系统下的,他号称任何一种数据库都可以完成备份,但是有个弊端,就是在备份的时候只能读不能写入。
  3. 建议使用XtrBackup热备Mysql,不需要锁,备份的时候即可读也可以写,XtraBackup而且还是免费的。

XtrBackup

是一款基于InnoDB的在线热备工具,具有开源免费的,支持在线热备,占用磁盘空间小,能够非常快速的备份与恢复mysql数据库。它支持mysql的各种衍生版本。

  • XtraBackup优势
  1. 备份过程不锁表,快速可靠
  2. 备份过程不会打断正在执行的事务
  3. 能够基于压缩等功能节约磁盘空间和流量
  • 全量备份和增量备份
  1. 全量备份是备份全部数据,备份过程时间,占用空间大。
  2. 增量备份是只备份变化的那部分数据。备份时间短。占用空间小。

在正常的生产系统上,一般是一周做一次全量的备份,一周做一次增量的备份。就足够了。

XtraBackup 安装

  • 准备工作

这个工具要求在数据库的节点之内。备份的出来的数据就直接。需要创建一个数据卷,他用来备份XtraBackup 产生的文件,然后映射到宿主机的磁盘里面。 创建数据卷

docker volume create backup

停止其中一个节点,这里选择node1,目的就是为了删除node1,增加新创建的数据卷。已经运行的容器是不可以增加新的数据卷的。只要还挂载v1的数据卷,v1的文件并没有删除,所以数据不会丢失。

docker stop node1
docker rm node1

重新安装node1 挂载新的节点,并同步其他4个节点。 --CLUSTER_JONIN=node2 新创建的node1,同步node2节点。

docker run -d -p 3306:3306  --net=net1 --name=node1 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -v v1:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.2 \
        -v backup:/data \
        -e CLUSTER_JOIN=node2 \
        percona/percona-xtradb-cluster
  • PXC 全量备份数据

PXC容器中安全XtraBackup,并执行备份,后悔啊当初PXC的时候没直接找个带XtraBackup的镜像。

docker exec -it --user root node1
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null 
apt-get clean
apt-get update
apt-get install vim
vi /etc/apt/sources.list

sources.list 添加下面的内容

deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse 
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse 
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
apt-get clean
apt-get update
apt-get install percona-xtrabackup-24

全量备份的命令

出现completed OK!说明备份完毕。

innobackupex --user=root --password=a123456 /data/backup/full

PXC 全量恢复步骤

  1. 数据库可以热备份,但是不能热还原。为了避免恢复过程中的数据同步,我们采用空白的mysql还原数据,然后再建立PXC集群的方式。所以在开发中一定要注意权限问题,不要给开发人员root用户。
  2. 还原数据前要将未提交的事务回滚,还原数据之后重启!
  • 执行代码

原来的容器全部删除

docker stop node1 node2 node3 node4 node5
docker rm node1 node2 node3 node4 node5
docker volume rm v1 v2 v3 v4 v5
docker volume create v1

创建node1 和数据卷

docker volume create v1
docker run -d -p 3306:3306  --net=net1 --name=node1 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -v v1:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.2 \
        -v backup:/data \
        percona/percona-xtradb-cluster

进入容器内还原数据库

#root用户登录
docker exec -it --user root  node1 bash
#删除数据
rm -rf /var/lib/mysql/*
#没有提交的数据回滚
innobackupex --user=root --password=a123456 --apply-back /data/backup/full/2018-12-06_17-18-19/
#执行下冷还原
innobackupex --user=root --password=a123456 --copy-back /data/backup/full/2018-12-06_17-18-19/
chown -R mysql:mysql /var/lib/mysql/

退出容器重启下,node1节点

docker stop node1
docker start node1

PS:数据库的热备份,冷还原也讲完了,真心感觉也不是那么复杂。其实就是这样,但是在云平台越来越盛行的今天,基本上买个rdrs数据库这些功能都有了。了解下XtraBackup 这个工具确定很重要晚上很多的写成shell脚本的,更加方便了。

本文分享自微信公众号 - 编程坑太多(idig88),作者:诸葛阿明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java web项目中redis集群或单击版配置详解

    IT故事会
  • 跟我一起学docker(九)--持续系统集成了解下git

    IT故事会
  • 『高级篇』docker之gitlab和jenkins-CICD流程(43)

    PS:最后总结下,建议jenkins不要使用容器安装,我用容器安装入了至少十几个坑,对了解命令还是有好处的。我总结几点

    IT故事会
  • MySQL备份恢复深度优化计划

    备份恢复之前和同事投入了一些精力来完善,算是走上了平台化对接的一个开始,在满足功能的前提下,能够基本实现数据全备,增备和DML闪回,但是在性能和可控性方面还是存...

    jeanron100
  • 学会用各种姿势备份MySQL数据库

    前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事...

    小小科
  • 删库就跑路了,那删系统呢?

    做IT这行真的是怕丢东西啊,为了以防root下 rm -rf类似的事件或者其他的需要时,我们要备份,备份,备份!!!其实大多数人对备份的了解也不是那么深,只是知...

    DataScience
  • 多云虚拟化环境的备份遵从性

    企业IT部门是否可以保护它存储在云中的数据?在一定程度上是这样。云计算提供商在为活动数据构建冗余和可用性方面通常是值得信赖的,但是真正的合规性需要可靠的备份。

    静一
  • mysql备份与恢复

    对于DBA来说,备份和恢复是一项最基本的操作,在服务器宕机、磁盘损坏、RAID卡损坏等意外情况下,要保证数据不丢失或者丢失量在可接受范围内,每个DBA应该时刻...

    AsiaYe
  • Mysql备份与恢复(1)---物理备份

    数据库对企业来说最重要的莫过于其中的数据,所以做好数据库的备份是一个不可或缺的工作。数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工...

    逆月翎
  • 图文简述三种备份方式

    我们经常提到备份时,会想到全量备份、增量备份,但实际还有一个差异备份,我们就开始迷糊了。原来我们曾经以为理解的备份也不这么简单,我们来看一下。

    希望的田野

扫码关注云+社区

领取腾讯云代金券