在sql里面把数据库删除了怎么恢复

在sql里面把数据库删除了怎么恢复,第1张

不同的数据库有不同的恢复方式。

Oracle 11g之后有闪存回归机制,在一定的时间内可以从闪存中恢复数据。

MySQL数据库则在开启了binlog日志的情况下,可以通过binlog日志恢复被删除的数据。

通过数据库备份跟binlog日志记录,可能恢复原来的数据

恢复步骤

a)创建新的数据库 create database rollback_db;

b)将数据库备份倒入新创建的rollback_db中

c)找到数据库备份的最后时间点,并将mysqlbinlog中该时间点之后的命令 *** 作记录通过mysqlbinlog工具保存为sql命令文本

d)将sql命令文本倒入数据库,可能rollback_db就是需要恢复的db了

3mysqlbinlog介绍

binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;

作用:MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL *** 作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)

二进制日志的信息:

文件位置:默认存放位置为数据库文件所在目录下

文件的命名方式: 名称为hostname-binxxxxx (重启mysql一次将会自动生成一个新的binlog)

状态的查看:mysql> show variables like '%log_bin%';

4利用bin_log恢复数据

a)最长用的就是回复指定数据端的数据了,可以直接恢复到数据库中:     mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin000001 |mysql -uroot -p123456       亦可导出为sql文件,再导入至数据库中:       mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin000001 >d:\1sql       source d:\1sql         b)指定开始\结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,可以在恢复的过程中指定回复从A位置到B位置的log需要用下面两个参数来指定:     --start-positon="50" //指定从50位置开始     --stop-postion="100"//指定到100位置结束

mysql binlog没有开启数据恢复

mysql 不小心误删了一个数据表的数据,通过delete,没有开启binlog,如何才可以恢复数据。MYI MYD文件还是原大小。

SQL code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

MariaDB [(none)]> show variables like '%bin%';

+-----------------------------------------+----------------------+

| Variable_name | Value |

+-----------------------------------------+----------------------+

| binlog_annotate_row_events | OFF |

| binlog_cache_size | 32768 |

| binlog_checksum | NONE |

| binlog_direct_non_transactional_updates | OFF |

| binlog_format | STATEMENT |

| binlog_optimize_thread_scheduling | ON |

| binlog_stmt_cache_size | 32768 |

| innodb_locks_unsafe_for_binlog | OFF |

| log_bin | OFF |

| log_bin_trust_function_creators | OFF |

| max_binlog_cache_size | 18446744073709547520 |

| max_binlog_size | 1073741824 |

| max_binlog_stmt_cache_size | 18446744073709547520 |

| sql_log_bin | ON |

| sync_binlog | 0 |

+-----------------------------------------+----------------------+

15 rows in set (000 sec)

如何恢复,数据库还未重启。

SQL code

1

2

3

4

5

6

7

8

9

10

11

[root@flxx dada002]# ll

total 512332

drwxr-xr-x 2 dada002 root 4096 Dec 22 23:10 bak

-rw-r----- 1 root root 13880 Mar 13 11:52 gk_info_infofrmbak

-rw-r----- 1 root root 485853324 Mar 13 11:51 gk_info_infoMYDbak

-rw-r----- 1 root root 9374720 Mar 13 11:51 gk_info_infoMYIbak

-rw-r----- 1 root root 18874368 Mar 13 12:02 ibdata1

-rw-r----- 1 root root 5242880 Mar 13 12:02 ib_logfile0

-rw-r----- 1 root root 5242880 Mar 13 12:02 ib_logfile1

drwxrwxrwx 2 dada002 root 12288 Mar 9 14:25 logs

drwxr-xr-x 16 dada002 root 4096 Mar 8 15:10 >

误删数据的几种 *** 作

如何事前预防误删数据?

误删行数据恢复

误删行数据恢复可以使用 Flashback工具

Flashback恢复数据的原理是通过修改binlog内容,拿回原库进行回放,前提是 binlog_format=row和binlog_row_image=FULL

在使用Flashback进行恢复的时候, 不建议在主库上进行 *** 作 ,比较安全的做法是恢复出一个备份,或者找一个从库作为临时库,在这个临时库上执行 *** 作,然后再将确认过的临时库的数据恢复到主库。

