本次说说热热备份数据,上次搭建了pxc的集群,搭建好了复杂均衡,作了双机热备这种方案。不管作先后端分离的项目,仍是作微服务的项目,都须要有一个强大稳定的集群。数据库备份分为:热备份和冷备份,若是项目没有上线冷备份没问题。若是上线用冷备份就有问题。源码:
github.com/limingios/n…
冷备份
-
冷备份是关闭数据库时候的备份方式,一般作法是拷贝数据文件
-
冷备份是最简单最安全的一种备份方式
-
大型网站没法作到关闭业务备份数据,因此冷备份不是最佳选择
先让其中的一个PXC下线,而后经过拷贝数据文件的方式完成备份,备份完毕下线的PXC上线,完整于其余节点的自动同步。
热备份
-
热备份是在系统运行的状态下备份数据,也是难度最大的备份。举个例子,若是淘宝下线1个小时备份数据,淘宝损失多少钱,谁受的的了啊。这都是白花花的银子啊。
-
Mysql经常使用的热备份有LVM和XtraBackup两种方案。LVM是针对的分区备份,针对linux系统下的,他号称任何一种数据库均可以完成备份,可是有个弊端,就是在备份的时候只能读不能写入。
-
建议使用XtrBackup热备Mysql,不须要锁,备份的时候便可读也能够写,XtraBackup并且仍是免费的。
XtrBackup
是一款基于InnoDB的在线热备工具,具备开源免费的,支持在线热备,占用磁盘空间小,可以很是快速的备份与恢复mysql数据库。它支持mysql的各类衍生版本。
-
备份过程不锁表,快速可靠
-
备份过程不会打断正在执行的事务
-
可以基于压缩等功能节约磁盘空间和流量
-
全量备份是备份所有数据,备份过程时间,占用空间大。
-
增量备份是只备份变化的那部分数据。备份时间短。占用空间小。
在正常的生产系统上,通常是一周作一次全量的备份,一周作一次增量的备份。就足够了。
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容器中安全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 全量恢复步骤
-
数据库能够热备份,可是不能热还原。为了不恢复过程当中的数据同步,咱们采用空白的mysql还原数据,而后再创建PXC集群的方式。因此在开发中必定要注意权限问题,不要给开发人员root用户。
-
还原数据前要将未提交的事务回滚,还原数据以后重启!
原来的容器所有删除
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复制代码
进入容器内还原数据库
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脚本的,更加方便了。