MySql之MySqlBinLog工具

在mysql中自带一个日志工具可帮助使用者检查数据变动过程,可以透过这个工具来恢复因为误操作删除或更动的数据。

一、确定是否开启日志

数据库安装后默认不开启日志,这时此工具就没有任何作用。所以首先检查是否开启,使用mysql语句。

  1. 检查是否开启:SHOW VARIABLES LIKE 'log_bin'; 会返回一个 log_bin 的值,若是ON则是开启状态,若是OFF则是关闭状态。
  2. 开启logbin功能 修改数据库的配置文件,一般是 my.ini 或 my.cnf ,在其中加入下面配置项,重启服务后开启log功能。
    [mysqld]
    log-bin=mysql-bin //日志文件的名称
    server-id=1 
  3. 确定log的模式 一般默认为ROW模式,即行模式可以最大程度保留日志细节更利于使用者分析。 通过:SHOW VARIABLES LIKE 'binlog_format'; 查看目前模式,若不是ROW模式,则加入下面配置项到配置文件,重启服务后生效。
    [mysqld]
    binlog_format=ROW

二、使用MySqlBinLog工具

它是一个命令行工具所以我们需要在shell窗口使用它,若没有将它加入环境变量里可去数据库安装目录中bin目录找它。

  1. 查看日志文件保存位置:SHOW VARIABLES LIKE 'log_bin_basename'; 会返回一个目录,注意这里最后一层指的是上面我们配置的名称,所以定位在上一层就可以看到mysql-bin.00001等日志文件
  2. 查看当前使用的文件名:SHOW MASTER status; 该文件是一个二进制文件,不可以直接打开查看,所以需要下面命令解析
  3. 解析日志:mysqlbinlog [options] log-files
  4. 常用参数说明
    --base64-output=decode-rows:将日志文件中更多说明转换为明文显示,其实作用不大不使用也可以
    -d=XXX:(--database=XXX)指定只查看某个数据库的信息(注意缩写是一个减号全称是两个减号)
    -v:(--verbose)显示日志详细信息,若不使用它就无法看到sql语句
    --start-datetime="2024-01-11 00:00:00":指定一个范围的开始时间
    --stop-datetime="2024-01-11 23:00:00":指定一个范围的结束时间
    >XXX.sql:将输入保存至一个sql文件中
  5. 通过以上命令就可查看到所需日志,下面是一个完整例子 ./mysqlbinlog --start-datetime="2024-01-11 00:00:00" --stop-datetime="2024-01-11 23:00:00" -d=test -v /data/mysql-bin.000001 >db_test.sql 上面的含义是通过sqlbin工具将240111零点至240111晚23点保留在mysql-bin.000001中的test数据库的执行日志详细展开保存为当前目录下的db_test.sql文件中
  6. 日志格式 就记住一个 BINLOG 与一个 COMMIT 包裹的内容中有你需要的sql语句。

三、最后

我个人是不喜欢命令行工具的,操作很不方便且需要时常使用才会熟练(我想不会有人整天误删数据什么的吧)。所以一直在找一个可视化的解析binlog工具,可惜还没有找到。。。若有好用的可视化工具还希望推荐下。

By 雪峰

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注