mysqldump增量恢复
何时需要使用备份的数据?
备份最牛逼的层次,就是永远都用不上备份。--老男孩
不管是逻辑备份还是物理备份,备份的数据什么时候需要用?
===========================================================
1、恢复数据到测试库的时候。
2、人为通过SQL语句将数据删除的时候。
3、做数据库主从复制的时候。

其它场景(诸如硬件、删了磁盘上文件)几乎都不要使用备份恢复,
而是直接使用主从复制功能,将业务切换到从库。
=============================================================
具备什么条件才能完整恢复数据?
1、全备(mysqldump)
2、binlog数据(开启binlog)

已知数据库数据:
[root@mysql-db02 ~]# mysql -e "select * from oldboy.test;"
+------+---------+
| id | name |
+------+---------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | maya |
+------+---------+

1、准备环境:开始备份数据
mkdir /data/backup -p
date -s "2018/03/19"
mysqldump -B --master-data=2 --single-transaction oldboy|gzip>/data/backup/oldboy_$(date +%F).sql.gz

mysql -e "use oldboy;insert into test values(6,'bingbing');"
mysql -e "use oldboy;insert into test values(7,'xiaoting');"
mysql -e "select * from oldboy.test;"

2、模拟误删数据:
date -s "2018/03/19 10:00"
mysql -e "drop database oldboy;show databases;"

2018/03/19 10:10 发现问题

如果是update test set name="xiaoting";
停止对外访问:
iptables -I INPUT ! -p tcp -s 10.0.0.9 -j DROP

3、开始恢复准备
检查全备:
ll /data/backup/oldboy_2018-03-19.sql.gz
cd /data/backup/
zcat oldboy_2018-03-19.sql.gz >oldboy_2018-03-19.sql

检查binlog:
cp -a /application/mysql/data/oldboy-bin.* /data/backup/
cd /data/backup/
sed -n '22p' oldboy_2018-03-19.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='oldboy-bin.000004', MASTER_LOG_POS=2441;

mysqlbinlog -d oldboy --start-position=2441 oldboy-bin.000004 -r bin.sql
###mysqlbinlog -d oldboy oldboy-bin.000005 oldboy-bin.000007 oldboy-bin.000007 -r bin.sql

清理造成故障的drop语句:
grep drop bin.sql
sed -i '/drop database oldboy/d' bin.sql
grep drop bin.sql

4、开始恢复全备。
mysql <oldboy_2018-03-19.sql
mysql -e "show databases;"
[root@mysql-db02 backup]# mysql -e "use oldboy;select * from test;"
+------+---------+
| id | name |
+------+---------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | maya |
+------+---------+

5、开始恢复增量
[root@mysql-db02 backup]# mysql oldboy <bin.sql
[root@mysql-db02 backup]# mysql -e "use oldboy;select * from test;"
+------+----------+
| id | name |
+------+----------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | maya |
| 6 | bingbing |
| 7 | xiaoting |
+------+----------+
恢复完毕。
对外提供服务。
iptables -d INPUT ! -p tcp -s 10.0.0.9 -j DROP

xtrabackup增量恢复
中小企业MySQL Xtrabackup物理增量恢复案例实战
具备全量备份(xtrabckup备份的全备)
具备全量之后的所有增量备份(xtrabckup备份的增量)
具备最后一次增量备份以后的所有MySQL的Binlog增量日志

1、模拟数据
use oldboy
insert into test values(1,'full01');
insert into test values(2,'full02');
insert into test values(3,'full03');
insert into test values(4,'full04');
insert into test values(5,'full05');
select * from test;
mysql> select * from test;
+----+--------+
| id | name |
+----+--------+
| 1 | full01 |
| 2 | full02 |
| 3 | full03 |
| 4 | full04 |
| 5 | full05 |
+----+--------+
5 rows in set (0.00 sec)

2、2018/03/21 0点全量备份
date -s "2018/03/21"
innobackupex --defaults-file=/etc/my.cnf --user=root --password=oldboy123 --socket=/application/mysql-5.6.34/tmp/mysql.sock --no-timestamp /server/backup/new_base_full

