mysql 增量备份还原

原创 2015年11月18日 19:58:28

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog日志。
本次操作的MySQL版本为5.5.40 for Linux (x86_64)

增量备份要确保打开了二进制日志,参考mysql的日志系统

mysql> show variables like '%log_bin%';

首先对pak数据库做一个完整备份:

$ mysqldump -h localhost -upak -ppwd -P3306 --master-data=2 --single-transaction --opt pak > pak_bak_full.sql

这时候就会得到一个全备文件pak_bak_full.sql。mysqldump操作会导致滚动一次log,假设新的binlog文件是mysql-bin.000002。

模拟插入数据和误操作

a. 在pak库的某个表插入一些数据,然后执行flush logs命令。这时将会产生一个新的二进制日志文件mysql-bin.000003,mysql-bin.000002则保存了全备过后的所有更改,既增加记录的操作也保存在了mysql-bin.00002中。

b. 再在pak库中的t_user表中增加两条记录,然后误删除t_user表。t_user中增加记录的操作和删除表的操作都记录在mysql-bin.000003中。

开始恢复

恢复过程不要记录日志:

mysql > set global sql_log_bin=0; 

首先导入全备数据

$ mysql -h localhost -upak -ppwd < pak_bak_full.sqlmysql> source /path/backup/pak_bak_full.sql

我们也可以看到全备时的binlog位置:

head -50 backup-file.sql |grep 'CHANGE MASTER'
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4321;

查看当前所在二进制日志中的位置:

mysql> show master status;

根据上面两个position能大概确定需要完整恢复哪几个binlog文件。

恢复mysql-bin.000002
在待恢复的position或时间点以前、全备以后的binlog需要全部恢复,多个文件以空格隔开

$ mysqlbinlog /var/lib/mysql/mysql-bin.000002 | mysql -uroot -p

此时查询可以得到前两条数据。

恢复部分mysql-bin.000003
这个日志中包括了新增记录和误删表两个部分,我们需要恢复到新增记录之后、误删操作以前的位置。

如果知道误操作的命令如DROP TABLE,则可以通过下面的方法在binlog文件中找到误操作之前的那个position:
(如下面的信息显示,误操作DROP TABLE之前的pos是775,在datetime 141204 15:08:04或pos 882时完成DROP TABLE操作)

$ mysqlbinlog /var/lib/mysql/mysql-bin.000003 |grep -C 5 'DROP TABLE'
#141204 15:07:05 server id 1  end_log_pos 775   Xid = 376
COMMIT/*!*/;
# at 775
#141204 15:08:04 server id 1  end_log_pos 882   Query   thread_id=10    exec_time=0 error_code=0
SET TIMESTAMP=1417676884/*!*/;
DROP TABLE `t_user` /* generated by server */
/*!*/;
# at 882

恢复命令:

$ mysqlbinlog /var/lib/mysql/mysql-bin.000003 --stop-position=775 | mysql -h localhost -uroot -p

如果position难以确定,但知道需要恢复到的确切(服务器)时间,也可以使用datetime:

$ mysqlbinlog /var/lib/mysql/mysql-bin.000003 --stop-datetime="2014-12-04 15:08:00" | mysql -uroot -p

如果不是误操作导致的,而是迁移数据库,那么不需要position或datetime,使用所有binlog文件增量恢复即可。

确定恢复成功后记得打开日志记录:

mysql > set global sql_log_bin=1;

报错
1. unknown variable 'default-character-set=utf8'
在使用mysqlbinlog查看二进制日志的时候,提示下面的错误:

/usr/local/mysql/bin/mysqlbinlog: unknown variable 'default-character-set=utf8'

原因是在我为了统一mysql客户端到服务端的的字符编码,在/etc/my.cnf文件的[client][mysqld]等节加入了default-character-set = utf8mysqlbinlog会从my.cnf中的[client]读取配置,但奈何mysqlbinlog并不认识这个选项(据说是个bug)导致的。

应对这个bug的方法有两个:
第一,自然是注释到[client]中的这个字符集配置;
第二,改用loose-default-character-set = utf8。在选项前加了loose-,表示当程序不认识此选项时会略过此选项,并给出一个警告。

版权声明:本文为博主原创文章,未经博主允许不得转载。

mysql增量备份还原详解

1 简介     基于binlog的恢复需要建立在全量备份恢复基础上。使用mysqldump的全量备份的方法在我前面的文章里有详细介绍,可以参考: http://blog.csdn.net/je...
  • u010098331
  • u010098331
  • 2016年03月19日 17:33
  • 538

MySQL数据库备份还原(基于binlog的增量备份)

1 简介 1.1 增量备份简介 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后...
  • JesseYoung
  • JesseYoung
  • 2014年07月05日 22:34
  • 7368

mysql备份还原-基于binlog的增量备份还原

1 简介 基于binlog的恢复需要建立在全量备份恢复基础上。使用mysqldump的全量备份的方法在我前面的文章里有详细介绍,可以参考:http://blog.csdn.net/jesseyoun...
  • JesseYoung
  • JesseYoung
  • 2014年11月17日 16:43
  • 10123

linux下mysql5.7.19数据库备份(增量备份恢复)

linux下mysql5.7.19数据库备份(增量备份恢复)1.查看备份文件mysqlbinlog /var/lib/mysql/mysql-bin.000002 > /var/lib/mysql/...
  • ampsycho
  • ampsycho
  • 2017年08月30日 16:35
  • 286

mysql 备份与恢复(全量与增量)

全量备份使用自带的mysqldump命令备份命令mysqldump -u[username] -p[password]  [database] [table] > backup.sql恢复命令mysq...
  • XRYMIBZ
  • XRYMIBZ
  • 2017年04月18日 12:29
  • 2017

阿里云RDS(mysql)异机全量增量恢复

使用阿里云的RDS服务(也就是MySQL数据库)时,有时需要将其数据取出后拿到别的机器上使用,这就需要进行RDS的异机恢复。 说明:本文恢复使用的机器环境为CentOS 6.5 x64。 ...
  • John_Chang11
  • John_Chang11
  • 2016年12月01日 18:58
  • 1410

贝壳一键还原2.0完成,支持增量备份和还原,这里详细说明使用过程

贝壳一键还原2.0完成,支持增量备份和还原,这里详细说明使用过程 贝壳一键还原2.0比1.0更加完善,支持增量备份和还原。 其功能有: 1、NTFS分区的全备份和还原。 2、NTFS分区的...
  • fjb2080
  • fjb2080
  • 2011年01月13日 11:47
  • 3991

如何增量导入MYSQL数据库中的数据

  • qq_20261343
  • qq_20261343
  • 2016年02月20日 18:49
  • 2441

Mysql性能优化--慢查询、索引、分表、增量备份还原

转自  http://www.cnblogs.com/jiekzou/p/5371085.html Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(...
  • u011871037
  • u011871037
  • 2016年05月19日 12:37
  • 1063

MySQL之——数据库增量数据恢复案例

一、使用场景 MySQL数据库每日零点自动全备 某天上午9点,张三不小心drop了一个数据库 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢复 二、主要思想与原理 利用全...
  • l1028386804
  • l1028386804
  • 2017年03月04日 15:05
  • 692
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql 增量备份还原
举报原因:
原因补充:

(最多只允许输入30个字)