热备份数据

  • 冷备份

冷备份是关闭数据库时候的备份方式,通常做法是拷贝数据文件

是简单安全的一种备份方式,不能在数据库运行时备份。

大型网站无法做到关闭业务备份数据,所以冷备份不是最佳选择

  • 热备份

热备份是在系统运行状态下备份数据
MySQL常见的热备份有LVM和XtraBackup两种方案

1.LVM:linux的分区备份命令,可以备份任何数据库;但是会对数据库加锁,只能读取;而且命令复杂

2.XtraBackup:不需要锁表,而且免费

  • XtraBackup

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

1.备份过程中不锁表,快速可靠

2.备份过程中不会打断正在执行地事务

3.备份数据经过压缩,占用磁盘空间小

  • 全量备份和增量备份

1.全量备份:备份全部数据。备份过程时间长,占用空间大。第一次备份要使用全量备份

热备份数据_第1张图片

2.增量备份: 只备份变化的那部分数据。备份的时间短,占用空间小。第二次以后使用增量备份

热备份数据_第2张图片

  • PXC全量备份

1.备份要在某个PXC节点的容器内进行,但应该把备份数据保存到宿主机内。所以采用目录映射技术。

创建数据卷

docker volume create backup

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

docker stop node1
docker rm node1    # 数据库数据保存在Docker卷v1中,不会丢失
# 参数改变:
# 1. -e CLUSTER_JOIN=node2;原来其他节点是通过node1加入集群的,现在node1重新创建,需要选择一个其他节点加入集群
# 2. -v backup:/data;将Docker数据卷backup映射到容器的/data目录
docker run -d --restart=always -u root -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node2 -v v1:/var/lib/mysql -v backup:/data --network=net1 --ip 172.18.0.2 --name=node1 pxc

3.在node1容器中安装percona-xtrabackup-24热备工具

docker exec -it node1 bash
apt-get update
apt-get install percona-xtrabackup-24

4.全量备份

innobackupex --backup -u root -p 123456 /data/backup/full
  • PXC全量还原

数据库可以热备份,但是不能热还原,否则会造成业务数据和还原数据的冲突。

对于PXC集群为了避免还原过程中各节点数据同步冲突的问题,我们要先解散原来的集群,删除节点。然后新建节点空白数据库,执行还原,最后再建立起其他集群节点。

还原前还要将热备份保存的未提交的事务回滚,还原之后重启MySQL

1.停止并删除PXC集群所有节点

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

2.按照之前的步骤重新创建node1容器,并进入容器,执行冷还原

# 创建卷
docker volume create v1
# 创建容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -v v1:/var/lib/mysql -v backup:/data --name=node1 --network=net1 --ip 172.18.0.2 pxc
# 以root身份进入容器
docker exec -it -u root node1 bash
# 删除数据
rm -rf /var/lib/mysql/*
# 准备阶段,清空事务
innobackupex --user=root --password=123456 --apply-back /data/backup/full/2019-06-28_03-36-59
# 执行冷还原,还原数据
innobackupex --user=root --password=123456 --copy-back /data/backup/full/2019-06-28_03-36-59
# 更改还原后的数据库文件属主
chown -R mysql:mysql /var/lib/mysql
# 退出容器后,重启容器
docker stop node1
docker start node1

 

你可能感兴趣的:(运维)