本地 Laravel 环境未连接到 AWS RDS 数据库
Posted
技术标签:
【中文标题】本地 Laravel 环境未连接到 AWS RDS 数据库【英文标题】:Local Laravel environment not connecting to AWS RDS database 【发布时间】:2019-12-02 09:56:02 【问题描述】:我已经为开发目的设置了一个本地 Laravel 环境。难以连接到远程 AWS RDS Database
数据库。
.env 设置
APP_NAME=Laravel
APP_ENV=local
APP_KEY=<APP-KEY>
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=<AWS-RDS-DATABASE-PATH>
DB_PORT=3306
DB_DATABASE=<DB-NAME>
DB_USERNAME=<DB-USERNAME>
DB_PASSWORD=<DB-PASSWORD>
config/database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '<AWS-RDS-DATABASE-PATH>'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', '<DB-NAME>'),
'username' => env('DB_USERNAME', '<DB-USERNAME>'),
'password' => env('DB_PASSWORD', '<DB-PASSWORD>'),
'unix_socket' => env('DB_SOCKET', '/tmp/mysql.sock'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
],
适用于 CodeIgniter - config/database.php [设置相同]
$db['default'] = array(
'dsn' => '',
'hostname' => '<AWS-RDS-DATABASE-PATH>',
'username' => '<DB-USERNAME>',
'password' => '<DB-PASSWORD>',
'database' => '<DB-NAME>',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
可能是什么问题?
【问题讨论】:
【参考方案1】:您收到错误消息吗?这可能会有所帮助。
【讨论】:
SQLSTATE[HY000] [1045] 用户'php artisan cache:clear
看起来变量被缓存了
配置或缓存有问题。错误消息不应包含 localhost 而是 DB Server。【参考方案2】:
在我全新安装 Laravel 后,它现在可以工作了。
【讨论】:
【参考方案3】:将此代码添加到 /config/database.php 的顶部
use Illuminate\Support\Str;
define('RDS_HOSTNAME', (isset($_SERVER['RDS_HOSTNAME'])) ? $_SERVER['RDS_HOSTNAME'] : null);
define('RDS_USERNAME', (isset($_SERVER['RDS_USERNAME'])) ? $_SERVER['RDS_USERNAME'] : null);
define('RDS_PASSWORD', (isset($_SERVER['RDS_PASSWORD'])) ? $_SERVER['RDS_PASSWORD'] : null);
define('RDS_DB_NAME', (isset($_SERVER['RDS_DB_NAME'])) ? $_SERVER['RDS_DB_NAME'] : null);
并将您的 MySQL 连接更改为:
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => (RDS_HOSTNAME) ? RDS_HOSTNAME : env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => (RDS_DB_NAME) ? RDS_DB_NAME : env('DB_DATABASE', 'forge'),
'username' => (RDS_USERNAME) ? RDS_USERNAME : env('DB_USERNAME', 'forge'),
'password' => (RDS_PASSWORD) ? RDS_PASSWORD : env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => false,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
【讨论】:
以上是关于本地 Laravel 环境未连接到 AWS RDS 数据库的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 无法连接到 RDS 实例,但我可以在本地连接?