有备份是很简单的。它只需要生成一个新的备份数据,然后使用mysqlbinlog检索数据备份时间点后,再恢复到现有的网络。

如果没有备份,可能会更麻烦,检索数据的成本也很高。

以下是备份时间点检索后发现mysqlbinlog的数据的方法。

做一个简单的实验,删除MySQL数据,然后使用mysqlbinlog找回你刚删除的数据。

应用程序的创建时间和数据表的插入:2013-02-04 10

原理:mysqlbinlog

前提:MySQL打开bin日志记录

在删除测试之前:


显示表;
----------------------- + +
| tables_in_report_sina |
----------------------- + +
| APP |
|测试|
----------------------- + +

选择现在();
--------------------- + +
|(现在)|
--------------------- + +
2013-02-04 11:45:44 | |
--------------------- + +
1行集(0.01秒)


从应用程序中选择计数(1);
---------- + +
|计数(1)|
---------- + +
10 | |
---------- + +
1行集(0.01秒)






开始删除数据:


从应用程序中删除id = 1;
查询OK,1行受影响(0秒)

MySQL >
从应用程序中删除id<6;
查询OK,4行受影响(0.01秒)


从应用程序中选择计数(1);
---------- + +
|计数(1)|
---------- + +
5 | |
---------- + +
1行集(0秒)



选择现在();
--------------------- + +
|(现在)|
--------------------- + +
2013-02-04 12:08:45 | |
--------------------- + +




开始检索数据:

1。找到bin日志的位置:




- RW光碟---- 1 mysql 17k 2月4日alert.log 11:43
- RW光碟---- 1 mysql 1.0k 11月1日master-bin.000001 14:52
- RW光碟---- 1 mysql 126 12月25日14:00 master-bin.000002
- RW光碟---- 1 mysql 126 12月25日14:02 master-bin.000003
- RW光碟---- 1 mysql 126 12月25日14:02 master-bin.000004
- RW光碟---- 1 mysql 107 12月25日14:02 master-bin.000005
- RW光碟---- 1 mysql 13k 2月4日master-bin.000006 12:02




你可以看到最近修改的二进制日志只有master-bin.000006

(如果删除了一些bin日志以返回数据,则必须一个接一个地找到bin日志)。

将执行一段时间的所有SQL语句保存到要还原的SQL文件中。

mysqlbinlog --开始日期= '2013-02-04 10 --停止日期= '2013-02-04 12:08:45 ' / / / MySQL应用程序日志 / / / master-bin.000006 >应用MySQL / mysql_restore_20130204.sql。

当然,在目前的网络环境下,这个时候可能不会那么准确,而且还有其他事务SQL语句的干扰。

创建临时数据库

创建数据库for_bak;

当前数据库在表应用程序中被删除

就欧盟my_db APP中- > /应用/ MySQL / app.sql

将当前数据导入临时表:

MySQL根欧盟for_bak < / / / app.sql MySQL的应用程序

让我们看看 / / / mysql_restore_20130204.sql应用MySQL的部分看:(你可以看到邪恶的删除语句)


设置*时间戳= 1359949544 *;
开始
**;
# 12878
# 130204 11:45:44服务器ID 1 end_log_pos 12975查询thread_id = 5 = 974 = 0 error_code exec_time
设置*时间戳= 1359949544 *;
从应用程序中删除id = 1
**;
# 12975
# 130204 11:45:44服务器ID 1 end_log_pos 13002码= 106
*提交/ *;
# 13002
# 130204 11:45:44服务器ID 1 end_log_pos 13077查询thread_id = 5 = 1013 = 0 error_code exec_time
设置*时间戳= 1359949544 *;
开始
**;
# at 13077
# 130204 11:45:44服务器ID 1 end_log_pos 13175查询thread_id = 5 = 1013 = 0 error_code exec_time
设置*时间戳= 1359949544 *;
从应用程序中删除ID 6
**;
# 13175
# 130204 11:45:44服务器ID 1 end_log_pos 13202码= 107
*提交/ *;
分隔符;
日志文件的结尾#




你可以看到,当数据被删除。具体时间也可以通过选择from_unixtime应用(1359949544);

令人欣慰的是,创建表的程序语句和插入语句也在这个文件中。手动删除删除语句后,即在临时库的源mysqlbinlog发现SQL文件

在删除之前,应用程序被恢复到状态。然后临时库的数据导入当前的网络数据(这不是本文的重点)。

如果没有备份,它将检索所有APP表相关的数据很麻烦,尤其是binlog文件。

那只会从应用程序建立到现在mysqlbinlog检索与应用程序关联表的DML操作SQL记录,然后将数据。

我认为这种情况一般是少的。虽然麻烦,但不能恢复。

以上mysql方法检索的数据删除表(见)很小,可以分享你的所有内容,希望能给你一个参考,希望你能支持。