2019-03-30 17:44:49
李明
|
原创文章,欢迎转载。转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「实战篇」开源项目docker化运维部署-mysql 热备份数据(五) 本次说说热热备份数据,上次搭建了pxc的集群,搭建好了复杂均衡,做了双机热备这种方案。无论做前后端分离的项目,还是做微服务的项目,都需要有一个强大稳定的集群。数据库备份分为:热备份和冷备份,如果项目没有上线冷备份没问题。如果上线用冷备份就有问题。源码: https://github.com/limingios/netFuture/tree/master/mysql-pxc/ 冷备份
先让其中的一个PXC下线,然后通过拷贝数据文件的方式完成备份,备份完毕下线的PXC上线,完整于其他节点的自动同步。 热备份
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 全量恢复步骤
原来的容器全部删除 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脚本的,更加方便了。
|