MySQL 必知必会
朱晓峰
前摩根大通银行技术部副总裁、系统架构师
17746 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
MySQL 必知必会
15
15
1.0x
00:00/00:00
登录|注册

20 | 日志(下):系统故障,如何恢复数据?

你好,我是朱晓峰。
上节课,咱们学习了通用查询日志、慢查询日志和错误日志,它们可以帮助我们快速定位系统问题。但实际上,日志也可以帮助我们找回由于误操作而丢失的数据,比如二进制日志(binary log)、中继日志(relay log)、回滚日志(undo log)和重做日志(redo log)。
这节课,我们就来学习下这 4 种日志。

二进制日志

二进制日志主要记录数据库的更新事件,比如创建数据表、更新表中的数据、数据更新所花费的时长等信息。通过这些信息,我们可以再现数据更新操作的全过程。而且,由于日志的延续性和时效性,我们还可以利用日志,完成无损失的数据恢复和主从服务器之间的数据同步。
可以说,二进制日志是进行数据恢复和数据复制的利器。所以,接下来我就结合一个实际案例,重点给你讲一讲怎么操作它。

如何操作二进制日志?

操作二进制日志,主要包括查看、刷新二进制日志,用二进制日志恢复数据,以及删除二进制日志。
1. 查看二进制日志
查看二进制日志主要有 3 种情况,分别是查看当前正在写入的二进制日志、查看所有的二进制日志和查看二进制日志中的所有数据更新事件。
查看当前正在写入的二进制日志的 SQL 语句是:
SHOW MASTER STATUS;
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了数据库日志的重要性以及如何利用二进制日志进行数据恢复和主从服务器之间的数据同步。通过操作二进制日志的步骤,包括备份、刷新、恢复和删除二进制日志,读者可以了解如何查看当前正在写入的二进制日志、刷新二进制日志、用二进制日志恢复数据以及删除二进制日志。文章还提供了实际案例,帮助读者更好地理解如何通过二进制日志恢复数据,避免因故障或异常导致数据损失。此外,还介绍了中继日志在主从服务器架构中的重要作用。另外,还介绍了回滚日志和重做日志的作用以及相关变量的设置。通过本文,读者可以快速了解数据库日志的重要性以及如何利用二进制日志进行数据恢复,对于数据库管理和数据安全具有重要的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 朱晓峰
    置顶
    你好,我是朱晓峰,下面我就来公布一下上节课思考题的答案: 上节课,我们学习了日志(上)。下面是思考题的答案: 修改配置文件:my.ini slow-query-log=1 long_query_time=5 然后重启MySQL服务器 mysql> SET min_examined_row_limit = 1; Query OK, 0 rows affected (0.00 sec)
    2021-05-20
    1
  • lesserror
    之前看到的MySQL基础课,涉及日志这块儿内容几乎没有。老师花了两节课讲了MySQL日志相关的内容,基本伤都是点到即止,阅读起来没多大负担。但是对于建立MySQL的整体认识是非常重要的。我虽然在实际工作中用了几年MySQL,这些内容读完了也有所收获!

    作者回复: 很高兴能够对你有所帮助

    2021-04-25
    4
  • giteebravo
    二进制日志可以处理数据备份与恢复的问题,也可以与中继日志一起解决主从架构下数据一致性的问题。 回滚日志与重做日志的具体作用还不太了解。

    作者回复: 详情可以参考链接:https://dev.mysql.com/doc/refman/8.0/en/innodb-redo-log.html和https://dev.mysql.com/doc/refman/8.0/en/innodb-undo-logs.html

    2021-04-25
    2
  • SharpBB
    1.二进制日志 0.注意点:在mysql8前二进制日志是默认关闭的 8以后默认开启 1.查看二进制日志 SHOW MASTER STATUS; 查看所有二进制日志 SHOW BINARY LOGS; 查看二进制日志中所有数据更新事件 SHOW BINLOG EVENTS IN 二进制文件名; 2. 刷新二进制日志 FLUSH BINARY LOGS; 关闭正在写入的二进制日志文件 重开新文件 并在文件后缀上+1 3. 用二进制日志恢复数据 mysqlbinlog –start-positon=xxx --stop-position=yyy 二进制文件名 | mysql -u 用户 -p 从xxx位置开始 到yyy截止的数据更新操作 yyy可以省略 小tip:最好记录下开始位置 否则在数据量大的情况下索引会很难找 4. 删除二进制日志 RESET MASTER; 2.中继日志 只在主从架构的从服务器上存在 简单讲就是 从服务器读取对应二进制文件进行备份 踩坑 如果主服务器宕机 重装操作系统 导致服务器名变更 那么从机的备份恢复是根据之前的从服务器名来的 所以要将服务器名改成之前的即可 3.回滚日志 单个回滚日志最大为1g SHOW VARIABLES LIKE '%innodb_max_undo_log_size%'; 查看 SHOW VARIABLES LIKE '%innodb_undo%'; 4.重做日志 作用 1.在遇到故障恢复中 可以修复未完成的事务修改的数据 2.mysql为了提高效率 对数据的更新会先写入内存 积累一定程度的时候再写入磁盘 这就带来一个问题 如果中途宕机 内存里的数据丢失 可通过重做日志进行磁盘读写操作 查看 SHOW VARIABLES LIKE '%innodb_log_files_in_group%'; 可以发现value是2 说明 前两个是用户表的创建和更新操作 如果为4说明用到了临时表 总结 二进制日志如果数据量大 起止位置不好掌控 到那个时候不如直接用主从结构

    作者回复: 好的

    2022-02-14
  • 水哥
    现在参数不是--end-position了,是stop-position

    作者回复: 十分感谢你的提醒,这个地方我疏忽了,确实应该是--stop-position,我已经请后台加以改正。

    2021-11-10
  • 学无涯
    请问老师: 用binlog恢复数据时,起始位置可以通过在数据备份时记录日志位置找到,但是截止位置如何找到呢?只能人工查看binlog记录一条条找吗。 很多情况下,误删数据后过了好久才发现,这时binlog很多,甚至有的已经超过max_binlog_size切换了binlog文件,这样的该如何找呢。

    作者回复: 需要事先考虑到这些问题,并加以避免。比如定时备份日志文件。

    2021-10-27
    2
  • 格局
    多个数据库的情况下,可以为每个数据库单独弄一份日志吗

    作者回复: 系统日志,是面向所有数据库的。可以对日志进行筛选,找到相关数据库的部分。

    2021-08-18
  • 格局
    我这里刷新日志flush binary logs 语句报错。 但可以使用flush logs,来刷新

    作者回复: 可能是你MySQL系统的问题,可以考虑重新安装MySQL试一下

    2021-08-18
  • Geek_648c53
    说个坑,一定不要在win powershell或者win终端上面执行备份和恢复,要在 cmd 里面执行(在cmd中执行备份及恢复),不然执行恢复命令的时候会总是报错😂
    2022-12-28归属地:广东
  • 玉琴
    老师,数据库一直在用, 1 如果使用mysqldump备份数据库,会不会有部分缓存操作没有备份到呢? 2 我们再通过FLUSH BINARY LOGS,刷新日志,会不会还是有部分操作没写入到binlog中呢?
    2022-10-04归属地:江西
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部