MySQL增量备份与还原详解

增量备份与恢复的特点

  • 增量备份的优点是没有重复数据,备份量不大,时间短。但缺点也很明显,需要建立在上次完全备份及完全备份之后所有的增量才能恢复。
  • MySQL没有提供直接的增量备份方法,但是可以通过mysql二进制日志间接实现增量备份。二进制日志对备份的意义如下:
  • (1)二进制日志保存了所有更新或者可能更新数据库的操作。
  • (2)二进制日志在启动MySQL服务器后开始记录,并在文件达到所设大小或者收到flush logs 命令后重新创建新的日志文件。
  • (3)只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些文件保存到一个安全的地方即完成了一个时间段的增量备份。

增量备份及恢复

创建基本数据库

create databse school
use school
create table info (name varchar(10),score decimal(5,2));
insert into info (name,score) values (‘zhangsan‘,80);
insert into info (name,score) values (‘lisi‘,80);
//数据库建立以及表数据添加完成
  • 编辑配置文件,打开二进制日志功能

#vim /etc/my.cnf

log-bin=mysql-bin   //添加二进制日志文件

#systemctl restart mysqld.service

#msyqldump -u root -p school > /opt/school.sql //备份数据库文件

  • 首先生成创建test01数据的二进制日志:

#mysql -u root -p

>use school;
>insert into info (name,score) values (test01,88);
>quit
//完成数据插入

#mysqladmin -u root -p flush-logs //刷新生成mysql增量备份文件
#cd /usr/local/mysql/data/
#ls //二进制日志已经生成

  • 查看二进制日志文件:(确定增加test01操作是在mysql-bin.000002日志中)

    #mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 //使用64位解码方式

  • 其次生成创建test02数据的二进制日志:

#mysql -u root -p

>use school;
>insert into info (name,score) values (test02,90);
>quit
//完成数据插入

#mysqladmin -u root -p flush-logs //刷新生成mysql增量备份日志文件
#cd /usr/local/mysql/data/
#ls //二进制日志已经生成

  • 当工作人员不慎操作,删除了test01与test02用户,导致数据库不可用,而备份的完整数据中只有zhangsan和lisi账户,
    此时需要根据二进制日志文件按需恢复test01或者test02;

模拟误操作:

#mysql -u root -p

>use school
>delete from info where name=‘test01‘;    //执行误操作
>select * from info;    

>delete from info where name=‘test02‘;    //执行误操作
>select * from info;

首先恢复完整数据库:

#mysql -u root -p school < /opt/school.sql

  • 当test01用户添加数据在二进制日志msyql-bin.0000002中时:
  • 恢复test01:

#msyqlbinlog --no-defaults /usr/local/mysql/data/msyql-bin.0000002 | msyql -u root -p
#msyql -u root -p

>use school
>select * from info;     //发现test01已经恢复
  • 当test02用户添加数据在二进制日志msyql-bin.0000003中时:
  • 恢复test02:

#mysqlbinlog --no-defaults /usr/local/mysql/data/msyql-bin.0000003 | msyql -u root -p
#mysql -u root -p

>use school
>select * from info;     //发现test02已经恢复

基于时间与位置恢复

  • 创建默认数据库:

    create databse school
    use school
    create table info (name varchar(10),score decimal(5,2));
    insert into info (name,score) values (‘tom‘,80);
    insert into info (name,score) values (‘jerry‘,90);
    //数据库建立以及表数据添加完成

  • 打开二进制日志功能

#vim /etc/my.cnf

log-bin=mysql-bin   //添加二进制日志文件

#systemctl restart mysqld.service

#mysqldump -u root -p school > /opt/school.sql //备份数据库文件,只含tom和jerry的默认用户

#mysqladmin -u root -p flush-logs //刷新生成mysql增量备份日志文件
#cd /usr/local/mysql/data/
#ls //二进制日志已经生成

模拟故障:

  • 当某一工作人员在添加test01与test02账户时,中间不小心删除数据库中默认账户tom,导致数据库完整性被破坏。
    下面需要针对在二进制日志文件按位置与时间恢复test01和test02数据以及tom数据;
mysql> insert into info (name,score) values (‘test01‘,88);
Query OK, 1 row affected (0.00 sec)

mysql> delete from info where name=‘tom‘;   //故障操作为误删除默认用户tom
Query OK, 1 row affected (0.00 sec)

mysql> insert into info (name,score) values (‘test02‘,70);
Query OK, 1 row affected (0.00 sec)

#mysqladmin -u root -p flush-logs //此时在误操作的基础上已经完成了增量备份

  • 由于完成数据库备份文件只有默认tom和jerry用户,并没有test01和test02,若还原增量备份文件,则会删除tom用户,下面将利用二进制日志增量备份文件断点还原test01与test02且不删除tom用户;
  • 首先还原完整数据库:
    drop table info;  //删除原有损坏的数据库

