Mysql数据丢失问题

Mysql数据丢失问题
binlog插入记录正常,没有回滚记录;查到两条删除记录但都不是丢失数据的记录。

Searching 1 file for "ROLLBACK"

0 matches

Searching 1 file for "DELETE FROM `dstore2.0`.`component_info`"

<untitled 23>:
 918753  # at 11081383
 918754  #230625  9:07:14 server id 1  end_log_pos 11081551 CRC32 0x1af3c342     Delete_rows: table id 139 flags: STMT_END_F
 918755: ### DELETE FROM `dstore2.0`.`component_info`
 918756  ### WHERE
 918757  ###   @1='ojFXE8ZOcSsZK57fYFuFz'
 .....
 918766  ###   @10='2023-06-25 09:07:02'
 918767  ###   @11='2023-06-25 09:07:02'
 918768: ### DELETE FROM `dstore2.0`.`component_info`
 918769  ### WHERE
 918770  ###   @1='ojFXE8ZOcSsZK57fYFuFz'

如何才能定位到数据是如何丢失的?

看看log有没有提示信息

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7663639
  • 这篇博客也不错, 你可以看下从Mysql主库binlog直接进行同步数据,有啥好处?
  • 同时,你还可以查看手册:MySQL 字符集、对齐方式、统一编码 二进制整理法与_bin整理法的比较 中的内容
  • 除此之外, 这篇博客: mysql利用二进制日志binlog恢复误删除操作中的 模拟数据误删除如何恢复 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 下面建一个mdc库里面建一张test表插入两条数据,如下图所示:

    然后备份mdc库的test表:

    mysqlData]# mysqldump -uroot -p'Qqmima917@' mdc test --single-transaction --master-data=1 --flush-logs > `date +%F`-mdc_test.sql;

    然后继续插入几条数据:

    insert into mdc.test values (3,'xiaomao'),(4,'lisi');

    然后删除整张表:

    drop table mdc.test;

     

    然后查看二进制日志,发现下面有三个二进制文件:

     

  • 以下回答由chatgpt基于相关博客总结生成:

    根据问题描述,发现数据丢失的记录既没有回滚记录,也没有对应的删除记录。这种情况下,可能是由于误操作或者其他服务的影响导致的数据丢失。针对这种情况,我们可以通过以下步骤来定位数据丢失问题:

    1. 确认数据库是否开启binlog模式,使用如下命令查看相关变量:
    show variables like '%log_bin%'
    

    如果第一个变量log_bin是ON,说明数据库开启了log_bin。在这种情况下,我们可以将历史操作数据恢复。

    1. 确认数据丢失的时间段,获取对应的binlog文件名。

    通过查询相关日志或者业务数据,确认数据丢失的时间段。然后查找对应的binlog文件名。可以使用如下命令:

    show binary logs;
    

    这个命令可以列出所有的binlog文件名及其对应的起始和结束时间。

    1. 使用mysqlbinlog命令查看对应时间段的binlog日志。

    找到对应时间段的binlog文件名后,使用mysqlbinlog命令查看对应的binlog日志。可以使用如下命令:

    mysqlbinlog --start-datetime='开始时间' --stop-datetime='结束时间' D:/Develop/Mysql/mysql-8.0.27-winx64/data/binlog.000067 > binlog.txt
    

    该命令会将对应时间段的binlog日志导出到文件binlog.txt中,方便后续查看。

    1. 分析binlog日志,查找数据丢失的记录。

    将导出的binlog日志打开,通过关键字搜索的方式,查找可能导致数据丢失的操作记录。可以根据业务特点,确定搜索关键字。例如,如果是新增数据的记录丢失,可以搜索insert或replace等关键字;如果是更新数据的记录丢失,可以搜索update关键字。

    1. 重现数据丢失的场景,确定造成数据丢失的原因。

    根据分析的binlog日志,尝试重现数据丢失的场景,确定造成数据丢失的原因。这个过程中,需要结合业务及其他服务的操作记录,找到可能对数据造成影响的操作或服务,并进行排查和分析。

    如果以上步骤无法定位数据丢失的问题,为了保障数据的安全,可以考虑在后续的运维工作中,增加数据备份及恢复方案,建立数据异常监控机制等预防措施。