Mysql数据丢失分析与数据恢复

本文详细介绍了如何通过MySQL的日志系统,尤其是二进制日志,来分析和定位数据丢失的原因。首先,检查二进制日志的状态和文件列表,然后使用`show binlog events`和`mysqlbinlog`命令查看日志内容,以确定导致数据丢失的操作。最后,通过`mysqlbinlog`命令恢复数据,提供了一种有效的方法来排查和解决MySQL数据库的数据丢失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql数据丢失分析

1.通过日志查找丢失原因

1.1.查看二进制日志文件

# 查看二进制日志是否打开及日志路径
show variables like 'log_bin%';
# 名词解释
log_bin 二进制日志是否开启状态
log_bin_basename 二进制日志路径

+---------------------------------+-----------------------------------+
| Variable_name                   | Value                             |
+---------------------------------+-----------------------------------+
| log_bin                         | ON                                |
| log_bin_basename                | /data/mysqldb/log/mysql-bin       |
| log_bin_index                   | /data/mysqldb/log/mysql-bin.index |
| log_bin_trust_function_creators | OFF                               |
| log_bin_use_v1_row_events       | OFF                               |
+---------------------------------+-----------------------------------+


# 查看二进制日志文件列表
show binary logs;

+-----------------+-----------+
| Log_name        | File_size |
+-----------------+-----------+
| binlog.000001   |       409 |
| binlog.000002   |       363 |
+-----------------+-----------+

1.2.查看二进制日志文件内容

mysql二进制日志内容可通过mysql自带的binlogmysqlbinlog命令查看,下面介绍下查看日志的具体操作。

1.binlog查看二进制日志内容

binlog查看Mysql二进制日志优点就是操作简单方便,可以直接SQL语句查询日志内容。缺点是不显示sql执行的日期,如果需要定位sql执行的日期就需要用到mysqlbinlog命令。

【最简单的查询日志语法】

show binlog events IN 'binlog.000002';

- binlog.000002:二进制日志文件名称

# 查询结果
mysql> show binlog events;
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| binlog.000002    |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.27-log, Binlog ver: 4 |
| binlog.000002    | 123 | Previous_gtids |         1 |         154 |                                       |
| binlog.000002    | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| binlog.000002    | 219 | Query          |         1 |         291 | BEGIN                                 |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
- Info:操作数据库的sql语句

【完整的查询日志语法】

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

- IN ‘log_name’:指定要查询的binlog文件名(如果省略此参数,则默认指定第一个binlog文件);
- FROM pos:指定从哪个pos起始点开始查起(如果省略此参数,则从整个文件的第一个pos点开始算);
- LIMIToffset】:偏移量(默认为0);
- row_count:查询总条数(如果省略,则显示所有行)。
2.mysqlbinlog查看二进制日志内容

mysqlbinlog查看日志的优点可以将二进制日志文件重定向为sql格式文件,并下载到本机进行查看,同时显示sql执行日期方便根据日期来定位sql进行分析和恢复数据操作。

mysqlbinlog命令是Mysql自带的一个linux命令,注意它不是sql语句命令因此在sql窗口执行是无法识别的。

在linux上进入mysql二进制日志文件目录,然后在执行下面的命令

【查看二进制日志内容】

mysqlbinlog --no-defaults binlog.000002

【二进制日志下载并重定向为sql文件】

上面查看日志是在linux环境查看,如果日志内容很多查看起来不是很方便,可以将日志下载到本地查看。并将它转为sql文件,可以直接打开查看其内容。

# 查看日志时如果报错 mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'
# 加上--no-defaults参数
mysqlbinlog --no-defaults binlog.000002 > ./binlog02.sql

2.数据恢复

登录mysql所在的服务器,进入mysql二进制文件目录,然后执行下面的命令恢复数据。

mysqlbinlog --no-defaults binlog.000002 |mysql -uqalight -p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值