百度
360搜索
搜狗搜索

数据库误删了表数据怎么恢复,SQL数据库里的表误删除要怎么恢复详细介绍

本文目录一览:
mysql误删除一个表,可以恢复吗

1、首先构建测试环境数据create table t1(a varchar(10),b varchar(10));insert into t1 values('1','1');insert into t1 values('2','2');commit;。
2、模拟误修改,将t1表中的b字段更新为错误数据 "123456"update t1 set b='123456' where a='1';commit;select * from t1;。
3、将恢复工具上传到服务器并进行解压。unzip binlog2sql-master.zip。
4、得到误修改时的binlog文件(show binary logs;),实验环境是mysql-bin.000011。
5、通过 binlog2sql.py 脚本的到所有 对表 t1 的修改操作。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011'。
6、得到了误删除的sql的准确位置在1382-1615之间,使用 _**-B**_ 选项生成回滚sql。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011' --start-position=1382 --stop-position=1615 -B。
7、执行得到的回滚语句进行误操作恢复。就完成了。

详解:如何恢复MySQL数据库下误删的数据

血的教训,事发经过就不详述了。直接上操作步骤及恢复思路(友情提示:数据库的任何操作都要提前做好备份),以下是Mysql数据后的恢复过程:1. 找到binlog恢复数据的前提是必须开启Mysql的binlog日志,如果binlog日志没开启,请忽略此篇文档。binlog日志是否开启可以查看Mysql配置文件。日志位置一般在/var/lib/mysql目录或者编译安装的date目录下。也可登录Mysql用命令查看。#cat/etc/my.cnflog_bin=mysql-bin#mysql-uroot-pEnterpassword:mysql>showvariableslike‘log_bin%‘; --------------------------------- -------------------------------------------------- |Variable_name|Value| --------------------------------- -------------------------------------------------- |log_bin|ON||log_bin_basename|/home/programs/mysql-5.6.26/data/mysql-bin||log_bin_index|/home/programs/mysql-5.6.26/data/mysql-bin.index||log_bin_trust_function_creators|OFF||log_bin_use_v1_row_events|OFF| --------------------------------- -------------------------------------------------- 5rowsinset(0.00sec)#ll/home/programs/mysql-5.6.26/data/mysql-bin*-rw-rw----1mysqlmysql343629748Oct1322:09/home/programs/mysql-5.6.26/data/mysql-bin.000001-rw-rw----1mysqlmysql19Sep2317:11/home/programs/mysql-5.6.26/data/mysql-bin.index如果有多个binlog日志也可以在Mysql命令行下查看当前binlog、切割binlog日志。切割完成binlog再次查看就会看到新的日志写入到新的binlog文件中。mysql>showmasterstatus; ------------------ ----------- -------------- ------------------ ------------------- |File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set| ------------------ ----------- -------------- ------------------ ------------------- |mysql-bin.000001|343629748|||| ------------------ ----------- -------------- ------------------ ------------------- 1rowinset(0.00sec)mysql>flushlogs;QueryOK,0rowsaffected(0.01sec)2. 找到binlog中错误的语句可以binlog日志中找到错误语句执行的时间点,分别恢复错误语句前后的binlog日志为sql。也可以跳过此步,直接恢复整个binlog日志为sql,然后打开sql文件,删除错误语句。#sudomysqlbinlog--base64-output=DECODE-ROWS-v-didsmysql-bin.000001|grep--ignore-case-A3-B4‘错误的sql语句‘3. 恢复binlog日志通过mysqlbinlog命令直接恢复binlog日志为sql脚本,可以指定开始和结束时间。如果从上次备份(建议备份的同时刷新binlog日志)截至到恢复时间产生多个binlog日志,按从小到大的顺序分别导出成sql再顺序导入到数据库。#sudomysqlbinlog--base64-output=DECODE-ROWS-v-dids--start-datetime‘2016-10-1115:22:53‘mysql-bin.000001>/home/stack/data.sql上面命令中用-d ids指定要恢复数据库,如果要恢复表级别的数据,导出成sql后再进行过滤grep即可。#moredata.sql|grep--ignore-case-E‘insert|update|delete‘|greptable4. 恢复到数据库恢复数据时,可能会有重复数据的报错,建议用-f参数忽略。#mysql-uroot-p-fids
<data.sql详解:如何恢复mysql数据库下误删的数据标签:password数据库配置文件linuxmysql

mysql怎么找回误删表的数据

