不小心把生产数据库删了,要赶紧跑路吗???

一不小心把公司生产环境数据库给删了,而数据库备份只停留到昨天,要丢失一天的生产环境数据?需要赶紧收拾东西跑路吗?

壮士留步,你可以通过数据库历史备份+Binarylog恢复完整数据

mysql会把所有表结构变更以及表数据修改的操作记录到一个二进制日志文件中,也就是我们今天要说的Binarylog(二进制日志),简称binlog。binlog日志是以事件的形式记录对mysql的操作,还记录各个操作消耗的时间

接下来我们通过一个例子演示如何通过binlog恢复被删除的数据

我们新建一个数据库,然后插入一些数据:

mysql>create database shifou;

Query OK, 1 row affected (0.00 sec)

mysql>use shifou;

Database changed

新建orders表

mysql> create table orders(

    ->        id int auto_increment not null primary key,

    ->        goods_id int,

    ->        count int

    -> );

Query OK, 0 rows affected (0.01 sec)

往orders表中插入数据

mysql> insert into orders values (1, 10, 3);

Query OK, 1 row affected (0.00 sec)

mysql> insert into orders  values (2, 11, 8);

Query OK, 1 row affected (0.00 sec)

手一抖,把数据库给删了

mysql> drop database shifou ;

Query OK, 1 row affected (0.02 sec)

这个时候我们看到binlog日志文件里已经记录的有内容了

mysql> show master logs;

+---------------+-----------+-----------+

| Log_name      | File_size | Encrypted |

+---------------+-----------+-----------+

| binlog.000001 |      1234 | No        |

+---------------+-----------+-----------+

1 row in set (0.00 sec)

我们来看一下binlog 里边的具体内容,可以看到我们刚才对数据库的所有操作都以event的形式记录到了binlog中

mysql> show binlog events in 'binlog.000001';

+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Log_name      | Pos  | Event_type    | Server_id | End_log_pos | Info                                                                                                                                                              |

+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| binlog.000001 |    4 | Format_desc    |        1 |        125 | Server ver: 8.0.21, Binlog ver: 4                                                                                                                                |

| binlog.000001 |  125 | Previous_gtids |        1 |        156 |                                                                                                                                                                  |

| binlog.000001 |  156 | Anonymous_Gtid |        1 |        233 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                              |

| binlog.000001 |  233 | Query          |        1 |        347 | create database shifou /* xid=35 */                                                                                                                              |

| binlog.000001 |  347 | Anonymous_Gtid |        1 |        426 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                              |

| binlog.000001 |  426 | Query          |        1 |        652 | use `shifou`; create table orders(

       id int auto_increment not null primary key,

       goods_id int,

       count int

) /* xid=40 */                      |

| binlog.000001 |  652 | Anonymous_Gtid |        1 |        731 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                              |

| binlog.000001 |  731 | Query          |        1 |        808 | BEGIN                                                                                                                                                            |

| binlog.000001 |  808 | Table_map      |        1 |        864 | table_id: 121 (shifou.orders)                                                                                                                                    |

| binlog.000001 |  864 | Write_rows    |        1 |        912 | table_id: 121 flags: STMT_END_F                                                                                                                                  |

| binlog.000001 |  912 | Xid            |        1 |        943 | COMMIT /* xid=47 */                                                                                                                                              |

| binlog.000001 |  943 | Anonymous_Gtid |        1 |        1022 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                              |

| binlog.000001 | 1022 | Query          |        1 |        1099 | BEGIN                                                                                                                                                            |

| binlog.000001 | 1099 | Table_map      |        1 |        1155 | table_id: 121 (shifou.orders)                                                                                                                                    |

| binlog.000001 | 1155 | Write_rows    |        1 |        1203 | table_id: 121 flags: STMT_END_F                                                                                                                                  |

| binlog.000001 | 1203 | Xid            |        1 |        1234 | COMMIT /* xid=49 */                                                                                                                                              |

| binlog.000001 | 1234 | Anonymous_Gtid |        1 |        1311 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                              |

| binlog.000001 | 1311 | Query          |        1 |        1421 | drop database shifou /* xid=51 */                                                                                                                                |

+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+

18 rows in set (0.00 sec)

binlog 日志中的最后一个操作event就是我们执行删库的操作,所以我们在恢复数据的时候,要略过这个event。

mysqlbinlog 命令可以通过指定事件位置号来恢复具体的事件操作

接下来我们用mysqlbinlog命令来恢复被删除的数据库,从binlog文件中可以看出,刚开始的事件位置编号是4,删库前的事件位置编号是1234,所以我们恢复事件4-1234之间的数据操作:

$ mysqlbinlog --start-position=4 --stop-position=1234 /usr/local/var/mysql/binlog.000001 | mysql -uroot -p‌‌

执行成功之后我们再看下数据:

mysql> select * from orders;

+------------------+------------------------+---------------------+

|        id        |        goods_id        |        count        |

+------------------+------------------------+---------------------+

|                1 |                    10 |                  3 |

|                2 |                    11 |                  8 |

+------------------+------------------------+---------------------+

2 rows in set (0.00 sec)

good!被删除的数据库又回来了。

好了,不用着急跑路,继续安心的写代码吧

‌下篇文章中我们会详细介绍下binlog的更多用法和配置,以及binlog中event的实现原理‌

想要学习其他开发技术,可关注我微信公众号  全栈师否

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343