偶然的机会朋友说他部门的数据库误删了,想恢复回来,他百度了一些资料,也跟着试了。但发现会报一些错,于是他就找我帮忙看一下。对于我来说,因为公司的数据库都是DBA在管控,平时都没机会操作,基本上都停留在理论上。
Binlog 日志,全称为 Binary Log,是 MySQL 在 Server 层产生的一种日志。这种日志包含了对数据库执行变更的所有操作(例如 SQL 语句的执行)或者对于数据库的数据变更情况,记录了实例的所有 DML 和 DDL 操作。
维护mysql的时候,总会遇到数据库恢复的例子。如果把备份集恢复出来相对比较简单。然而如果遇到恢复到时间点的例子,把一个MySQL实例恢复出来之后,需要执行binlog做增量恢复。 常见的办法是用mysqlbinlog解析binlog,将解析出来的内容重定向到mysql命令行执行。在MySQL手册中也是推荐使用mysqlbinlog工具来实现指定时间点的数据恢复。事实上,这是一个经常“让人郁闷”的办法。更好的办法是,使用MySQL内部复制线程中的SQL Thread来做恢复。
我们常常听人说,只要你愿意,MySQL 可以恢复至半个月甚至一个月以内的任何一个状态。网上也有很多删库跑路的段子。。。
糖豆贴心提醒,本文阅读时间5分钟 血的教训,事发经过就不详述了。直接上操作步骤及恢复思路(友情提示:数据库的任何操作都要提前做好备份),以下是Mysql数据后的恢复过程: 1. 找到binlog 恢复数据的前提是必须开启Mysql的binlog日志,如果binlog日志没开启,请忽略此篇文档。binlog日志是否开启可以查看Mysql配置文件。日志位置一般在/var/lib/mysql目录或者编译安装的date目录下。也可登录Mysql用命令查看。 # cat /etc/my.cnflog_bin
前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢复线上数据必然对应用带来一定的影响。大多数情况是开发误操作delete数据,update多数行,根据之前的操作经验,本文介绍常用的恢复方法。
在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。
在前一阵子,大哥问过我:”你知道MySQL的原子性是怎么保证的吗“。我懵逼了,MySQL怎么保证原子性?我不会啊。
删库跑路的案例不在少数,今年最出名的删库跑路当属微盟,造成公司市值蒸发几十亿,赔偿商家1.5亿元,最终在腾讯云的协助下经过7*24小时的不懈努力,最终找回全部数据。我们都知道,数据就是一个公司的“命根子”,无论什么时候,数据安全都是最重要的。所以我们今天来聊聊数据恢复的几种方式。以mysql为例。
MySQL 的二进制日志(Binary Log),通常简称为 binlog,是一种记录数据库中发生的更改的日志文件。它记录了对数据库进行的 INSERT、UPDATE 和 DELETE 等数据更改操作,以及数据库结构的更改(例如,ALTER TABLE)。这些日志文件对于数据恢复、数据复制和数据库的高可用性非常重要。以下是关于 MySQL binlog 的详细介绍:
这篇文章是从Github ReadMe拷贝的,内容实践下载是没问题的,能够正常发送短信,而且也不需要服务器,本地也能跑起来
在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份。而Linux的crontab指令则可以帮助我们实现对数据库定时进行备份。首先我们来简单了解crontab指令,如果你会了请跳到下一个内容mysql备份。 本文章的mysql数据库是安装在docker容器当中,以此为例进行讲解。没有安装到docker容器当中也可以参照参照。
操作系统:CentOS 7.7 MySQL版本:5.7.30,搭建主从 开启binlog,binlog_format=row 备份情况:每天00:00对数据库进行全量备份 恢复原因:某日22:00左右,执行了批量update语句,需要回滚
对于任何一个企业来说,数据安全的重要性是不言而喻的。我在开篇词中也曾经强调过,凡是涉及到数据的问题,都是损失惨重的大问题。
在 MySQL架构(二)SQL 更新语句是如何执行的?中说到了 redo log 和 binlog 日志文件,在事务执行过程中,会分两个阶段写入这两份日志文件中,这也是为了保证两份日志之间的一致性,即维护 mysql 的数据一致性。
关于这种方式的更多内容,可以参考: https://dev.mysql.com/doc/refman/5.7/en/point-in-time-recovery.html
重点文档:https://github.com/danfengcao/binlog2sql
最近在极客时间看丁奇大佬的《MySQL45讲》,真心觉得讲的不错,把其中获得的一些MySQL方向的经验整理整理分享给大家,有兴趣同学可以购买相关课程进行学习。
注意: –>binlog是二进制文件,普通文件查看器cat、more、vim等都无法打开,必须使用自带的mysqlbinlog命令查看 –>binlog日志与数据库文件在同目录中 –>在MySQL5.5以下版本使用mysqlbinlog命令时如果报错,就加上 “–no-defaults”选项
数据库恢复的先决条件是,定时备份数据库,缩小binlog恢复范围.首先我们备份测试数据库数据:
作为小站长,mysql数据库算是比较常用的了。作为运维,肯定遇到过数据被误删的情况。下面模拟数据库为误操作删除后的恢复过程。
数据是当今Web,移动,社交,企业和云应用程序的流行货币。确保数据始终可用是任何组织的头等大事。几分钟的停机时间可能会导致收入和声誉严重损失。
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
原文地址:http://blog.itpub.net/29773961/viewspace-2143726/
MySQL的二进制日志(binary log),通常被称为binlog,是MySQL数据库中的一种日志文件,它记录了所有的DDL(Data Definition Language)和DML(Data Manipulation Language)语句事件,这些语句会导致MySQL数据的改变。binlog是MySQL复制的基础,也是进行数据恢复的重要手段。
1. 什么是两阶段提交 1.1 binlog 与 redolog 1.2 两阶段提交 2. 为什么需要两阶段提交 3. 小结 为什么要两阶段提交?一阶段提交不行吗? 小伙伴们知道,MySQL 中的事务是两阶段提交,我们见到的很多分布式事务也都是两阶段提交的,例如 Seata,那么为什么要两阶段提交呢?一次直接提交了不行吗?今天我们来聊聊这个话题。 关于分布式事务 seata,不懂的小伙伴可以参考松哥之前的文章,传送门: 五分钟带你体验一把分布式事务!so easy! 看了那么多博客,还是不懂 TCC,不妨看
通过 bin 下面的 mysqlbinlog 工具来看法 binlog 文件,可以看到都记录了什么。
爱可生数据库工程师,负责 MySQL 日常维护及 DMP 产品支持。擅长mysql故障处理。
删库跑路也是个老梗了,可见在运维数据库的过程中误删除数据,或者开发的代码有bug,造成数据的误删除屡见不鲜。不过现在也有许多用于恢复或预防误删除的方案,例如SQL管理系统,将要执行的SQL先交由管理员审核,然后由管理员备份一个镜像数据库,在镜像上执行该SQL,并在执行后还原镜像。这样经过层层把关就可以大大减小出现误操作的几率。
之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?
MySQL闪回(flashback)利用binlog直接进行回滚,能快速恢复且不用停机。
MySQL 备份一般采取全库备份加日志备份的方式,例如每天执行一次全备份,每小时执行一次二进制日志备份。这样在 MySQL 故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间。
当时想了一下,因为博主没有遇到过这个问题,但是也多少了解一些,所以就回答通过mysql的binlog日志进行恢复。
当前xtrabackup的8.0.13已经支持 mysql 8.0.20版本(8.0.20版本对innodb的数据文件模式进行了修改)
MySQL 5.6.14 生产环境凌晨3点的备份,不完全恢复到中午12点. (xtrabackup_binlog_pos_innodb的内容是mysql-bin.006946 3784607) 第一种方式:mysqlbinlog 1.找到需要恢复的binlog 进入binlog目录,执行 ll | awk '{print $9}' > /tmp/binlog.index
MySQL日志是在MySQL server上生成的,不管更改哪个存储引擎,这些日志都是需要有的,包括:
很多年前,被公司外派到一家单位驻场开发一个OA项目,两个开发对接各部门的需求,需求还要及时生效(一边开发一边使用)。
谁也不能保证计算机系统能够永远无故障的执行下去。网络波动、磁盘损坏等现网高频故障,机房掉电、服务器硬件失效等低频却又致命的故障,时刻考验着我们的系统。
在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办?
还是先在粉板上记一下方便。如果掌柜没有粉板,每次记账都翻账本,效率是不是低死啦? MySQL也有这个问题,若每次更新操作都写进磁盘,然后磁盘也要找到对应记录,然后再更新,整个过程IO成本、搜索成本都很高。 何解?采用类似酒掌柜粉板的思路。
Undo Log(回滚日志)是MySQL中的一种重要数据结构,用于实现事务的ACID特性中的"Atomicity"(原子性)和"Isolation"(隔离性)。
大家有没有想过为什么MySQL数据库可以实现主从复制,实现持久化,实现回滚的呢?其实关键在于MySQL里的三种log,分别是:
开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文,你能够了解到:
reverse_sql工具是一个用于数据库恢复的工具,它支持MySQL 5.7/8.0和MariaDB数据库。该工具可以帮助您在发生P0事故(最紧急的事故等级)时快速恢复数据,避免进一步的损失。
前两天因为没注意的误操作, 直接把某个数据表清掉了, 心慌慌. 怪自己学艺不精, 当时整了一下午也没把数据找回来. 当晚回来闭关研究, 终于在凌晨1点多整出来了, 特此记录, 以备不时之需.
Binlog日志,即二进制日志文件,用于记录用户对数据库操作的SQL语句信息,当发生数据误删除的时候我们可以通过binlog日志来还原已经删除的数据,还原数据的方法分为传统二进制文件还原数据和基于GTID的二进制文件还原数据
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
我在第 2 篇文章《MySQL实战第二讲 - 一条SQL更新语句是如何执行的?》中,和你讲到 binlog(归档日志)和 redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致 MySQL 出现主备数据不一致等问题。
点击关注公众号,Java干货及时送达 作者:程淇铭 来源:segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖、写错条件、写错表名、错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA。 相关文章 MySQL备份策略:https://segmentfault.com/a/1190000019955399 MySQL数据恢复:https://segmentfault.com/a/1190000020116271 1 前言 数据恢
领取专属 10元无门槛券
手把手带您无忧上云