无论做前后端分离的项目,还是做微服务的项目,都需要有一个强大稳定的集群。数据库备份分为:热备份和冷备份,如果项目没有上线冷备份没问题。如果上线用冷备份就有问题。




数据库处于热备用状态sql server 数据库热备和冷备区别_ubuntu


冷备份

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

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


数据库处于热备用状态sql server 数据库热备和冷备区别_ubuntu_02


热备份

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

XtrBackup

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


数据库处于热备用状态sql server 数据库热备和冷备区别_docker_03


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

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

XtraBackup 安装

  • 准备工作

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

创建数据卷

docker volume create backup


数据库处于热备用状态sql server 数据库热备和冷备区别_mysql容器 重启_04


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

docker stop node1docker rm node1


数据库处于热备用状态sql server 数据库热备和冷备区别_ubuntu_05


重新安装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


数据库处于热备用状态sql server 数据库热备和冷备区别_docker_06


数据库处于热备用状态sql server 数据库热备和冷备区别_数据_07


  • PXC 全量备份数据

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

docker exec -it --user root node1echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null apt-get cleanapt-get updateapt-get install vimvi /etc/apt/sources.list


数据库处于热备用状态sql server 数据库热备和冷备区别_mysql容器 重启_08


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


数据库处于热备用状态sql server 数据库热备和冷备区别_数据_09


apt-get cleanapt-get updateapt-get install percona-xtrabackup-24


数据库处于热备用状态sql server 数据库热备和冷备区别_docker_10


全量备份的命令

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

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


数据库处于热备用状态sql server 数据库热备和冷备区别_ubuntu_11


PXC 全量恢复步骤

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

原来的容器全部删除

docker stop node1 node2 node3 node4 node5docker rm node1 node2 node3 node4 node5docker volume rm v1 v2 v3 v4 v5docker volume create v1


数据库处于热备用状态sql server 数据库热备和冷备区别_docker_12


创建node1 和数据卷

docker volume create v1docker 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


数据库处于热备用状态sql server 数据库热备和冷备区别_mysql容器 重启_13


进入容器内还原数据库

#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/


数据库处于热备用状态sql server 数据库热备和冷备区别_数据_14


数据库处于热备用状态sql server 数据库热备和冷备区别_数据_15


退出容器重启下,node1节点

docker stop node1docker start node1

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