Myluzh Blog

mysql通过log_bin恢复数据

发布时间: 2023-12-27 文章作者: myluzh 分类名称: MySQL 朗读文章


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服务,使配置生效。

标签: mysql logbin 恢复 数据

发表评论