mysql通过log_bin恢复数据
0x01 使用binlog恢复数据
1、登录mysql
[root@blog ~]# mysql -u root -p
Enter password:
2、查看bin_log是否开启
log_bin=ON,那么恭喜你,还有恢复的可能。
mysql> show variables like 'log_%';
+----------------------------------------+----------------------------------+
| Variable_name | Value |
+----------------------------------------+----------------------------------+
| log_bin | ON |
| log_bin_basename | /www/server/data/mysql-bin |
| log_bin_index | /www/server/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | ./blog.err |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| log_throttle_queries_not_using_indexes | 0 |
| log_warnings | 1 |
+----------------------------------------+----------------------------------+
3、查看二进制日志文件名
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000008 | 1654277 |
| mysql-bin.000009 | 3339375 |
+------------------+-----------+
2 rows in set (0.00 sec)
4、使用mysqlbinlog工具,解析日志
(1)如果mysqlbinlog不在环境变量,可以搜索出来加入环境变量
# 如果已经安装了MySQL,尝试找到mysqlbinlog工具的确切位置
[root@blog ~]# find / -name mysqlbinlog 2>/dev/null
/www/server/mysql/bin/mysqlbinlog
# 把mysqlbinlog的父路径加入环境变量
export PATH=$PATH:/www/server/mysql/bin
(2)解析日志,基本语法如下:
mysqlbinlog [options] log_file ...
# log_file 是您要解析的 binlog 文件的路径。
# [options] 是一些可选参数,如 --start-datetime、--stop-datetime、--start-position 和 --stop-position,它们可以帮助您指定要解析的日志范围。
mysqlbinlog --start-datetime="YYYY-MM-DD hh:mm:ss" --stop-datetime="YYYY-MM-DD hh:mm:ss" /path/to/binlog-file > output.sql
(3)我这里binlog位于/www/server/data/,最新的为000009
[root@blog data]# pwd
/www/server/data
[root@blog data]# ls -alh | grep mysql-bin
-rw-rw---- 1 mysql mysql 1.6M 11月 29 14:24 mysql-bin.000008
-rw-rw---- 1 mysql mysql 3.3M 12月 27 20:15 mysql-bin.000009
-rw-rw---- 1 mysql mysql 38 11月 29 14:24 mysql-bin.index
(4)尝试恢复:
[root@blog data]# mysqlbinlog --start-datetime="2023-12-27 12:00:00" --stop-datetime="2023-12-27 17:00:00" mysql-bin.000009 > output.sql
0x02 配置MySQL的binlog
打开MySQL配置文件(通常是my.cnf或my.ini),找到[mysqld]部分。
在[mysqld]部分下添加以下配置,以启用binlog并设置相关参数:
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=row
expire_logs_days=10
max_binlog_size=100M
server-id:唯一标识MySQL服务器的ID,用于主从复制等场景。
log_bin:启用binlog,并设置日志前缀为"mysql-bin"。
binlog_format:设置binlog格式为行级(row),可以记录更详细的更改信息。
expire_logs_days:设置binlog过期时间为10天,可以根据需求进行调整。
max_binlog_size:设置每个binlog文件的最大大小为100MB,可以根据磁盘空间进行调整。
保存配置文件并重启MySQL服务,使配置生效。