关于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-position
和stop-datetime
参数来指定开始以及结束位置。
- start-datetime :从binlog日志中相对于第一个位置偏移n个位置开始读;
- end-datetime :从binlog日志中相对于第一个位置截止到第n个位置为止。
还原数据
按照上面的操作,通过mysqlbinlog
命令,将binlog提取成sql文件,再通过sql文件还原即可。
mysql -u root -p -e "source D:/sql_20211129.sql"
不过在生产环境中,通过开始时间戳和结束时间提取出SQL文件时,通常会时间比较慢。实际的做法是可以通过mysqldump
和binlog
相结合的方式进行还原数据。
后记
其实数据还原,在实际生产环境中也是不得已而进行的下下策,如果有条件,还是需要规范操作,避免数据误操作导致的各种成本。
扩展阅读:
https://blog.csdn.net/m0_58016522/article/details/121669236