Первоначально я использовал локальную базу данных mysql для своего приложения cakephp 3, и все работало как надо. Я нахожусь в процессе развертывания моего приложения cakephp3, поэтому я создал экземпляр RDS MySql, подключил его к MySql workbench и просто скопировал имеющуюся у меня базу данных в базу данных RDS. Мои настройки в моем app.php такие.
Чтобы определить мои константы, у меня есть
if (!defined('RDS_HOSTNAME')) {
define('RDS_HOSTNAME', $_SERVER['myendpoint.us-west-1.rds.amazonaws.com']);
define('RDS_USERNAME', $_SERVER['myusername']);
define('RDS_PASSWORD', $_SERVER['mypassword']);
define('RDS_DB_NAME', $_SERVER['my_db']);
}
Затем в разделе источников данных файла app.php
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => RDS_HOSTNAME,
/**
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'non_standard_port_number',
'username' => RDS_USERNAME,
'password' => RDS_PASSWORD,
'database' => RDS_DB_NAME,
'encoding' => 'utf8',
'timezone' => 'UTC',
'flags' => [],
'cacheMetadata' => true,
'log' => false,
На консоли AWS написано, что у меня есть соединение с экземпляром RDS. Однако, когда я пытаюсь зарегистрироваться / войти, я получаю внутреннюю ошибку CakePHP. Затем я проверил журналы ошибок и нашел это в своем файле error.log.
2016-06-20 17:25:35 Error: [PDOException] SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: NO)
Request URL: /users/register
Referer URL: http://localhost:8765/
Client IP: 127.0.0.1
Stack Trace:
#0 /home/danielparkk/Desktop/SubReminder/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php(47): PDO->__construct('mysql:host=;por...', NULL, NULL, Array)
#1 /home/danielparkk/Desktop/SubReminder/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php(90): Cake\Database\Driver\Mysql->_connect('mysql:host=;por...', Array)
Я не понимаю, что я делаю не так? Когда я снова переключаюсь на локальную копию базы данных, все работает как должно. Любая помощь будет оценена.
=================== EDIT =======================
2016-06-21T00:22:17.815360Z 24 [Note] Access denied for user 'root'@'108-83-57-226.lightspeed.irvnca.sbcglobal.net' (using password: NO)
2016-06-21T00:34:38.776248Z 26 [Note] Aborted connection 26 to db: 'subscriptions_db' user: 'root' host: '108-83-57-226.lightspeed.irvnca.sbcglobal.net' (Got timeout reading communication packets)
2016-06-21T00:34:42.872265Z 25 [Note] Aborted connection 25 to db: 'subscriptions_db' user: 'root' host: '108-83-57-226.lightspeed.irvnca.sbcglobal.net' (Got timeout reading communication packets)
При чтении журналов ошибок в консоли AWS для моего экземпляра я получил такой вывод. Честно говоря, я впервые использую RDS, поэтому я понятия не имею, что это значит, но это может помочь другим.
Вы должны только написать это без необходимости $ _SERVER. Я также подключаю CakePHP 3.01 AWS RDS ниже мой код.
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'yourendpoint.us-west-1.rds.amazonaws.com',
'username' => 'rdsusername',
'password' => 'rdspassword',
'database' => 'rdsdatabasename',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
/**
* Set identifier quoting to true if you are using reserved words or
* special characters in your table or column names. Enabling this
* setting will result in queries built using the Query Builder having
* identifiers quoted when creating SQL. It should be noted that this
* decreases performance because each query needs to be traversed and
* manipulated before being executed.
*/
'quoteIdentifiers' => false,
/**
* During development, if using MySQL < 5.6, uncommenting the
* following line could boost the speed at which schema metadata is
* fetched from the database. It can also be set directly with the
* mysql configuration directive 'innodb_stats_on_metadata = 0'
* which is the recommended value in production environments
*/
//'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
]
],
Других решений пока нет …