Mysql的增量备份 及基于时间点与位置的恢复

  • 增量备份的优点是没有重复数据,备份量不大,时间短。缺点也很明显,需要上次完全备份及完全备份之后所有的增量备份才能恢复,反推恢复,操作较为繁琐。
  • Mysql没有提供增量备份的方法,但是可以通过二进制日志间接实现增量备份。
  • 二进制日志对备份的意义如下:
    1)二进制日志保存了所有更新或者可能更新数据库的日志文件
    2)二进制日志在启动Mysql服务器后开始记录,并在文件达到max_binlog_size 所设置的大小或者接收到的flush logs命令后重新创建新的日志文件。
    3)只需要定时执行flush logs 方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份。
  • 增量备份
  • 开启Mysql的二进制日志功能
    # vim /etc/my.cnf
        [mysql]
        log-bin=mysql-bin    //在[mysql]项下添加
    # systemctl restart mysqld          //重启服务
    (此时usr/local/mysql/data/ 目录下会生成 mysql-bin.000001二进制文件)
  • flush-logs 将上次至当前的数据及操作保存在上次生成的二进制文件中同时生成另一个新的二进制文件
        # mysqldump -u root -p school > /opt/school.sql   //完全备份 数据库school
        # mysqladmin -u root -p flush-logs  //增量备份 生成新的二进制文件
        (此时usr/local/mysql/data/ 目录下会生成 mysql-bin.000002二进制文件)
  • 查看二进制文件的内容
        # mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002
  • 增量恢复
  • 增量恢复的场景:
    1)认为的SQL语句破坏了数据库
    2)在进行下一次全备份之前发生系统故障导致数据库的数据丢失
    3)在主从架构中,主库数据发生了故障。
  • 根据数据丢失的情况可以分为两类:
    1)只丢失了完全备份之后更改的数据
    2)完全备份之后丢失所有数据
  • 丢失了完全备份之后更改的数据恢复
    # mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
    (恢复操作  注意恢复的顺序,要先恢复最先生成的二进制文件)
  • 丢失了完全备份之后所有的数据恢复
    # mysql -u root -p school < /opt/school.sql
    # mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
    # mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -p
    (恢复操作  注意恢复的顺序,要先恢复最先生成的二进制文件)
  • 下面对增量备份原理做个总结:首先是每周使用mysqldump完全备份整库,在整库备份的时间点之后,每天使用flush logs 生成新的二进制文件,二进制文件保存的是每天对数据库的操作变化的内容,内容是不重复的。所以每周的备份整库加上每天的二进制备份文件,相当于数据库现在的数据状态

    • 基于时间点与位置的数据恢复
    • 利用二进制日志可以实现基于时间点和位置的恢复,列如我们在执行操作中途误操作删除了一张表,
    • 我们可以查看二进制日志的时间或者位置恢复的时候跳过这一步错误操作。
    • 如图我们误删了zhangsan
    • mysqladmin -u root -p flush-logs 先生成二进制文件
    • 然后查看这个二进制文件 误操作的时间点、位置 和正确操作的时间点、位置

    进入数据库
    # mysql -u root -p
    > use school;
    > drop table info;    删除表
    • 依次恢复

      # mysqldump -u root -p school > /opt/school.sql
      # mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
      # mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -p
      # mysqlbinlog --no-defaults mysql-bin.000003 | mysql -u root -p
      # mysqlbinlog --no-defaults mysql-bin.000004 | mysql -u root -p
    • 基于时间的恢复
    • 跳过了错误的时间
      # mysqlbinlog --no-defaults --stop-datetime=‘2018-07-03 18:19:49‘ /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
      # mysqlbinlog --no-defaults --start-datetime=‘2018-07-03 18:22:21‘ /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
    • 基于位置的恢复
    • 跳过了错误的位置
      # mysqlbinlog --no-defaults --stop-position=‘347‘ /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
      # mysqlbinlog --no-defaults --start-position=‘395‘ /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p

    原文地址:http://blog.51cto.com/13630803/2135741

    时间: 2024-09-30 01:38:11

    Mysql的增量备份 及基于时间点与位置的恢复的相关文章

    通过innobackupex实现对MySQL的增量备份与还原

    备份 增量备份是基于完整备份的,所以我们需要先做一次完整备份: innobackupex --password=test /backup/ 备注:test是我的MySQL服务的root用户的密码,/backup/是我用于存放备份文件的目录. 执行完命令后,/backup/目录下会生成一个时间戳目录,在我这个例子中是/backup/2016-09-20_14-45-26/. 第一次增量备份: innobackupex --password=test --incremental /backup/ -

    mysql实时增量备份

    采用binlog日志的好处 掌控所有更改操作,必要时可用于恢复数据 数据库主从复制的必要条件 [[email protected]~]# vim /etc/my.cnf [mysqld] .. .. log-bin=mysql-bin //启用二进制日志,并指定前缀 .. ..[[email protected] ~]# service mysqld restart 确认binlog日志文件新启用binlog后,每次启动MySQl服务都会新生成一份日志文件: [[email protected]

    MySQL 全量及增量备份,基于xtrabackup 2.3.5

    昨天一个pgp加密盘坏了,东西全丢了...,我的笔记啊!我咋怎么2呢.. 备份个脚本吧,方便以后手机查看,话说我都快忘记帐号密码了 备注:脚步恢复时只能恢复到备份前的状态,如果需要恢复到当前状态,还需配合binlog,睡觉就这样 #!/bin/sh #################################################### # AUTHOR : JusonSummer # # VERSION : V1.0.0 # # DATE : 2016-08-13 # # CO

    MySQL中基于mysqldump和二进制日志log-bin二进制日志进行逻辑备份以及基于时间点的还原

    本文出处:http://www.cnblogs.com/wy123/p/6956464.html 本文仅模拟使用mysqldump和log-bin二进制日志进行简单测试,仅作为个人学习笔记,可能离实际应用还有很大差距,仅参考. 开启MySQL的bin-log二进制日志 模拟还原是需要mysqldump出来的文件和log-bin,因此需要开始log-bin二进制日志. mysql5.7.18在开启二进制日志的时候除了要设置log-bin的位置之外,另外需要设置一个server-id,MySQL之前

    mysql实时增量备份 binlog日志备份

    启用binlog日志实现对数据的增量备份: 日志存储位置: /var/lib/mysql/ 日志名称:主机名-bin.000001 或mysqld-bin.000001 binlog日志概述:二进制日志,记录所有更改数据的操作:默认超过500M自动生成新的日志: 修改主配置文件启用binlog日志 vim /etc/my.cnf [mysqld] log-bin  (或指定日志名log-bin=x.000001或者指定目录和文件名log-bin=/logdir/X.000001) max-bin

    Python 生产环境Mysql数据库增量备份脚本

    Mysql数据库常用的办法是通过mysqldump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题.前面写了一遍blog介绍xtrabackup的热备工具.下面的脚本是基于xtrabackup实现自动备份数据库的功能. 需求描述: 每天晚上23点,对数据库进行一次完整备份.第二天0-22点,每小时进行一次增量备份.每次备份前把上次的完整备份和23次增量备份移动到指定目录里,保留7天的数据. ps:不要问我,为什么是23点执行完整备份,0点不更好处理吗?bingo,这是

    mysql二进制增量备份

    最近一直在思考如何增量备份二进制日志,这样一来我们就可以用mysqldump +二进制全备或者利用xtrabackup+二进制备份 思想:利用mysql-bin.index,如果是第一次备份,就将mysql-bin.index中的所有文件都复制到备份目录下,然后保存备份后二进制日志的序号到一个文件中backbinlogpostion        增量备份时(非第一备份),就用backbinlogpostion存的序号与当前mysql_bin.index中的比较,如果序号小于mysql-bin.

    xtrabackup全量备份+binlog基于时间点恢复

    1.通过xtrabackup的备份恢复数据库. 2.找到start-position和binlog名称 cat xtrabackup_info 3.导出mysqlbinlog为sql文件,并确定恢复的时间点 mysqlbinlog --no-defaults --start-position=51178055 --stop-datetime='2017-05-22 15:30' -vv mysql-bin.000004 > backup2.sql 4.导入sql source backup2.s

    mysql的增量备份

    1,在mysql 的my.ini文件中 2在我的D盘下创建binlog文件夹 3重启mysql服务可以看到我的D盘下的binlog下生成如下文件 4,在默认的test数据库中创建t_one1这张表 create table t_one1(id www.baohuayule.cn varchar(10),name varchar(2));4.1插入几条数据,然后能看到wxzlog.000001这个文件的修改日期变化了,这个文件就是我们对数据库进行增删改的记录,对查询不做记录,我们可以使用mysql