对数据库文件备份是工作中必不可少的环节,常见的数据库备份方式主要是冷备份和热备份方案

冷备份

冷备份就是关闭数据库时候的备份方式,通常是拷贝数据文件
冷备份是最简单的最安全的一种备份方式
但是一般运营过程中不能停止数据库服务来进行数据备份

热备份

热备份是在系统运行的状态下备份数据
MySQL常见热备份方式是LVM和XtraBackup两种备份方案
LVM:linux的分区备份命令,可以备份任何数据库;但是会对数据库加锁,只能读取;而且命令复杂
XtraBackup:不需要锁表就可以实现数据备份,而且免费

XtraBackup

XtraBackup是由percona提供的一款基于InnoDB的开源免费数据库热备份软件,它支持在线热备份,占用磁盘空间小,能够非常快速地备份与恢复MySQL数据库
1.备份过程中不锁表,快速可靠
2.备份过程中不会打断正在执行地事务
3.备份数据经过压缩,占用磁盘空间小

全量备份和增量备份

1.全量备份:备份全部数据。备份时间长,占用空间大。第一次备份要使用全量备份
2.增量备份:只备份变化的那部分数据。备份的时间短,占用空间小。后续建议使用增量备份

PXC全量备份

创建数据卷

# docker volume create backup

挑选一个PXC节点node1,将其停止并删除,然后重新创建一个增加backup目录映射node1容器

# docker stop node1
# docker rm node1
# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=tang1611 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=tang1611 -v v1:/var/lib/mysql -v backup:/data --privileged -e CLUSTER_JOIN=node2 --name=node1 --net=net1 --ip 172.18.0.2 pxc

PXC容器中安装XtraBackup,并执行备份

# docker exec -it node1 bash
# apt-get update
# apt-get install percona-xtrabackup-24
# innobackupex --user=root --password=tang1611 /data/back/full

PXC全量还原

数据库可以热备份,但是不能热还原,否则会造成业务数据和还原数据的冲突。
对于PXC集群为了避免还原过程中各节点数据同步冲突的问题,我们要先解散原来的集群,删除节点。然后新建节点空白数据库,执行还原,最后再建立起其他集群节点。
还原前还要将热备份保存的未提交的事务回滚,还原之后重启MySQL

停止并删除PXC所有节点

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

按之前程序创建v1数据卷和node1容器,进入容器,进行全量还原

# docker volume create v1
# docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=tang1611 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=tang1611 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
# docker exec -it -u root node bash
# rm -rf /var/lib/mysql/*
# innobackupex --user=root --password=tang1611 --apply-back /data/back/full/2019-06-28_03-36-59
# innobackupex --user=root --password=tang1611 --copy-back /data/back/full/2019-06-28_03-36-59
# chown -R mysql:mysql /var/lib/mysql
# docker stop node1
# docker start node1

最后重新创建其他数据卷和其他节点,同步node1节点即可。