MySQL数据库:基于二进制日志的数据恢复实战

发布时间 - 2025-06-20 00:00:00    点击率:

在日常数据库运维中,数据意外丢失是令人头疼的问题。然而,mysql的二进制日志(binary log)就像一个“时光机器”,记录着数据库的所有变更,使我们能够将数据库恢复到任意时间点。本文将通过一个实际案例,详细介绍如何利用二进制日志进行数据恢复。

  1. 启用二进制日志文件

要使用二进制日志功能,首先需要在MySQL配置文件中启用它:

# 1. 修改MySQL配置文件
vim /etc/my.cnf

在[mysqld]部分添加以下内容

[mysqld] log-bin=/usr/local/mysql/data/mysql-bin server-id=1 binlog_format=MIXED

2. 重启MySQL服务

systemctl restart mysqld

  1. 实战案例:数据库操作与恢复

2.1 初始数据状态

我们的测试表中初始包含三条记录:

mysql> select * from test.person;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | San  |   19 |
|    2 | mike |   23 |
|    3 | li   |   20 |
+------+------+------+

以下操作不会记录在二进制日志文件中,因为它们是原有的数据操作。

2.2 数据变更操作

接下来我们执行了一系列操作:

  • 插入了一条新记录(wang)
  • 更新了mike的年龄
  • 删除了id为3的记录

执行这些操作后,数据状态如下:

mysql> insert into test.person values(4,'wang',10);
Query OK, 1 row affected (0.00 sec)

mysql> update test.person set age = 66 where name='mike'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

mysql> delete from test.person where id = 3; Query OK, 1 row affected (0.01 sec)

这是数据更改后的操作

mysql> select * from test.person ; +------+------+------+ | id | name | age | +------+------+------+ | 1 | San | 19 | | 2 | mike | 66 | | 4 | wang | 10 | +------+------+------+ 3 rows in set (0.00 sec)

查看二进制文件:

-- 查看二进制日志文件列表
mysql> SHOW BINARY LOGS;

-- 查看当前正在写入的二进制日志文件 mysql> SHOW MASTER STATUS;

-- 查看二进制日志事件 mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001';

2.3 数据丢失模拟与恢复

假设发生了意外,所有数据被删除:

mysql> delete from test.person;
Query OK, 3 rows affected (0.00 sec)

mysql> select * from test.person; Empty set (0.00 sec)

2.4 恢复数据

这时,我们可以使用二进制日志来恢复数据。我们需要恢复到插入id=4,name=wang的数据之前的状态,包括它:

mysqlbinlog --stop-position="2435" /usr/local/mysql/data/mysql-bin.000001 | mysql -u root -p

数据恢复成功。


# mysql  # 数据丢失  # 数据库  # 配置文件  # 数据恢复  # 这是  # 就像  # 详细介绍  # 使我  # 可以使用  # 文件列表  # 重启  # 三条 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  网站制作壁纸教程视频,电脑壁纸网站?  Python结构化数据采集_字段抽取解析【教程】  JavaScript如何实现倒计时_时间函数如何精确控制  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  微信公众帐号开发教程之图文消息全攻略  jquery插件bootstrapValidator表单验证详解  青岛网站建设如何选择本地服务器?  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  网站制作免费,什么网站能看正片电影?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  三星网站视频制作教程下载,三星w23网页如何全屏?  EditPlus中的正则表达式实战(6)  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何在阿里云虚拟主机上快速搭建个人网站?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何用低价快速搭建高质量网站?  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Linux系统运维自动化项目教程_Ansible批量管理实战  如何在企业微信快速生成手机电脑官网?  Android GridView 滑动条设置一直显示状态(推荐)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  香港服务器选型指南:免备案配置与高效建站方案解析  ,网页ppt怎么弄成自己的ppt?  iOS正则表达式验证手机号、邮箱、身份证号等  Windows Hello人脸识别突然无法使用  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  MySQL查询结果复制到新表的方法(更新、插入)  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  如何用美橙互联一键搭建多站合一网站?  如何用虚拟主机快速搭建网站?详细步骤解析  如何在搬瓦工VPS快速搭建网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?