误删数据的几种操作
如何事前预防误删数据?
误删行数据恢复
误删行数据恢复可以使用 Flashback工具 .
Flashback恢复数据的原理是通过修改binlog内容,拿回原库进行回放,前提是 binlog_format=row和binlog_row_image=FULL .
在使用Flashback进行恢复的时候, 不建议在主库上进行操作 ,比较安全的做法是恢复出一个备份,或者找一个从库作为临时库,在这个临时库上执行操作,然后再将确认过的临时库的数据恢复到主库.
误删库/表
drop table或者truncate table误删数据表 无法通过Flashback工具恢复 ,因为binlog_format的格式即使是ROW模式,在binlog中记录的也只是一条drop table或者truncate语句,所以呢无法进行恢复.
此时恢复的方式需要 全量备份加增量日志的方式进行恢复 ,所以呢要求数据有定期的全量备份,并且实时备份binlog.
mysqlbinlog恢复数据慢的原因?
如何更快的恢复误删的表?
在用备份恢复出临时实例以后,将这个临时实例设置成线上备库的从库:
假设此时备库的binlog已经被删除,那么需要去binlog备份系统找到删掉的日志文件拷贝到日志目录下,假设文件名是master.000001,打开日志目录下的binlog的index文件,在开头加入master.000001,让备库重新识别此日志文件
延迟复制备库
以上恢复都具有时间不可控性,如果采用上述步骤进行恢复,建议开发成工具(甚至可以做自己的DBA自动化平台),并大量测试后进行使用,避免手动误操作带来更大的问题.
一般的主备复制存在的问题是,假设主库上的表被删除,这个命令很快会被发给所有从库,进而导致从库的数据表也被一起误删除.
延迟复制备库 是可以持续保持与主库有N秒延迟的备库 .
rm误删
只要你的集群是高可用,如果rm删除了某个节点(只要不是恶意删除所有节点),HA系统会自动开始工作,选出一个新的主库,从而保证集群工作.
mysql数据库不小心还原了需要按照以下步骤恢复.
①.、先确认mysql有没有启用bin日志 ,就是看下mysql.ini(my.cnf)里的log-bin=mysql-bin, 可以 自定义一个目录和前缀名,比如/data/log/mylog这样.
--database=testdatabase
c:\\test1.txt
这是windows下的导出,linux也是类似的.
database=数据库名
从最早的日志还始还原
linux下可以很方便的 mysql-bin.000*
可以加参数开始时间和结束时间,就是你执行那条sql语句的时间
--database=yundongchao
|
mysql
-u
root
-p
------------------------------------------------