#mysql -u root -p school < /opt/school.sql //还原备份数据库

  • 查看二进制日志增量备份文件:
  • 查找需要还原的断点位置:
  • 由于在断点增量备份文件还原时,还原顺序从文件开头执行,到--stop-datetime错误操作时间点结束;
  • 由于在断点增量备份文件还原时,还原顺序从文件开头执行,到--stop-datetime错误操作时间点结束;当跳过错误时间点,从下一次正确操作时间点--start-datetime开始执行到备份文件结尾。
  • 还原到test01:

#mysqlbinlog --no-defaults --stop-datetime=‘2018-07-03 19:05:42‘ /usr/local/mysql/data/msyql-bin.0000001 | mysql -u root -p //注意修改日期格式xxx-xx-xx

  • 跳过错误时间:从下一个正确操作时间开始:

#mysqlbinlog --no-defaults --start-datetime=‘2018-07-03 19:06:03‘ /usr/local/mysql/data/msyql-bin.0000001 | mysql -u root -p //注意修改日期格式xxx-xx-xx

  • 这样就跳过了错误操作步骤,直接选择正确操作还原。
  • 注:断点还原只能跳过一次错误,若中间有多个错误操作不可连续还原。

节点还原

  • 注意错误操作前面的at节点号:如图

#mysqlbinlog --no-defaults --stop-position=‘563‘ /usr/local/mysql/data/msyql-bin.0000001 | mysql -u root -p

  • 跳过错误时间:从下一个正确操作节点开始:

#mysqlbinlog --no-defaults --stop-position=‘660‘ /usr/local/mysql/data/msyql-bin.0000001 | mysql -u root -p

如上,关于节点恢复实验已经完成。

原文地址:http://blog.51cto.com/13659253/2135799

时间: 2024-11-05 04:53:19

MySQL增量备份与还原详解的相关文章

MySQL 备份与还原详解

相关阅读: MySQL备份和恢复具体实施 http://www.linuxidc.com/Linux/2012-12/76257.htm MySQL备份与恢复的三种方法总结 http://www.linuxidc.com/Linux/2012-12/75428.htm MySQL备份还原(视图.存储过程) http://www.linuxidc.com/Linux/2012-01/52665.htm 一.MySQL备份类型 1.热备份.温备份.冷备份 (根据服务器状态) 热备份:读.写不受影响:

MySQL 增量备份与还原

说明:所谓增量备份,就是备份自上一次备份之后增加或改变的文件或内容.然而MySQL没有提供直接的增量备份方法,但是却可以通过MySQL的二进制日志间接实现增量备份.下面有关操作方法进行测试...实验环境:装有MySQL 5.7 数据库的CentOS7虚拟机一台..实验步骤如下:..1 .进入配置文件添加二进制日志vim /etc/my.cnf[mysqld]在其中插入二进制日志log_bin=mysql-bin #二进制日志..2 . 然后重启数据库,到日志文件目录下查看一下..3 . 新建数据

mysql 利用binlog增量备份,还原实例

mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然,我只要备份增加的数据.这样减少服务器的负担. 二,启用binlog vi my.cnf log-bin=/var/lib/mysql/mysql-bin.log,如果是这样的话log-bin

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

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

xtrabackup备份工具使用详解

xtrabackup备份工具使用详解 innobackupex: 需要MySQL服务处于运行状态 [percona]下载 wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.8/RPM/rhel6/x86_64/percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm wget https://www.percona.com/downloads/percona-toolkit/2.2.

MySQL之备份与还原

本章内容 备份和恢复简介 实验一:实现Mariadb的冷备份和恢复 实验二:实现基于LVM的备份还原,结合binlog恢复最新状态 mysqldump简介与用法 实验三:数据库数据文件损坏,如何还原最新状态? 实验四:误删除表,如何恢复最新状态? xtrabackup简介与用法 实验五: Xtrabackup完全备份及还原 实验六: Xtrabackup完全,增量备份及还原 实验七: Xtrabackup单表导出和导入 备份和恢复 为什么要备份 灾难恢复:硬件故障.软件故障.自然灾害.黑|客攻|

MYSQL增量备份(日志备份)

MYSQL数据库在使用过程中,一般都需要对使用的数据库进行备份处理,对于数据量较小时可以通过mysqldump命令进行数据库全备份,但是当数据库数据量达到一定程度之后,显然增量备份更加适合. MYSQL增量备份主要通过二进制日志文件进行增量备份.mysql数据库会以二进制形式自动把用户对mysql数据库的操作记录到文件,当用户希望恢复的时候可以使用备份文件进行恢复. 本文主要介绍如何实现在本地服务器上对远程服务器的数据库文件进行在本地服务器的备份.(以下的cmd均需跳转到mysql的bin文件夹

转 MySQL 数据备份与还原

MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html 一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句.然后,将表中的所有记录转换成一条INSERT语句.然后通过这些语句,就能够创建表并插入数据. 1.备份一个

MySql 安装及初级使用详解

1. sudo apt-get install mysql-server, input administrator password , '123' 2. enter mysql promot in command line, 'mysql -u root -p', input password 3. create database "CREATE DATABASE xoops:" 4. 允许root远程登陆: 从所有主机:grant all privileges on *.* to