确保Linux系统上已安装并运行数据库服务(如MySQL/MariaDB)。使用以下命令检查服务状态:
sudo systemctl status mysqld # MySQL
# 或
sudo systemctl status mariadb # MariaDB
若服务未运行,启动它并设置开机自启:
sudo systemctl start mysqld
sudo systemctl enable mysqld
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 # 若数据库在远程服务器,改为对应IP
DB_PORT=3306 # MySQL默认端口
DB_DATABASE=your_database_name
DB_USERNAME=your_database_user
DB_PASSWORD=your_database_password
connections数组中的配置与.env一致(如mysql驱动的host、port等参数是否引用.env变量)。使用数据库管理工具(如MySQL命令行)登录并执行以下操作:
-- 创建数据库
CREATE DATABASE your_database_name;
-- 创建用户并授予权限(%表示允许远程访问)
CREATE USER 'your_database_user'@'localhost' IDENTIFIED BY 'your_database_password';
GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_database_user'@'localhost';
FLUSH PRIVILEGES;
若应用与数据库不在同一服务器,将localhost改为%(允许所有IP访问),并确保数据库服务器配置允许远程连接(如MySQL的bind-address设置为0.0.0.0)。
若数据库服务器与应用服务器分离,需开放数据库端口(默认3306)。以CentOS 7为例:
# 开放3306端口
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
若系统启用SELinux,可能阻止应用访问数据库。临时禁用测试:
sudo setenforce 0
若问题解决,可修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive(永久生效)。
确保已安装并启用Laravel所需的PHP数据库扩展(如MySQL需要pdo_mysql):
php -m | grep pdo_mysql # 检查是否安装
若未安装,使用包管理器安装(如CentOS):
sudo yum install php-mysqlnd
sudo systemctl restart php-fpm # 重启PHP服务
在Laravel项目中创建路由或使用Tinker测试连接:
// 在routes/web.php中添加测试路由
Route::get('/test-db', function() {
try {
DB::connection()->getPdo();
return "Database connected successfully!";
} catch (\Exception $e) {
return "Connection failed: " . $e->getMessage();
}
});
访问http://your-app-domain/test-db,查看返回结果。
storage/logs/laravel.log文件,获取详细的错误信息(如连接拒绝、权限不足等)。/var/log/mysqld.log),确认是否有来自Laravel的连接请求及错误原因。若修改.env或config/database.php后问题依旧,清除Laravel配置缓存:
php artisan config:clear
php artisan cache:clear
若数据库在远程服务器,使用ping或telnet测试网络连通性:
ping database_server_ip
telnet database_server_ip 3306
若无法连接,需检查网络配置(如防火墙、路由)或联系网络管理员。
通过以上步骤逐一排查,可解决大多数Linux环境下Laravel数据库连接问题。若仍有异常,需根据日志中的具体错误信息进一步分析。