ubuntu

Ubuntu下Laravel数据库连接失败怎么解决

小樊
42
2025-11-06 21:42:28
栏目: 智能运维

Ubuntu下Laravel数据库连接失败的解决方法

1. 检查数据库配置(.env文件)

Laravel的数据库连接配置优先读取项目根目录下的.env文件。确保以下关键参数与实际数据库信息完全一致:

2. 确认MySQL服务是否运行

Ubuntu使用systemctl管理服务状态。运行以下命令检查MySQL服务是否启动:

sudo systemctl status mysql

若显示Active: active (running)则表示运行中;若为inactive (dead),则启动服务:

sudo systemctl start mysql

如需开机自启,执行:

sudo systemctl enable mysql

3. 验证数据库用户权限

确保数据库用户拥有目标数据库的访问和操作权限。登录MySQL命令行(默认无密码或用root密码):

mysql -u root -p

执行以下SQL命令(将your_database_nameyour_database_useryour_database_password替换为实际值):

-- 授权用户对指定数据库的所有权限
GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_database_user'@'localhost' IDENTIFIED BY 'your_database_password';
-- 刷新权限使变更生效
FLUSH PRIVILEGES;

若用户需从远程访问,将localhost改为%(代表任意主机)。

4. 检查PHP MySQL扩展是否安装

Laravel需要PHP的MySQL扩展(如pdo_mysqlmbstring)才能连接数据库。运行以下命令查看已安装扩展:

php -m | grep -E 'pdo_mysql|mbstring'

若未安装,使用APT安装(Ubuntu 22.04+默认PHP版本为8.1,需对应调整):

sudo apt install php-mysql php-mbstring

安装完成后重启PHP-FPM(Ubuntu常用PHP-FPM服务):

sudo systemctl restart php8.1-fpm  # 根据实际PHP版本调整,如php8.2-fpm

5. 关闭SELinux(可选,仅影响启用了SELinux的系统)

Ubuntu默认未启用SELinux,若系统启用了SELinux,可能会阻止Laravel访问数据库。可临时关闭测试(重启后失效):

sudo setenforce 0

若问题解决,可修改配置文件永久关闭(需谨慎,可能降低安全性):

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

6. 检查防火墙设置

若数据库与Laravel不在同一服务器,需确保防火墙允许访问MySQL端口(3306)。Ubuntu使用ufw管理防火墙,执行以下命令:

sudo ufw allow 3306/tcp  # 允许TCP协议的3306端口
sudo ufw reload          # 重新加载防火墙规则

若使用iptables,可添加规则:

sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

7. 查看Laravel与MySQL日志

若以上步骤均未解决,可通过日志定位具体错误:

tail -n 50 storage/logs/laravel.log  # 查看Laravel最后50行日志
sudo tail -n 50 /var/log/mysql/error.log  # 查看MySQL最后50行错误日志

通过以上步骤逐一排查,可解决绝大多数Ubuntu下Laravel数据库连接失败的问题。若仍有异常,建议根据日志中的具体错误信息进一步分析。

0
看了该问题的人还看了