有备份的话很简单,只需要生成一个最近备份的数据 然后用mysqlbinlog找回备份时间点之后的数据 再恢复到现网即可。要是没有备份 可能就会比较麻烦,找回数据的成本也是非常之高的.下面介绍下 mysqlbinlog找回备份时间点之后的数据的办法:做个简单的实验,将mysql的表数据删除之后,然后用mysqlbinlog 找回刚才删除的表的数据。app表的创建时间和数据的插入: 2013-02-04 10:00:00 原理: mysqlbinlog前提: mysql开启了bin log日志测试删除之前:mysql> show tables; ----------------------- | Tables_in_report_sina | ----------------------- | app || test | ----------------------- mysql> select now(); --------------------- | now() | --------------------- | 2013-02-04 11:45:44 | --------------------- 1 row in set (0.01 sec)mysql> select count(1) from app; ---------- | count(1) | ---------- | 10 | ---------- 1 row in set (0.01 sec)开始删除数据:mysql> delete from app where id =1;Query OK, 1 row affected (0.00 sec)mysql> mysql> delete from app where id <6;Query OK, 4 rows affected (0.01 sec)mysql> select count(1) from app; ---------- | count(1) | ---------- | 5 | ---------- 1 row in set (0.00 sec) mysql> select now(); --------------------- | now() | --------------------- | 2013-02-04 12:08:45 | --------------------- 开始找回数据:1.找到bin log的位置:/app/mysql/log-rw-rw---- 1 mysql mysql 17K Feb 4 11:43 alert.log-rw-rw---- 1 mysql mysql 1.0K Nov 1 14:52 master-bin.000001-rw-rw---- 1 mysql mysql 126 Dec 25 14:00 master-bin.000002-rw-rw---- 1 mysql mysql 126 Dec 25 14:02 master-bin.000003-rw-rw---- 1 mysql mysql 126 Dec 25 14:02 master-bin.000004-rw-rw---- 1 mysql mysql 107 Dec 25 14:02 master-bin.000005-rw-rw---- 1 mysql mysql 13K Feb 4 12:02 master-bin.000006可以看到 最近被修改的bin log 只有 master-bin.000006 (要是误删除跨越了好几个bin log 找回数据的时候就必须一个个的bin log日志去找回了)将这一段时间所有执行的sql语句存入到 待恢复的 sql文件中。mysqlbinlog --start-date='2013-02-04 10:00:00' --stop-date='2013-02-04 12:08:45' /app/mysql/log/master-bin.000006 >/app/mysql/mysql_restore_20130204.sql当然在现网环境下 ,这个时间可能没那么的准确,并且还有其他事务sql语句的干扰。创建临时数据库create database for_bak;导出当前数据库中被误删的表 appmysqldump -uroot -ppwd my_db app > /app/mysql/app.sql将现在的数据导入到临时表:mysql -root -ppwd for_bak < /app/mysql/app.sql我们再来看下 /app/mysql/mysql_restore_20130204.sql的部分内容: (可以看到罪恶的delete 语句)SET TIMESTAMP=1359949544/*!*/;BEGIN/*!*/;# at 12878#130204 11:45:44 server id 1 end_log_pos 12975 Query thread_id=5 exec_time=974 error_code=0SET TIMESTAMP=1359949544/*!*/;delete from app where id =1/*!*/;# at 12975#130204 11:45:44 server id 1 end_log_pos 13002 Xid = 106COMMIT/*!*/;# at 13002#130204 11:45:44 server id 1 end_log_pos 13077 Query thread_id=5 exec_time=1013 error_code=0SET TIMESTAMP=1359949544/*!*/;BEGIN/*!*/;# at 13077#130204 11:45:44 server id 1 end_log_pos 13175 Query thread_id=5 exec_time=1013 error_code=0SET TIMESTAMP=1359949544/*!*/;delete from app where id <6/*!*/;# at 13175#130204 11:45:44 server id 1 end_log_pos 13202 Xid = 107COMMIT/*!*/;DELIMITER ;# End of log file可以看到 数据是什么时间点删除的 。 具体的时间也可以用 select from_unixtime(1359949544); 来查询令人欣慰的是 create table app 语句和 insert 的语句也在这个文件之中。 在手工去掉 delete 语句之后 在临时库里面进行 source mysqlbinlog找回来的sql文件就将app恢复到被删除之前的状态了。 然后将临时库的数据导入到现网数据(这个不是这篇文章的重点了)。要是没有备份,要找回所有app表相关的数据 那可能就非常的麻烦了 尤其是 binlog文件非常多 而且每个都比较的大。那样的话也只有从app的建立到现在 用mysqlbinlog来逐个的找回与app表相关dml操作的sql记录,然后整合恢复数据。我想这种情况一般比较的少。虽然麻烦,但是也不是不能恢复。更多相关教程请访问 MySQL视频教程