误删库/表

drop table或者truncate table误删数据表 无法通过Flashback工具恢复 ,因为binlog_format的格式即使是ROW模式,在binlog中记录的也只是一条drop table或者truncate语句,因此无法进行恢复。

此时恢复的方式需要 全量备份加增量日志的方式进行恢复 ,因此要求数据有定期的全量备份,并且实时备份binlog。

假如某人在中午12点误删除了一个库里的某张表,恢复数据的流程如下:

mysqlbinlog恢复数据慢的原因?

如何更快的恢复误删的表?

在用备份恢复出临时实例以后,将这个临时实例设置成线上备库的从库:

假设此时备库的binlog已经被删除,那么需要去binlog备份系统找到删掉的日志文件拷贝到日志目录下,假设文件名是master000001,打开日志目录下的binlog的index文件,在开头加入master000001,让备库重新识别此日志文件

延迟复制备库

以上恢复都具有时间不可控性,如果采用上述步骤进行恢复,建议开发成工具(甚至可以做自己的DBA自动化平台),并大量测试后进行使用,避免手动误 *** 作带来更大的问题。

一般的主备复制存在的问题是,假设主库上的表被删除,这个命令很快会被发给所有从库,进而导致从库的数据表也被一起误删除。

延迟复制备库 是可以持续保持与主库有N秒延迟的备库

假设这里N=3600,那么表示只要在1个小时以内发现了误删除,就可以的到备库上执行stop slave,再通过之前讲到的方法,跳过误 *** 作的命令(比如将误删除的GTID加到实例集合中),就可以恢复出需要的数据。

rm误删

只要你的集群是高可用,如果rm删除了某个节点(只要不是恶意删除所有节点),HA系统会自动开始工作,选出一个新的主库,从而保证集群工作。

看到一个这样的解决方式不知道能不能帮助你:

phpmyadmin的后台数据库是mysql,下面或许有用。

《mysql数据恢复工具-mysqlbinlog 使用说明》

要使用此功能,首先必须确保mysql配置文件“Myini”中的

[mysqld] log-bin=log_name #开启二进制日志(其中log_name自己定义)

开启的作用就是开启mysql的二进制日志,然后才可以使用mysqlbinlog工具恢复数据,

开启之后通过在mysql中运行:

SHOW BINLOG EVENTS

来确认二进制日志的开启情况

mysqlbinlog有两种方式来恢复数据:(Mysqldatalogexe在“MySql\bin\”目录下)

1通过指定时间:

Mysqldatalog> mysqlbinlog --start-date="2009-11-27 14:01:00" --stop-date="2009-11-27 14:59:59" log_name000001 > D:\01txt

2通过指定位置:

参数说明:

•–start-position=N 从二进制日志中第1个位置等于N参量时的事件开始读。

•–stop-position=N 从二进制日志中第1个位置等于和大于N参量时的事件起停止读。

Mysqldatalog> mysqlbinlog --start-position=123 --end-position=456 log_name000001 > D:\01txt

关于position的说明:position可以通过执行SHOW BINLOG EVENTS命令来查看 然后进入mysql中执行source 命令 mysql>source D:\01txt 恢复数据完成。

最后说明:mysqlbinlog工具虽然很强大,但是为保数据不丢失最好还是跟备份数据同步使用。这样恢复数据就可以仅从最后一次备份开始到事故发生时间。

个人现在备份数据库都是采用“多备份”的多云盘自动备份,在怎么误删除也可以找的回来,有个好工具还是需要的

创建临时数据库,把备份导入进去进行 恢复单独的数据库 ,

mysqlbinlog 有一个 --databases 参数可以指定解析出指定db相关的sql ,你可以更加这个sql来恢复数据。

能不能建立多个二进制日志文件,使每个数据库对应自己的二进制日志文件?

mysql 下 无此功能,mysqlbinlog 记录的是整个mysql 实例的变化记录,不能针对单独的db 记录日志。

希望可以帮到您,谢谢!

以上就是关于在sql里面把数据库删除了怎么恢复全部的内容,包括:在sql里面把数据库删除了怎么恢复、excle中怎么将log值变回原来的数据库、mysql binlog没有开启数据怎么恢复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10203281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存