MySQL基于binlog进行数据还原

关于binlog

MySQL的二进制binlog对于生产环境非常重要,几乎所有的DDL以及DML操作都会记录在binlog中。在实际运用中,binlog功能需要通过log_bin参数开启。通过语句show variables like 'log_bin';可以查看是否开启:

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

使用场景

对于MySQL的binlog功能,主要用于两种场合,一种是主从复制,另外一种是数据恢复。

查看binlog文件

通过show binary logs;命令可以查看MySQL服务器上的binlog文件:

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000011 |       120 |
| mysql-bin.000012 |       120 |
+------------------+-----------+

像上面的例子中,表示服务器上有mysql-bin.000011以及mysql-bin.000012两个binlog文件。

提取SQL

对于binlog文件,可以通过mysqlbinlog工具将其提取为可读的sql文件,提取时可以添加时间参数。

  • start-datetime :指定提取时的开始时间戳;
  • stop-datetime :指定提取时的结束时间戳,不指定则表示到当前时间为止。
mysqlbinlog --start-datetime="2021-11-01 00:00:00" --stop-datetime="2021-11-29:08:00:00" ..\data\mysql-bin.000012 > D:\\sql_20211129.sql

除了start-datetime以及stop-datetime参数,另外可以通过start-positionstop-datetime参数来指定开始以及结束位置。

  • start-datetime :从binlog日志中相对于第一个位置偏移n个位置开始读;
  • end-datetime :从binlog日志中相对于第一个位置截止到第n个位置为止。

还原数据

按照上面的操作,通过mysqlbinlog命令,将binlog提取成sql文件,再通过sql文件还原即可。

mysql -u root -p -e "source D:/sql_20211129.sql" 

不过在生产环境中,通过开始时间戳和结束时间提取出SQL文件时,通常会时间比较慢。实际的做法是可以通过mysqldumpbinlog相结合的方式进行还原数据。

后记

其实数据还原,在实际生产环境中也是不得已而进行的下下策,如果有条件,还是需要规范操作,避免数据误操作导致的各种成本。

扩展阅读:
https://blog.csdn.net/m0_58016522/article/details/121669236

你可能感兴趣的:(MySQL,数据库,mysql)