关于 MySQL 容器内部数据消失的总结

问题描述

在使用云服务器部署 MySQL 容器时,我遇到了一些奇怪的问题。每隔一段时间,我发现容器中的数据会消失,显示为 RECOVER_YOUR_DATA,原本存储在数据库中的数据就没有了。这让我非常困扰,最终通过排查找到了问题的根源。

图片1

权限问题

经过一些调查,我发现容器内的权限设置有问题。我修改了权限,并发现 999 是 MySQL 用户的权限,问题似乎得到了缓解。不过,这并不是唯一的问题根源。


Spring Boot 启动问题

我也注意到,在 Spring Boot 启动后,容器中的 MySQL 数据库经常无法连接。经过进一步排查,我猜测问题出在 Spring Boot 启动过快,导致 MySQL 没有完全初始化好,就开始连接。这可能是容器内部数据丢失的原因之一。

图片1

未解之谜

这个问题的根源至今没有完全弄清楚。有时,重新登录到 VSCode 后,连接问题似乎得到了缓解。虽然每次启动容器时都有类似的问题,但通过一些简单的操作(例如重新启动 Spring Boot 和导入数据),可以暂时解决问题。


解决方案

为了避免这个问题,我采取了以下几步操作:

  1. 使用 docker-compose up -d 启动容器,以确保容器在后台运行。
  2. 每次重启 Spring Boot 后,重新导入数据,确保数据库数据不会丢失。

小结

这次关于 MySQL 容器内部数据消失的问题,虽然没有完全找到根本原因,但我通过调整权限和重新启动服务找到了一个临时的解决方法。尽管如此,容器中 MySQL 数据丢失的问题仍需进一步调查和解决,尤其是容器启动与 Spring Boot 启动顺序的问题。

二更:真相大白 - 这是一次黑客攻击!

经过进一步调查和类似案例的对比,我终于明白了这是一次典型的数据库勒索攻击。回顾整个过程,我犯了几个致命的错误:

  1. 在云服务器上安装数据库时使用了默认配置
  2. 没有设置访问密码
  3. 由于使用动态IP,安全组直接开放了所有IP的访问
  4. 数据库完全暴露在公网中

这些配置问题导致我的数据库就像在互联网上”裸奔”。几天后,数据库连接突然失效,重连后发现所有数据库都消失了,只留下一个名为READ_ME_TO_RECOVER_YOUR_DATA的库,其中包含一张README表,内容是勒索信息,要求支付比特币才能恢复数据。

教训总结

  1. 永远不要使用默认配置

    • 修改默认端口
    • 设置强密码
    • 限制访问IP
  2. 备份很重要

    • 定期备份数据
    • 离线存储备份
    • 测试恢复流程

这次经历让我深刻认识到数据库安全的重要性。在云环境中部署服务时,安全防护不能有一丝松懈,否则后果可能会非常严重。

希望这个教训能帮助其他开发者避免类似的问题。记住:在互联网上,安全永远是第一位的!