3、2018/03/22 0点增量备份
mysql -e "use oldboy;insert into test values(6,'new_inc_one_1');"
mysql -e "use oldboy;insert into test values(7,'new_inc_one_2');"
mysql -e "select * from oldboy.test;"
+----+---------------+
| id | name |
+----+---------------+
| 1 | full01 |
| 2 | full02 |
| 3 | full03 |
| 4 | full04 |
| 5 | full05 |
| 6 | new_inc_one_1 |
| 7 | new_inc_one_2 |
+----+---------------+

第一次增量备份
date -s "2018/03/22"
innobackupex --defaults-file=/etc/my.cnf --user=root --password=oldboy123 --socket=/application/mysql-5.6.34/tmp/mysql.sock --no-timestamp --incremental-basedir=/server/backup/new_base_full --incremental /server/backup/new_one_inc

4、2018/03/23 0点增量备份
mysql -e "use oldboy;insert into test values(8,'new_inc_two1');"
mysql -e "use oldboy;insert into test values(9,'new_inc_two2');"
mysql -e "select * from oldboy.test;"

第二次增量备份
date -s "2018/03/23"
innobackupex --defaults-file=/etc/my.cnf --user=root --password=oldboy123 --socket=/application/mysql-5.6.34/tmp/mysql.sock --no-timestamp --incremental-basedir=/server/backup/new_one_inc --incremental /server/backup/new_two_inc

5、2018/03/23 0点以后-10点更新数据
mysql -e "use oldboy;insert into test values(10,'realbinlog_data_3');"
mysql -e "use oldboy;insert into test values(11,'realbinlog_data_4');"
mysql -e "select * from oldboy.test;"

6、2018/03/23上午10点出故障了
mysql -e "use oldboy;update test set name='oldboy';"
mysql> select * from test;
+----+--------+
| id | name |
+----+--------+
| 1 | oldboy |
| 2 | oldboy |
| 3 | oldboy |
| 4 | oldboy |
| 5 | oldboy |
| 6 | oldboy |
| 7 | oldboy |
| 8 | oldboy |
| 9 | oldboy |
| 10 | oldboy |
| 11 | oldboy |
+----+--------+
11 rows in set (0.00 sec)

建议停库:
/etc/init.d/mysqld stop

恢复数据库:
7、合并数据文件
innobackupex --apply-log --use-memory=32M --redo-only /server/backup/new_base_full/
innobackupex --apply-log --use-memory=32M --redo-only --incremental-dir=/server/backup/new_one_inc /server/backup/new_base_full/
innobackupex --apply-log --use-memory=32M --incremental-dir=/server/backup/new_two_inc /server/backup/new_base_full/

8、开始恢复
cd /application/mysql
mv data data.11
cp -a /server/backup/new_base_full data
chown -R mysql.mysql data

9、处理binlog
[root@db02 mysql]# cat /server/backup/new_two_inc/xtrabackup_binlog_info
oldboy-bin.000006 2286

mysqlbinlog -d oldboy --start-position=2286 oldboy-bin.000006 -r bin.sql
mysqlbinlog -d oldboy oldboy-bin.000003 oldboy-bin.000004 oldboy-bin.000005 >>bin.sql

cd /application/mysql/logs/
mysqlbinlog -d oldboy --start-position=2286 oldboy-bin.000006 -r /server/backup/new_bin.sql

删除update一行。update test set name='oldboy'

10、开启防火墙iptables
iptables -I INPUT ! -s 10.0.0.9 -p tcp -j DROP

[root@db02 tools]# mysql oldboy </server/backup/new_bin.sql
[root@db02 tools]# mysql -e "select * from oldboy.test;"
+----+-------------------+
| id | name |
+----+-------------------+
| 1 | full01 |
| 2 | full02 |
| 3 | full03 |
| 4 | full04 |
| 5 | full05 |
| 6 | new_inc_one_1 |
| 7 | new_inc_one_2 |
| 8 | new_inc_two1 |
| 9 | new_inc_two2 |
| 10 | realbinlog_data_3 |
| 11 | realbinlog_data_4 |
+----+-------------------+

