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如何使用.env文件管理环境变量?(最佳实践)  网站制作壁纸教程视频,电脑壁纸网站?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Bootstrap整体框架之JavaScript插件架构  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Python文本处理实践_日志清洗解析【指导】  高防服务器租用指南:配置选择与快速部署攻略  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何在IIS中新建站点并配置端口与物理路径?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何配置任务调度?(Cron Job示例)  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在云主机上快速搭建网站?  SQL查询语句优化的实用方法总结  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  南京网站制作费用,南京远驱官方网站?  JS碰撞运动实现方法详解  实例解析angularjs的filter过滤器  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何用AI帮你把自己的生活经历写成一个有趣的故事?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel如何使用查询构建器?(Query Builder高级用法)  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  如何在腾讯云免费申请建站?  jQuery validate插件功能与用法详解  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何用花生壳三步快速搭建专属网站?  制作旅游网站html,怎样注册旅游网站?  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何快速查询域名建站关键信息?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  JavaScript如何实现路由_前端路由原理是什么  公司门户网站制作流程,华为官网怎么做?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  详解Android中Activity的四大启动模式实验简述  如何快速搭建高效可靠的建站解决方案?