[置顶] 数据的还原操作mixed和row的操作
2017-12-15 20:30
211 查看
MySQL备份策略:全备+增量备份主要包括以下几个步骤:
1、开启BINLOG服务
2、使用MYSQLDUMP对数据库进行完全备份
3、使用flush logs指令刷新创建新的2进制日志
4、使用mysqlbinlog logs-bin.[0-9]* |mysql进行增量备份的恢复
一般的,假设我们周日下午3点进行了完全备份并生成备份文件full_backup_20170215.sql,周1周2中午1点进行了两次增量备份,
分别生成增量备份文件mysql-bin.000018,mysql-bin.000019,周3上午10点数据库发生奔溃,需要进行数据恢复,此时正在记录的
2进制日志为mysql-bin.000020,需要恢复其中记录的操作,具体为:
1、恢复全备
2、恢复BINLOG(备份后的BINLOG文件:mysql-bin.000018,mysql-bin.000019,mysql-bin.000020)
##binlog文件可以导成SQL文件或者直接用/usr/local/mysql/bin/mysqlbinlog mysql-bin.000018,mysql-bin.000019,mysql-bin.000020|mysql
这样导入也是可以的,导成SQL文件,不需要加任何参数mysqlbinlog mysql-bin.000020>a20.sql
全备+增量备份
周日全备,周1、2、3是增量,周3删除数据,周4、5、6继续增量,还原周3误删除的数据:
1、还原全备
2、还原增备(1,2,4,5,6)
3、对周3的BINLOG 文件导成SQL文件,找到删除的数据行前加#号,然后在还原周3的增量
全局替换sed -i "s/delete/#delete/g" aa17.sql, 基于binlog_format=mixed
################################################
对于在row模式下,误删除某些数据,要立刻还原的操作
基于row模式的binlog,生成DML(insert/update/delete)的rollback语句
通过mysqlbinlog -v 解析binlog生成可读的sql文件
提取需要处理的有效sql
"### "开头的行.如果输入的start-position位于某个event group中间,则会导致"无法识别event"错误
将INSERT/UPDATE/DELETE 的sql反转,并且1个完整sql只能占1行
INSERT: INSERT INTO => DELETE FROM, SET => WHERE
UPDATE: WHERE => SET, SET => WHERE
DELETE: DELETE FROM => INSERT INTO, WHERE => SET
用列名替换位置@{1,2,3}
通过desc table获得列顺序及对应的列名
特殊列类型value做特别处理
逆序
注意:
表结构与现在的表结构必须相同[谨记]
由于row模式是幂等的,并且恢复是一次性,所以只提取sql,不提取BEGIN/COMMIT
只能对INSERT/UPDATE/DELETE进行处理
代码作者不详,能用就好o(∩_∩)o :
使用过程简单:
1、添加连接数据库的用户名和密码
2、在/usr/bin目录下不要有其他版本的mysqlbinlog文件,和当前版本统一
3、执行脚本 perl binlog_rollback.pl -f './mysql-bin.000020' -i -o '/tmp/t.sql' -u 'dlan' -p 'root123'
4、代码包下载 http://down.51cto.com/data/2287584
1、开启BINLOG服务
2、使用MYSQLDUMP对数据库进行完全备份
3、使用flush logs指令刷新创建新的2进制日志
4、使用mysqlbinlog logs-bin.[0-9]* |mysql进行增量备份的恢复
一般的,假设我们周日下午3点进行了完全备份并生成备份文件full_backup_20170215.sql,周1周2中午1点进行了两次增量备份,
分别生成增量备份文件mysql-bin.000018,mysql-bin.000019,周3上午10点数据库发生奔溃,需要进行数据恢复,此时正在记录的
2进制日志为mysql-bin.000020,需要恢复其中记录的操作,具体为:
1、恢复全备
2、恢复BINLOG(备份后的BINLOG文件:mysql-bin.000018,mysql-bin.000019,mysql-bin.000020)
##binlog文件可以导成SQL文件或者直接用/usr/local/mysql/bin/mysqlbinlog mysql-bin.000018,mysql-bin.000019,mysql-bin.000020|mysql
这样导入也是可以的,导成SQL文件,不需要加任何参数mysqlbinlog mysql-bin.000020>a20.sql
全备+增量备份
周日全备,周1、2、3是增量,周3删除数据,周4、5、6继续增量,还原周3误删除的数据:
1、还原全备
2、还原增备(1,2,4,5,6)
3、对周3的BINLOG 文件导成SQL文件,找到删除的数据行前加#号,然后在还原周3的增量
全局替换sed -i "s/delete/#delete/g" aa17.sql, 基于binlog_format=mixed
################################################
对于在row模式下,误删除某些数据,要立刻还原的操作
基于row模式的binlog,生成DML(insert/update/delete)的rollback语句
通过mysqlbinlog -v 解析binlog生成可读的sql文件
提取需要处理的有效sql
"### "开头的行.如果输入的start-position位于某个event group中间,则会导致"无法识别event"错误
将INSERT/UPDATE/DELETE 的sql反转,并且1个完整sql只能占1行
INSERT: INSERT INTO => DELETE FROM, SET => WHERE
UPDATE: WHERE => SET, SET => WHERE
DELETE: DELETE FROM => INSERT INTO, WHERE => SET
用列名替换位置@{1,2,3}
通过desc table获得列顺序及对应的列名
特殊列类型value做特别处理
逆序
注意:
表结构与现在的表结构必须相同[谨记]
由于row模式是幂等的,并且恢复是一次性,所以只提取sql,不提取BEGIN/COMMIT
只能对INSERT/UPDATE/DELETE进行处理
代码作者不详,能用就好o(∩_∩)o :
使用过程简单:
1、添加连接数据库的用户名和密码
2、在/usr/bin目录下不要有其他版本的mysqlbinlog文件,和当前版本统一
3、执行脚本 perl binlog_rollback.pl -f './mysql-bin.000020' -i -o '/tmp/t.sql' -u 'dlan' -p 'root123'
4、代码包下载 http://down.51cto.com/data/2287584
相关文章推荐
- 数据的还原操作mixed和row的操作
- 对表数据进行(置顶,上移,下移,置底操作)---数据库sql
- oracle update并commit误操作后,利用闪回方法 flashback可以还原上个时间点的数据
- 我电脑上的mssql2000居然,被黑了,在还原数据时提示:无法装载DLL Microsoft提示请误随意操作SQL数据库,以免对数据库造成不必要的麻烦或DLL所引用的某一DLL。原因:126(找不到指定模块)
- [置顶] java dbutil 快速方便操作多数据源数据库
- Spring使用JdbcTemplate操作数据库---使用RowCallbackHander读数据篇
- 数据库页已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。
- [置顶] Android SQLiteDatabase 数据库操作(建立数据表,增删改查操作)
- Spring使用JdbcTemplate操作数据库---使用RowMapperResultSetExtractor读数据篇
- [置顶] 【java 操作mysql】java连接mysql数据库并查询数据
- mysqldump备份与还原数据操作
- 数据库页已标记为 RestorePending,可能表明磁盘已损坏。要从此状态恢复,请执行还原操作。
- [置顶] 【spark 读写数据】数据源的读写操作
- 数据库误操作,如何恢复数据(SQL事务,或数据库还原)
- docker对数据卷进行还原操作
- [置顶] 数据库和数据表的操作
- oralcle数据误更新还原操作
- DataWindow(PB)的获取数据窗口选中行的操作解疑!dw_1.getSelectedRow(long r)
- [置顶] Oracle数据操作和控制语言详解
- [置顶] 操作远程数据时,无法保存时,可以用sql语句指令修改