首页 > 数据库 >MySQL bin-log日志恢复数据

MySQL bin-log日志恢复数据

时间:2024-06-10 18:29:32浏览次数:27  
标签:bin bin.000001 log 二进制 mysql -- MySQL 日志 mysqlbinlog

目录

一、开启二进制日志

二、检查二进制日志是否开启

三、使用二进制日志备份和恢复

使用二进制日志备份恢复前先创建备份:

应用二进制日志:

扩展用法:

四、常见命令和操作

五. 使用 mysqlbinlog 工具查看二进制日志

1. 查看二进制日志的内容

2. 解码二进制日志并将内容保存到文件

3. 查看特定时间范围内的日志

4. 查看特定位置范围内的日志

5. 查看所有二进制日志文件的内容

6. 只查看头部信息

7. 使用过滤条件查看特定表的日志


在 MySQL 中,二进制日志(Binary Log, bin-log)是用于记录所有更改数据库数据的 SQL 语句的日志文件。开启和管理二进制日志可以用于数据恢复、主从复制等场景。默认是关闭的。

一、开启二进制日志

编辑MySQL配置文件(/etc/my.cnf):
在 [mysqld] 部分添加以下行:

log-bin=mysql-bin
binlog-format=ROW
server-id=1
  • log-bin:指定二进制日志文件的名称(这里是 mysql-bin)。
  • binlog-format:设置二进制日志记录的格式(ROW 是推荐的格式)。
  • server-id:服务器唯一标识符(用于主从复制)。

重启MySQL服务
使更改生效,重启MySQL服务:

systemctl restart mysqld

二、检查二进制日志是否开启

登录MySQL

   mysql -u root -p[密码]

检查二进制日志状态

SHOW VARIABLES LIKE 'log_bin';
SHOW BINARY LOGS;
  • 通过 SHOW VARIABLES LIKE 'log_bin'; 验证 log_bin 是否为 ON
  • 通过 SHOW BINARY LOGS; 检查现有的二进制日志文件。

 

三、使用二进制日志备份和恢复

使用二进制日志备份恢复前先创建备份


在定期备份数据时,创建物理导出(如 mysqldump)并记录此时的二进制日志位置。

mysqldump -u root -p[密码] --all-databases --single-transaction --flush-logs --master-data=2 > backup.sql
  • --single-transaction:在一个事务中执行,确保一致性。
  • --flush-logs:刷新日志文件,开始新的二进制日志。
  • --master-data=2:在导出文件中注释的形式记录二进制日志的文件名和位置。

应用二进制日志


假设从基于时间点(时间戳)恢复,不限定于某个特定的库或表:

mysqlbinlog --start-datetime="2024-06-10 10:00:00" --stop-datetime="2024-06-10 12:00:00" mysql-bin.000001 | mysql -u root -p

或者基于位置点恢复,不限定于某个特定的库或表:

mysqlbinlog --start-position=107 --stop-position=2345 mysql-bin.000001 | mysql -u root -p

注:也可以在上面命令末尾加上一个库名,表示这些数据要在指定的库中执行

扩展用法:

指定库的操作

直接指定库在 MySQL 中解析和应用二进制日志时,可以使用 --database 选项:

mysqlbinlog --start-datetime="2024-06-10 10:00:00" --stop-datetime="2024-06-10 12:00:00" --database=your_database mysql-bin.000001 | mysql -u root -p
 

在这条命令中,--database=your_database 确保只有与 your_database 数据库相关的 SQL 语句被解析和执行。

针对特定库或表解析日志

例如,假设只关心 test_db 数据库中的操作,将想要的生成sql语句文件

mysqlbinlog --start-position=107 --stop-position=2345 mysql-bin.000001 | grep 'use `test_db`\|table_name' > filtered-log.sql

然后应用筛选后的 SQL 日志 

mysql -u root -p[密码] < filtered-log.sql

 

四、常见命令和操作

列出所有二进制日志文件

SHOW BINARY LOGS;

查看当前二进制日志文件和位置

SHOW MASTER STATUS;

清理旧的二进制日志

假设想删除前30天的二进制日志:

PURGE BINARY LOGS BEFORE DATE_SUB( NOW(), INTERVAL 30 DAY);

或者删除所有:

PURGE BINARY LOGS TO 'mysql-bin.010';

五. 使用 mysqlbinlog 工具查看二进制日志

1. 查看二进制日志的内容
mysqlbinlog mysql-bin.000001

这个命令会将 mysql-bin.000001 文件的内容输出到控制台,内容为可读的 SQL 语句。

2. 解码二进制日志并将内容保存到文件
mysqlbinlog mysql-bin.000001 > decoded-binlog.sql

