AWS EC2上Laravel项目users表自动删除问题求助
解决Laravel部署AWS EC2后users表自动删除的问题
以下是按优先级排序的排查和解决步骤:
1. 彻查定时任务与调度逻辑
- 拉取Laravel日志文件
storage/logs/laravel.log,全局搜索DROP TABLE、users、Schema::drop关键词,匹配表被删的时间点,确认是否有相关执行记录。 - 检查系统级crontab:执行
crontab -l,核对所有定时任务,排查第三方脚本、备份工具或误加命令是否触发了删除操作。 - 仔细核对Laravel任务调度文件
app/Console/Kernel.php,确认所有调度任务的逻辑,包括闭包任务、外部命令调用,哪怕是订单状态更新任务,也要检查是否有分支条件误触发删表。
2. 监控数据库操作日志
- 临时开启MySQL通用查询日志(避免长期开启占用磁盘):
表被删后查看该日志,定位SET GLOBAL general_log = 'ON'; SET GLOBAL general_log_file = '/var/log/mysql/general.log';DROP TABLE users语句的执行IP、账号,找到操作来源。 - 限制数据库用户权限:登录MySQL执行
SHOW GRANTS FOR '你的Laravel数据库用户'@'%';,确保该用户仅拥有SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER等必要权限,移除DROP权限(业务不需要的话)。
3. 排查代码中的误操作
- 全局搜索项目代码(含迁移文件、控制器、模型、命令类):
排查是否存在测试用迁移文件未清理、条件判断错误触发删表的情况。grep -r "DROP TABLE\|Schema::drop\|Schema::dropIfExists" /path/to/your/laravel/project - 检查队列任务:若使用Laravel队列,核对所有队列任务代码,排查是否有延迟执行的任务包含删表逻辑。
- 核对部署脚本:如果有自动部署流程(如CI/CD工具),检查脚本中是否存在
artisan migrate:fresh、artisan db:wipe这类清空数据库的命令,是否会在定期部署时误执行。
4. AWS环境安全排查
- 查看EC2的CloudWatch日志,检查是否有异常SSH登录记录或陌生进程执行数据库操作。
- 若使用AWS RDS而非EC2本地MySQL,查看RDS事件日志,排查自动备份、恢复等操作是否导致表被删。
- 检查PHPMyAdmin访问日志,限制其访问IP范围,或改用SSH隧道连接数据库的方式,降低未授权操作风险。
内容的提问来源于stack exchange,提问作者sagar jaiswal
相关产品推荐
相关产品推荐

