关于mysql容器内部数据消失/二更:第一次遇到黑客
关于 MySQL 容器内部数据消失的总结
问题描述
在使用云服务器部署 MySQL 容器时,我遇到了一些奇怪的问题。每隔一段时间,我发现容器中的数据会消失,显示为 RECOVER_YOUR_DATA
,原本存储在数据库中的数据就没有了。这让我非常困扰,最终通过排查找到了问题的根源。
权限问题
经过一些调查,我发现容器内的权限设置有问题。我修改了权限,并发现 999
是 MySQL 用户的权限,问题似乎得到了缓解。不过,这并不是唯一的问题根源。
Spring Boot 启动问题
我也注意到,在 Spring Boot 启动后,容器中的 MySQL 数据库经常无法连接。经过进一步排查,我猜测问题出在 Spring Boot 启动过快,导致 MySQL 没有完全初始化好,就开始连接。这可能是容器内部数据丢失的原因之一。
未解之谜
这个问题的根源至今没有完全弄清楚。有时,重新登录到 VSCode 后,连接问题似乎得到了缓解。虽然每次启动容器时都有类似的问题,但通过一些简单的操作(例如重新启动 Spring Boot 和导入数据),可以暂时解决问题。
解决方案
为了避免这个问题,我采取了以下几步操作:
- 使用
docker-compose up -d
启动容器,以确保容器在后台运行。 - 每次重启 Spring Boot 后,重新导入数据,确保数据库数据不会丢失。
小结
这次关于 MySQL 容器内部数据消失的问题,虽然没有完全找到根本原因,但我通过调整权限和重新启动服务找到了一个临时的解决方法。尽管如此,容器中 MySQL 数据丢失的问题仍需进一步调查和解决,尤其是容器启动与 Spring Boot 启动顺序的问题。
二更:真相大白 - 这是一次黑客攻击!
经过进一步调查和类似案例的对比,我终于明白了这是一次典型的数据库勒索攻击。回顾整个过程,我犯了几个致命的错误:
- 在云服务器上安装数据库时使用了默认配置
- 没有设置访问密码
- 由于使用动态IP,安全组直接开放了所有IP的访问
- 数据库完全暴露在公网中
这些配置问题导致我的数据库就像在互联网上”裸奔”。几天后,数据库连接突然失效,重连后发现所有数据库都消失了,只留下一个名为READ_ME_TO_RECOVER_YOUR_DATA
的库,其中包含一张README
表,内容是勒索信息,要求支付比特币才能恢复数据。
教训总结
永远不要使用默认配置
- 修改默认端口
- 设置强密码
- 限制访问IP
备份很重要
- 定期备份数据
- 离线存储备份
- 测试恢复流程
这次经历让我深刻认识到数据库安全的重要性。在云环境中部署服务时,安全防护不能有一丝松懈,否则后果可能会非常严重。
希望这个教训能帮助其他开发者避免类似的问题。记住:在互联网上,安全永远是第一位的!