这个命令会将 mysql-bin.000001 文件的内容解码,并将结果保存到 decoded-binlog.sql 文件中。

3. 查看特定时间范围内的日志
mysqlbinlog --start-datetime="2024-06-10 10:00:00" --stop-datetime="2024-06-10 12:00:00" mysql-bin.000001

这个命令会输出指定时间范围内的二进制日志内容。

4. 查看特定位置范围内的日志
mysqlbinlog --start-position=107 --stop-position=2345 mysql-bin.000001

这个命令会输出指定位置范围内的二进制日志内容。

5. 查看所有二进制日志文件的内容

如果有多个二进制日志文件,可以使用以下命令查看所有二进制日志文件的内容:

mysqlbinlog mysql-bin.000001 mysql-bin.000002 mysql-bin.000003

或者更方便的方法:

mysqlbinlog mysql-bin.0000*

6. 只查看头部信息

有时您可能只需要查看二进制日志文件的头部信息,可以使用 --base64-output=DECODE-ROWS -vv 选项。

mysqlbinlog --base64-output=DECODE-ROWS -vv mysql-bin.000001

7. 使用过滤条件查看特定表的日志

使用 mysqlbinlog 结合 grep 来筛选特定表的日志内容:

mysqlbinlog mysql-bin.000001 | grep -i "table_name"

标签:bin,bin.000001,log,二进制,mysql,--,MySQL,日志,mysqlbinlog
From: https://blog.csdn.net/Lzcsfg/article/details/139579806

相关文章

  • Kafka源码分析(十九)——Broker:日志子系统——Log
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • Keil中编译生成bin文件的方法
    Keil中编译生成bin文件的方法  本人在学习中需要将程序编译后生成bin文件,再通过XModem与单片机传输,故以本文记录一下keil中编译生成bin文件的方法。  如下图所示,打开keil中的魔术棒并按顺序进行以下配置,UserCommand中需要填写的指令也已经放在了下方:fromelf--bin......
  • 如何提高MySQL DELETE 速度
    提高MySQL中DELETE操作的速度通常涉及多个方面,包括优化查询、索引、表结构、硬件和配置等。以下是一些建议,以及一些示例代码,用于帮助我们提高DELETE操作的速度。1.提高MySQLDELETE速度的方法1.1优化查询只删除必要的行:确保我们的WHERE子句是高效的,并且只选择需要删除的行。......
  • 如何提高MySQL DELETE 速度
    提高MySQL中DELETE操作的速度通常涉及多个方面,包括优化查询、索引、表结构、硬件和配置等。以下是一些建议,以及一些示例代码,用于帮助我们提高DELETE操作的速度。1.提高MySQLDELETE速度的方法1.1优化查询只删除必要的行:确保我们的WHERE子句是高效的,并且只选择需要删除的......
  • MySQL分页查询offset过大,Sql优化经验
    低性能版SELECT*FROMtablewherecondition1=0andcondition2=0andcondition3=-1andcondition4=-1orderbyidascLIMIT2000OFFSET50000当offset特别大时,这条语句的执行效率会明显减低,而且效率是随着offset的增大而降低的。原因为:MySQL并不是跳过offset......
  • C语言 & 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】
      博客主页:花果山~程序猿-CSDN博客文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!目录一.配置开发环境 二,接口介绍1.mysql_init2.mysql_real_connect3.mysql_query4.对select结果分析......
  • MySQL 存储函数及调用
    1.mysql存储函数及调用在MySQL中,存储函数(StoredFunction)是一种在数据库中定义的特殊类型的函数,它可以从一个或多个参数返回一个值。存储函数在数据库层面上封装了复杂的SQL逻辑,使得在应用程序中调用时更加简单和高效。下面是一个具体的MySQL存储函数的示例,该函数接受一个整数......
  • Zgo - custom_log.go
     packagemainimport("fmt""io""log""os""path")funcmain(){flag:=os.O_APPEND|os.O_CREATE|os.O_WRONLYlogFile:=path.Join(os.TempDir(),"mGo.log")......
  • MySQL逻辑备份
    目录一.mysqldump基本命令:常用选项:示例备份整个数据库 备份多个数据库 备份所有数据库 仅备份数据库结构仅备份特定表添加选项以有效处理锁表问题恢复数据库从逻辑备份文件恢复注意事项二. mysqlpumpmysqlpump 特点基本命令:常用选项:示例备份单个数据库......
  • 1900springboot VUE 生态菜园管理系统开发mysql数据库web结构java编程计算机网页源码m
    一、源码特点 springbootVUE生态菜园管理系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术vue 后端主......