阅读更多 >>>  戴尔T40装linux系统吗

access下如何恢复已经删除的记录;如何恢复已经删除的表、窗体等

access下如何恢复已经删除的记录;如何恢复已经删除的表、窗体等等对象 问题: 如何恢复已经删除的记录;如何恢复已经删除的表、窗体等等对象 1、我用 DELETE FROM TABLE 删除了一些记录,现在发现误删除了,该如何恢复? 2、我直接手动删除或者用 DROP TABLE 删除了一个表,现在发现是误删除了,该如何恢复? 3、我手动删除了一个窗体,该如何恢复? 4、我删除了记录,可是数据库体积并没有减小,那么是否能找回记录呢? 回答: 1、已经删除的记录是无法恢复的,ACCESS 不是 FOXPRO,MDB 格式不是 DBF 格式,没有逻辑删除和物理删除的概念,一旦删除就无法恢复了。 2、无法恢复,但是你可以查看一下,有没有隐藏的以 "~" 符号开头的表,更改该表的名称有可能找回你需要的表。 3、无法恢复,但是你可以查看一下有没有系统隐藏的对象,有时候对象被删除时系统并不直接删除,而是更改对象名后隐藏它。 4、数据库体积的确没有变小,你压缩修复数据库后体积就会变小了。那是因为在二进制上你的数据的确没有被删除,仍然存放在磁盘的某个扇区,但是微软没有提供 MDB 格式二进制组织方式的参考资料(微软也不会提供,其他第三方公司也没有权利直接反编译 MDB 格式)。至今为止,中国大陆我也没有看到过相关的参考资料。所以目前为止,你已经删除的数据是无法恢复的。但是你可以尝试使用磁盘恢复软件来找到恢复数据的方法,但是该方法不在本文讨论范围。 建议:在建立数据库结构时,可以在各个表中再多加一个 ISDEL 字段,删除记录时不使用 DELETE FROM ,而使用 UPDATE TABLE SET ISDEL=TRUE 这样的语句,然后在界面上不显示 ISDEL=TRUE 的记录即可。 代码如下:如果还没有被压缩理论上可以。试试这段代码吧。加在access模组中 恢__除的工作表(未被__) Public Function FnUndeleteObjects() As Boolean On Error GoTo ErrorHandler: Dim strObjectName As String Dim rsTables As DAO.Recordset Dim dbsDatabase As DAO.Database Dim tDef As DAO.TableDef Dim qDef As DAO.QueryDef Dim intNumDeletedItemsFound As Integer Set dbsDatabase = CurrentDb For Each tDef In dbsDatabase.TableDefs 'This is actually used as a 'Deleted Flag' If tDef.Attributes And dbHiddenObject Then strObjectName = FnGetDeletedTableNameByProp(tDef.Name) strObjectName = InputBox("A deleted TABLE has been found." & _ vbCrLf & vbCrLf & _ "To undelete this object, enter a new name:", _ "Access Undelete Table", strObjectName) If Len(strObjectName) > 0 Then FnUndeleteTable CurrentDb, tDef.Name, strObjectName End If intNumDeletedItemsFound = intNumDeletedItemsFound 1 End If Next tDef For Each qDef In dbsDatabase.QueryDefs 'Note 'Attributes' flag is not exposed for QueryDef objects, 'We could look up the flag by using MSysObjects but 'new queries don't get written to MSysObjects until 'Access is closed. Therefore we'll just check the 'start of the name is '~TMPCLP' ... If InStr(1, qDef.Name, "~TMPCLP") = 1 Then strObjectName = "" strObjectName = InputBox("A deleted QUERY has been found." & _ vbCrLf & vbCrLf & _ "To undelete this object, enter a new name:", _ "Access Undelete Query", strObjectName) If Len(strObjectName) > 0 Then If FnUndeleteQuery(CurrentDb, qDef.Name, strObjectName) Then 'We'll rename the deleted object since we've made a 'copy and won't be needing to re-undelete it. '(To break the condition "~TMPCLP" in future...) qDef.Name = "~TMPCLQ" & Right$(qDef.Name, Len(qDef.Name) - 7) End If End If intNumDeletedItemsFound = intNumDeletedItemsFound 1 End If Next qDef If intNumDeletedItemsFound = 0 Then MsgBox "Unable to find any deleted tables/queries to undelete!" End If Set dbsDatabase = Nothing FnUndeleteObjects = True ExitFunction: Exit Function ErrorHandler: MsgBox "Error occured in FnUndeleteObjects() - " & _ Err.Description & " (" & CStr(Err.Number) & ")" GoTo ExitFunction End Function Private Function FnUndeleteTable(dbDatabase As DAO.Database, _ strDeletedTableName As String, _ strNewTableName As String) 'Module (c) 2005 Wayne Phillips (http://www.everythingaccess.com) 'Written 18/04/2005 Dim tDef As DAO.TableDef Set tDef = dbDatabase.TableDefs(strDeletedTableName) 'Remove the Deleted Flag... tDef.Attributes = tDef.Attributes And Not dbHiddenObject 'Rename the deleted object to the original or new name... tDef.Name = strNewTableName dbDatabase.TableDefs.Refresh Application.RefreshDatabaseWindow Set tDef = Nothing End Function Private Function FnUndeleteQuery(dbDatabase As DAO.Database, _ strDeletedQueryName As String, _ strNewQueryName As String) 'Module (c) 2005 Wayne Phillips (http://www.everythingaccess.com) 'Written 18/04/2005 'We can't just remove the Deleted flag on queries '('Attributes' is not an exposed property) 'So instead we create a new query with the SQL... 'Note: Can't use DoCmd.CopyObject as it copies the dbHiddenObject attribute! If FnCopyQuery(dbDatabase, strDeletedQueryName, strNewQueryName) Then FnUndeleteQuery = True Application.RefreshDatabaseWindow End If End Function Private Function FnCopyQuery(dbDatabase As DAO.Database, _ strSourceName As String, _ strDestinationName As String) 'Module (c) 2005 Wayne Phillips (http://www.everythingaccess.com) 'Written 18/04/2005 On Error GoTo ErrorHandler: Dim qDefOld As DAO.QueryDef Dim qDefNew As DAO.QueryDef Dim Field As DAO.Field Set qDefOld = dbDatabase.QueryDefs(strSourceName) Set qDefNew = dbDatabase.CreateQueryDef(strDestinationName, qDefOld.SQL) 'Copy root query properties... FnCopyLvProperties qDefNew, qDefOld.Properties, qDefNew.Properties For Each Field In qDefOld.Fields 'Copy each fields individual properties... FnCopyLvProperties qDefNew.Fields(Field.Name), _ Field.Properties, _ qDefNew.Fields(Field.Name).Properties Next Field dbDatabase.QueryDefs.Refresh FnCopyQuery = True ExitFunction: Set qDefNew = Nothing Set qDefOld = Nothing Exit Function ErrorHandler: MsgBox "Error re-creating query '" & strDestinationName & "':" & vbCrLf & _ Err.Description & " (" & CStr(Err.Number) & ")" GoTo ExitFunction End Function Private Function PropExists(Props As DAO.Properties, strPropName As String) As Boolean 'Module (c) 2005 Wayne Phillips (http://www.everythingaccess.com) 'Written 18/04/2005 'If properties fail to be created, we'll just ignore the errors On Error Resume Next Dim Prop As DAO.Property For Each Prop In Props If Prop.Name = strPropName Then PropExists = True Exit Function ' Short circuit End If Next Prop PropExists = False End Function Private Sub FnCopyLvProperties(objObject As Object, OldProps As DAO.Properties, NewProps As DAO.Properties) 'Module (c) 2005 Wayne Phillips (http://www.everythingaccess.com) 'Written 18/04/2005 'If properties fail to be created, we'll just ignore the errors On Error Resume Next Dim Prop As DAO.Property Dim NewProp As DAO.Property For Each Prop In OldProps If Not PropExists(NewProps, Prop.Name) Then If IsNumeric(Prop.Value) Then NewProps.Append objObject.CreateProperty(Prop.Name, Prop.Type, CLng(Prop.Value)) Else NewProps.Append objObject.CreateProperty(Prop.Name, Prop.Type, Prop.Value) End If Else With NewProps(Prop.Name) .Type = Prop.Type .Value = Prop.Value End With End If Next Prop End Sub Private Function FnGetDeletedTableNameByProp(strRealTableName As String) As String 'Module (c) 2005 Wayne Phillips (http://www.everythingaccess.com) 'Written 18/04/2005 'If an error occurs here, just ignore (user will override the blank name) On Error Resume Next Dim i As Long Dim strNameMap As String 'Look up the Unicode translation NameMap property to try to guess the 'original table name... (Access 2000 only - and doesn't always exist?!) strNameMap = CurrentDb.TableDefs(strRealTableName).Properties("NameMap") strNameMap = Mid(strNameMap, 23) 'Offset of the table name... 'Find the null terminator... i = 1 If Len(strNameMap) > 0 Then While (i i = i 1 Wend End If FnGetDeletedTableNameByProp = Left(strNameMap, i - 1) End Function

阅读更多 >>>  美图T8值得买吗

数据库中的数据删除后还能恢复吗

数据库中的数据被删除后,可以恢复。但至少需要满足两个条件:1、在误删之前,至少有完整备份之前的数据库。2、数据库的恢复模式(Recoverymode)是“完整(Full)”。只有满足这两个条件,才可以恢复数据库中误删的数据。
针对这两个前提条件,有三种方式可以恢复数据:方式一:如果,这两个前提条件都满足,可以通过SQL语句进行数据恢复,而且只需三步即可恢删除的数据,无需第三方工具。方式二:当不满足第一个条件,而满足第二个条件时,需要借助第三方工具,才能恢复数据。方式三:如果两个条件都不满足,数据则无法恢复。所以,一定将数据库的恢复模式,调整为“完整(Full)”。

SQL数据库里的表误删除要怎么恢复

1、实现运行Recovery for SQL Server操作如下。
2、点击:Next > Next--》进入 Recovery Configuration 界面--》选择了Custom才可以选择从日志中恢复误删除的数据的操作如下。
3、Next 进入 Recovery options 窗口--》选中 Search for deleted records,并选择要恢复的数据库的日志文件路径log file path操作如下。
4、实现点击next-》开始恢复操作如下。
5、点击:Next选择被恢复数据存放的目标数据库。
6、点击:Finish然后就完成数据的恢复数据的操作如下。

如何恢复mysql表中清除的数据

以下情况可以恢复数据:
1 innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit操作的话,可以执行rollback进行回滚恢复。如果是ddl操作,如drop、create、alter之类的操作时无效的
2 在进行删除操作之前有备份,比如mysqldump,物理备份数据文件之类的操作,那么可以恢复到删除前的数据
3 如果你的删除操作是直接对data下的文件进行删除,注意,不是粉碎文件操作,那么你可以尝试用磁盘恢复软件来找回被误删的数据文件;
除以上情况,其他真的是没法恢复了,不过貌似很多公司号称能够恢复,要收费,具体他们怎么恢复我就不晓得了。
1、第一步,查询语句:select* from table_name;或select * from table_name where [条件]
2、第二步,增加语句或插入数据insert into table_name (clus...) values(values...)实例如图:
3、修改数据:update tablename set xx=xx,xxx=xx where xxx=xxx and xxx=xxx;
4、第四步, 删除语句delete table_name where 条件实例如图:

oracle数据库误操作把表删除了,不知道删除了哪张表,怎么找回

一:表的恢复
对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:
1、从flash back里查询被删除的表
select * from recyclebin
2.执行表的恢复
flashback table tb to before drop,这里的tb代表你要恢复的表的名称。
二:表数据恢复
对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:

1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。
如:select * from flashback_transaction_query where
table_name='TEST';
2、执行表记录恢复
一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp
to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点
如select * from scott.test as of timestamp to_timestamp('2009-12-11
20:53:57','yyyy-mm-dd hh24:mi:ss');
若有数据,恢复极为简单了,语句为flashback table tb to timestamp
to_timestamp(time,'yyyy-mm-dd hh24:mi:ss');
如flashback table scott.test to timestamp to_timestamp('2009-12-11
20:47:30','yyyy-mm-dd hh24:mi:ss');
注意:alter table testvarchar enable row movement;
这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle
中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP
完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作

网站数据信息

"数据库误删了表数据怎么恢复,SQL数据库里的表误删除要怎么恢复"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:数据库误删了表数据怎么恢复,SQL数据库里的表误删除要怎么恢复的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!