MySQL怎么使用二进制日志恢复数据库

53次阅读
没有评论

共计 3164 个字符,预计需要花费 8 分钟才能阅读完成。

本篇内容主要讲解“MySQL 怎么使用二进制日志恢复数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“MySQL 怎么使用二进制日志恢复数据库”吧!

一、二进制日志简介

  MySQL 有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制文件恢复。在 my.ini 文件中设置了 log-bin,重新启动 MySQL 后就开启了二进制日志。数据库每次重新启动(或执行 flush logs 命令)后,都会生成一个新的二进制日志,如在在 my.ini 文件中设置了

log-bin=F:\mysqllog\logbin

则数据库第一次启动会生成 logbin.000001,第二次启动会生成 logbin.000002,第三次启动会生成 logbin.000003,……,以此类推。

MySQL 二进制日志删除与恢复   http://www.linuxidc.com/Linux/2010-11/29576p2.htm

二、数据恢复实例

1. 为了便于说明,执行 flush logs 命令,生成一个新的二进制文件;

2. 打开 bookstore 数据库中的 authors 表,里面已经有 3 条数据,在里面新插入两条数据,即第 4 条和第 5 条数据;

3. 假设由于操作失误,将第 4 条和第 5 条数据删除了;

4. 这时就考虑用二进制文件恢复第 4 条和第 5 条数据了,打开二进制文件的路径,发现有很多二进制日志文件,

其中编号最大的 000030 是最新的,记录了前面所述的记录插入和删除操作;

5. 首先查看一下这个文件,运行以下命令将其转换成文本文件,

打开文本文件,可以看见记录下了记录的插入和删除操作。

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#150204 20:24:10 server id 1  end_log_pos 107     Start: binlog v 4, server v 5.5.25-log created 150204 20:24:10
# Warning: this binlog is either in use or was not closed properly.
BINLOG
ag/SVA8BAAAAZwAAAGsAAAABAAQANS41LjI1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
/*!*/;
# at 107
#150204 20:25:40 server id 1  end_log_pos 180     Query    thread_id=8    exec_time=0    error_code=0
SET TIMESTAMP=1423052740/*!*/;
SET @@session.pseudo_thread_id=8/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 180
#150204 20:25:40 server id 1  end_log_pos 369     Query    thread_id=8    exec_time=0    error_code=0
use bookstore/*!*/;
SET TIMESTAMP=1423052740/*!*/;
INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (4, Li , Si , China)
/*!*/;
# at 369
#150204 20:25:40 server id 1  end_log_pos 557     Query    thread_id=8    exec_time=0    error_code=0
SET TIMESTAMP=1423052740/*!*/;
INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (5, Wang , Wu , US)
/*!*/;
# at 557
#150204 20:25:40 server id 1  end_log_pos 584     Xid = 391
COMMIT/*!*/;
# at 584
#150204 20:45:31 server id 1  end_log_pos 657     Query    thread_id=8    exec_time=0    error_code=0
SET TIMESTAMP=1423053931/*!*/;
BEGIN
/*!*/;
# at 657
#150204 20:45:31 server id 1  end_log_pos 780     Query    thread_id=8    exec_time=0    error_code=0
SET TIMESTAMP=1423053931/*!*/;
DELETE FROM `bookstore`.`authors` WHERE `author_id`= 4
/*!*/;
# at 780
#150204 20:45:31 server id 1  end_log_pos 903     Query    thread_id=8    exec_time=0    error_code=0
SET TIMESTAMP=1423053931/*!*/;
DELETE FROM `bookstore`.`authors` WHERE `author_id`= 5
/*!*/;
# at 903
#150204 20:45:31 server id 1  end_log_pos 930     Xid = 407
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

6. 开始恢复数据,执行以下命令,

之所以要有一个 –stop-pos=584 参数,是因为从 584 开始,就在删除记录了,所以在 584 就应该停止。执行命令以后,再次打开 authors 表,可以看见第 4、5 条数据被恢复了!

到此,相信大家对“MySQL 怎么使用二进制日志恢复数据库”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3164字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)