冷备份

  • 冷备份是关闭数据库时候的备份方式,通常做法是拷贝mysql数据文件
  • 冷备份是最简单最安全的一种备份方式
  • 大型网站无法做到关闭业务备份数据,所以冷备份不是最佳选择
  • 在数据库集群中冷备份的方案是:先中断一个节点,然后备份数据,备份完后在上线

image.png

热备份

  • 热备份是在系统运行的状态下备份数据,也是难度最大的备份
  • MySQL常见的热备份有LVM和XtraBackup两种方案
  • LVM是Linux自带一直备份方式,是对分区进行备份,LVM可以备份的数据库有很多,例如:mySql,oracle、mgdb都可以,LVM指令比较多,是比较麻烦的一种方式
  • 建议使用XtraBackup热备份MySQL
  • XtraBackup的优点:不需要锁表就可以备份数据,LVM是需要锁表的。
  • XtraBackup是免费的备份方案

    XtraBackup介绍

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

image.png

XtraBackup优势

  • XtraBackup备份过程不锁表,快速可靠
  • XtraBackup备份过程不会打断正在执行的事务
  • XtraBackup能够基于压缩等功能节约磁盘空间和流量

    全量备份和增量备份

  • 全量备份是备份全部数据。备份过程时间长,占用空间大

image.png

  • 第一次一定是全量备份,后续可以增量备份
  • 增量备份是只备份变化的那部分数据。备份时间短,占用空间小

image.png

  • 在实际工作中,是一周做一次全量备份,一天做一次增量备份

    XtraBackup安装

    安装之前的准备工作

    因为这个工具是安装在数据库节点容器之内,它备份出来的数据就直接保存在容器里了,这样做很不好,我们应该把备份出的数据导出到宿主机上,应该采用映射的技术,应该在宿主机上创建一个数据卷,将这个数据卷映射到某一个数据库的节点上,然后在通过热备工具备份出来的数据,在宿主机上就可以看到了

  • 创建数据卷 docker volume create backup

  • 选择一个数据库节点,将数据库映射到数据卷,
  • 需要删除一个数据库节点,因为之前创建的数据库节点没有加入映射参数(删除的话不会影响数据,因为之前创建的节点数据是映射到宿主机上的)
  • 停止node1节点,docker stop node1
  • 删除node1节点,docker rm node1
  • 重新安装node1节点命令如下:

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc1223456 -v pxcDir1:/var/lib/mysql -v backup:/data —privileged -e CLUSTER_JOIN=node2 —name=node1 —net=net1 —ip 172.18.0.02 pxc:5.7.21

命令解释

-v backup:/data :映射备份目录
CLUSTER_JOIN=node2:重启后与那个节点进行同步

PXC全量备份步骤

  • PXC容器中安装XtraBackup,并执行备份
  • 更新apt-get工具:apt-get update
  • 安装apt-get工具: apt-get install percona-xytabackup-24
  • 全量备份命令: innobackupex —user=root —password-abc123456 /data/backup/full

    命令解释:

    —user=root —password-abc123456 : mysql用户和mysql用户密码
    /data/backup/full :备份文件的路径

  • 进入node1节点容器:decker exec -it node1 bash