Mysql增量恢复的更多相关文章

  1. 10、mysql增量恢复实战

    10.1.实验数据: mysql> select * from test; +----+------+------+ | id | name | age | +----+------+----- ...

  2. mysql增量恢复的一个实例操作

    通过防火墙禁止web等应用向主库写数据或者锁表,让主库暂时停止更新,然后进行恢复 模拟整个场景 1.登录数据库 [root@promote 3306]# mysql -uroot -S /data/3 ...

  3. Mysql备份恢复方案解析

    1.全量备份和增量备份 1.1全量备份 就是对现有的数据进行全部备份,之前做的备份均可舍弃,以最新的全备为基点. a.全备所有数据库 Innodb引擎: [root@leader mysql]#mys ...

  4. MYSQL增量备份与恢复

    vim /etc/my.cnf在[mysqld]下添加max_binlog_size = 1024000 //二进制日志最大1M 要进行mysql的增量备份,首先要开启二进制日志功能方法一:在/etc ...

  5. 【转】mysql增量备份恢复实战企业案例

    来源地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/ 小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但 ...

  6. innobackupex做MySQL增量备份及恢复【转】

    创建备份用户 mysql> grant process,reload,lock tables,replication client on *.* to 'backup'@'localhost' ...

  7. (转)通过MySQL复制线程SQL_Thread加快增量恢复binlog

    数据回档常常是使用全量备份+binlog增量实现的.而数据量很大的情况下,增量恢复binlog一直是一个苦恼的问题,因为恢复binlog速度十分慢,并且容易出错. 恢复binlog文件一般有两种方法: ...

  8. 十、linux-mysql下的mysql数据库增量恢复

    1.全量备份 全量数据就是数据库中所有的数据,全量备份就是把数据库中所有的数据进行备份. 备份所有库: mysqldump -uroot -ppoldboy -S /data/3306/mysql.s ...

  9. 9.11、mysql增量备份和增量恢复介绍

    1.增量备份: 增量数据是从上次全量备份之后,更新的新数据,对于mysql来说,binlog日志就是mysql的增量数据: (1)按天进行备份: 周一00点全量备份 周二00点全量备份 ...... ...

随机推荐

  1. Eclipse 02: 安装spring tool suite插件

    在实际项目开发时,如果我们创建了一个spring文件,其实也就是个xml文件,如果没有集成spring的开发工具,创建的就是一个单纯的xml文件.安装spring插件以后创建spring配置文件会方便 ...

  2. 【Python全栈-JavaScript】JavaScript的window.onload()与jQuery 的ready()的区别

    JavaScript的window.onload()与jQuery 的ready()的区别 做web开发时常用Jquery中$(document).ready()和JavaScript中的window ...

  3. [LeetCode] 系统刷题4_Binary Tree & Divide and Conquer

    参考[LeetCode] questions conlusion_InOrder, PreOrder, PostOrder traversal 可以对binary tree进行遍历. 此处说明Divi ...

  4. Oracle 11g R2创建数据库之手工建库方式

    在之前的博文当中梳理了关于DBCA静默方式创建数据库的过程,本文就手工通过SQL*PLUS客户端采用CREATE DATABASE语句创建数据库.这种建库方式就是完全使用手工SQL语句创建数据库,通常 ...

  5. python中的双冒号作用

    Python序列切片地址可以写为[开始:结束:步长],其中的开始和结束可以省略. 1. range(n)生成[0,n)区间整数 2. 开始start省略时,默认从第0项开始 3. 结尾省略的时候,默认 ...

  6. Python requests库如何下载一个图片资源

    原文地址https://blog.csdn.net/u011541946/article/details/77700074 前面一篇文章介绍了response对象的一些常用API,也已经提到,我们的重 ...

  7. cocos2d-x 贡献一个oss上传脚本

    平常写前端项目和H5游戏时特别频繁的一个操作就是上传到oss上,特别浪费时间.所以用ali-oss写了一个脚本.配置属性后直接npm run oss就能上传到oss上了.再也不需要手动操作.现在是脚本 ...

  8. TP连接数据库报错:SQLSTATE[HY000] [2002] No such file or directory

     连接数据库报错:“SQLSTATE[HY000] [2002] No such file or directory”. 出现这个问题的原因是PDO无法找到mysql.sock或者mysqld.soc ...

  9. HBase 笔记2

    Hadoop 服务启动顺序: zookeeper ->journalnode->namenode -> zkfc -> datanode HBase Master WEB控制台 ...

  10. “流式”前端构建工具——gulp.js 简介

    Grunt 一直是前端领域构建工具(任务运行器或许更准确一些,因为前端构建只是此类工具的一部分用途)的王者,然而它也不是毫无缺陷的,近期风头正劲的 gulp.js 隐隐有取而代之的态势.那么,究竟是什 ...