一、 Mysqldump备份结合binlog日志恢复

使用mysqldump进行全库备份,并使用binlog日志备份,还原时,可以使用binlog日志恢复到备份前的任意位置或时间

  1. Binlog简介

  • 主要用于主从复制和恢复数据库,使用mysqlbinlog命令查看binlog二进制日志文件
  • 下面我们通过一个实例,演示,binlog是怎么恢复到某个时间点的

生成环境mysql数据备份 mysql5.7备份数据库_mysql

重启mysql服务使配置生效

生成环境mysql数据备份 mysql5.7备份数据库_数据库_02

验证binlog是否开启成功

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_03

创建测试使用的数据库和表并插入数据

生成环境mysql数据备份 mysql5.7备份数据库_mysql_04

为了方便实验,我们将有误操作的记录,放到一个新的binlog日志文件中

生成环境mysql数据备份 mysql5.7备份数据库_数据_05

现在发现删除zhangsan是误操作,现在需要将zhangsan恢复

,去查看binlog日志文件,根据位置实现将表还原到没有删除zhangsan时,然后跳过删除zhangsan的位置,恢复tom

生成环境mysql数据备份 mysql5.7备份数据库_mysql_06

可以做一个分析图,用来分析出,恢复时指定的区号

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_07

  • 从此图可以分析出,mysql-bin.00001文件全部恢复即可,
  • Mysql-bin.00002的219-416区是不需要恢复的

下面开始模拟

首先根据需求导出部分binlog日志

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_08

模拟删除数据库

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_09

通过binlog日志恢复

生成环境mysql数据备份 mysql5.7备份数据库_mysql_10

验证

生成环境mysql数据备份 mysql5.7备份数据库_mysql_11

  2. Mysqldump简介

  • mysqldump是mysql用于备份和数据转移的一个工具;
  • 将sql语句封装到文件,文件包含所有重建你的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等,可以用来实现轻量级的快速迁移或恢复数据库
  • mysqldump 是将数据表导成 SQL 脚本文件,可以在不同的 MySQL 版本之间使用
  • mysqldump用于数据量很小的备份(大概几个G),当数据量大的时候不建议使用
  • 导出对象:单个表、多个表、单个数据库、多个数据库、所有数据库

   1) 示例

     导出指定数据库或单个表

     

生成环境mysql数据备份 mysql5.7备份数据库_数据_12

     

生成环境mysql数据备份 mysql5.7备份数据库_数据库_13

     导出多个数据库

     

生成环境mysql数据备份 mysql5.7备份数据库_mysql_14

     导出所有

     

生成环境mysql数据备份 mysql5.7备份数据库_数据库_15

     完整备份数据库并重新开启一个新binlog

     

生成环境mysql数据备份 mysql5.7备份数据库_mysql_16

     导入

     

生成环境mysql数据备份 mysql5.7备份数据库_数据_17

   2)Mysqldump备份方案

    周日凌晨1点全库备份;

     周一到周六凌晨每隔4个小时增量备份一次;

     设置crontab任务,每天执行备份脚本;

 

 

     首先设置cronta任务

     

生成环境mysql数据备份 mysql5.7备份数据库_数据_18

     编辑mysqlfullbackup脚本

     

生成环境mysql数据备份 mysql5.7备份数据库_mysql_19

     编辑mysqldailybackup.sh脚本内容

     

生成环境mysql数据备份 mysql5.7备份数据库_数据库_20

二、 Xtrabackup备份工具

  1. Xtrabackup简介

 

  • Xtrabackup属于物理备份,支持物理热备,开源,性能比ibbackup强
  • Xtrabackup支持增量备份、完整备份、差异备份,与binlog日志组合
  • Xtrabackup提供两个命令行工具:
  • Xtrabackup:可以备份innodb和xtraDB存储引擎的表

  • Innobackupex:支持备份innodb和myisam表的存储引擎,使用perl语言编写,执行过程中会执行一个读锁

  2. 注意事项

 

  • 因为xtrabackup属于物理热备,所以在备份的时候可能出现已经提交但是没有将数据写入数据文件或没有提交的事务,所以在恢复时需要解决这个问题,使用—applog-log参数可以将已经备份的数据中已提交的数据写入数据文件,未提交的数据全部回滚,以保证数据的唯一性
  • 数据恢复时需要删除data下的所有文件
  • 还原后,需要设置恢复文件的属主属组,mysql才能正常运行

  3. Xtrabakup的优点

  • 备份速度快,可以用于较大的数据库,弥补mysqldump的部分不足
  • 支持热备份,备份过程不打断事务的执行
  • 支持压缩备份节约磁盘空间和流量
  • 自动实现备份检验
  • 还原速度快

  4. Xtrabackup安装

首先下载xtrabackup并且进行安装

Wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz

   

生成环境mysql数据备份 mysql5.7备份数据库_mysql_21

   

生成环境mysql数据备份 mysql5.7备份数据库_数据_22

   

   安装相关插件

   

生成环境mysql数据备份 mysql5.7备份数据库_数据库_23

   安装percona-toolkit

Wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm

生成环境mysql数据备份 mysql5.7备份数据库_数据库_24

  5. Xtrabackup+binkog

   Xtrabackup+binlog可以实现时间点还原

   1)首先创建备份目录

     

生成环境mysql数据备份 mysql5.7备份数据库_数据_25

   2)注意开启binlog日志

     

生成环境mysql数据备份 mysql5.7备份数据库_数据_26

   3)执行完整备份(使用xtrabackup的“流”及“压缩备份”功能)

     

生成环境mysql数据备份 mysql5.7备份数据库_mysql_27

   4)查看备份

     

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_28

5)在生产环境中,还会备份binlog日志

可以使用—start-position和—stop-position以跳过误删除的位置,去备份binlog日志,这里不再演示

6)Xtrabackup还原

 还原前需要解决数据一致性的问题

    

生成环境mysql数据备份 mysql5.7备份数据库_数据库_29

    开始还原

    

生成环境mysql数据备份 mysql5.7备份数据库_mysql_30

    为还原的文件设置属主属组

    

生成环境mysql数据备份 mysql5.7备份数据库_mysql_31

    

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_32

    最后如果需要恢复到某个时间点,可以利用备份的binlog日志文件恢复

  6. 在生产环境中使用的备份用户可能不是root,这时需要注意权限了

   

生成环境mysql数据备份 mysql5.7备份数据库_生成环境mysql数据备份_33