Laravel切换数据库后仍查询旧库的问题排查与解决方案咨询
问题求助:Laravel项目无法切换至新数据库
错误信息
Base table or view not found: 1146 Table 'montemar.users' doesn't exist
问题详情
montemar数据库存在,但其中的users表出现锁定错误(LOCKED TABLE),无法执行查询或导出操作。为此创建了新数据库montemar2,并修改了.env配置文件,但项目仍持续查询montemar数据库。
已尝试的无效操作
- 重启Apache服务器(执行命令:
$ systemctl apache restart) - 使用
a2dissite禁用站点 - 重启MySQL服务器
- 清理Laravel缓存
需求
寻求可行方案让项目查询montemar2数据库,同时怀疑Apache缓存问题,希望能清理相关缓存。
可行解决方案
1. 彻底清理Laravel全类型缓存
Laravel的配置、路由等缓存可能未完全清除,执行以下完整清理命令:
php artisan config:clear php artisan cache:clear php artisan route:clear php artisan view:clear rm -rf bootstrap/cache/*
2. 校验环境配置文件
- 确认
.env文件中DB_DATABASE=montemar2配置正确,且无拼写错误 - 检查项目根目录下是否存在
.env.local、.env.production等环境专属配置文件,这类文件会覆盖主.env的数据库配置,若存在需同步修改其中的数据库名称
3. 修正Apache操作并清理其缓存
- 重启Apache需使用正确命令(根据系统调整):
# Debian/Ubuntu系统 sudo systemctl restart apache2 # CentOS/RHEL系统 sudo systemctl restart httpd - 清理Apache磁盘缓存:
sudo rm -rf /var/cache/apache2/mod_cache_disk/*
4. 检查数据库配置文件是否硬编码
打开config/database.php,确认数据库名称配置为动态读取环境变量:
'mysql' => [ // ...其他配置 'database' => env('DB_DATABASE', 'forge'), // ...其他配置 ]
若此处直接写死montemar,需改为上述动态读取格式。
5. 清理PHP OPcache缓存
OPcache可能缓存了旧的配置信息,需重启PHP-FPM服务(根据PHP版本调整命令):
# 示例:PHP 8.1版本 sudo systemctl restart php8.1-fpm
若无法重启,可临时修改php.ini关闭OPcache,清理后再重新开启。
6. 校验站点配置
- 确认
a2dissite禁用旧站点后,已执行a2ensite启用正确的站点配置 - 检查站点配置文件(通常在
/etc/apache2/sites-available/下),确认文档根目录指向当前项目路径,避免加载旧项目的.env文件
内容的提问来源于stack exchange,提问作者Franklin'j Gil'z
相关产品推荐
相关产品推荐

