2016-12-10 3 views
1

CakePHP3 не может подключиться к моей базе данных PostgreSQL.CakePHP не может подключиться к Postgres. Однако Pgadmin4 может быть

Моя установка заключается в следующем:

  • для Windows 10 хост
  • CentOS7 Virtualbox VM гостю
    • PostgreSQL 9,6
    • Apache 2.4
    • PHP 7

Ошибка:

CakePHP НЕ может подключиться к базе данных.

Не удалось установить соединение с базой данных: SQLSTATE [08006] [7] не удалось подключиться к серверу: запрещено разрешение Сервер работает на хосте «localhost» (:: 1) и принимает соединения TCP/IP на порту 5432 ? не удалось подключиться к серверу: разрешено ли разрешение Сервер работает на хосте «localhost» (127.0.0.1) и принимает соединения TCP/IP на порту 5432?

Я попытался указать localhost, 127.0.0.1 и 192.168.2.31 как значение моего хоста в app.php. Они все выдают ту же ошибку.

не все потеряно, я могу достичь PostgreSQL следующими способами:

  • подключения к серверу с помощью моей рабочей станции с помощью Pgadmin4
  • подключен через SSH, я могу подключиться через использование Psql

[[email protected] ~]$ psql -U my_user -h 127.0.0.1 -d my_db

Update # 1

по умолчанию конфигурации базы данных

'default' => [ 
      'className' => 'Cake\Database\Connection', 
      'driver' => 'Cake\Database\Driver\Postgres', 
      'persistent' => true, 
      'host' => 'localhost', 
      /** 
      * 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' => 5432, 
      'username' => 'user', 
      'password' => 'pass', 
      'database' => 'my_db', 
      'schema' => 'public', 
      'encoding' => 'utf8', 
      'timezone' => 'UTC', 
      'flags' => [], 
      'cacheMetadata' => true, 
      'log' => false, 

      /** 
      * 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'], 

      //'url' => env('DATABASE_URL', null), 
     ] 

Update # 2

phpinfo данные о PostgreSQL

PDO 
PDO support enabled 
PDO drivers  mysql, pgsql, sqlite 

pdo_pgsql 
PDO Driver for PostgreSQL enabled 
PostgreSQL(libpq) Version 9.2.15 
Module version 7.0.13 
Revision $Id: f9b0c62eba234361d62f16fcbaaa120353ab5175 $ 

pgsql 
PostgreSQL Support enabled 
PostgreSQL(libpq) Version 9.2.15 
PostgreSQL(libpq) PostgreSQL 9.2.15 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit 
Multibyte character support  enabled 
SSL support  enabled 
Active Persistent Links  0 
Active Links 0 
Directive Local Value Master Value 
pgsql.allow_persistent On On 
pgsql.auto_reset_persistent Off Off 
pgsql.ignore_notice Off Off 
pgsql.log_notice Off Off 
pgsql.max_links Unlimited Unlimited 
pgsql.max_persistent Unlimited Unlimited 

Update # 3

Хотя с tcpdump running: tcpdump -i lo port 5432 -w pg.cap

У меня есть некоторые пакеты, когда я использовал psql. Тем не менее, я не получаю никаких пакетов при доступе к моему сайту через CakePHP.

pg_hba.conf

host all    all    ::1/128     md5 
host all    all    0.0.0.0/0    md5 
host all    all    127.0.0.1/32   md5 
+0

Показать конфигурацию базы данных 'DATABASE_CONFIG'. – Artegon

+0

См. Мое обновление # 1 – TekiusFanatikus

+0

Шаг # 1 - проверьте свои учетные данные в настройке источника данных и используйте то же самое, что и в командной строке. – Artegon

ответ

1

В дистрибутивах на базе RedHat есть значение httpd_can_network_connect_db конфигурации, которая включает/отключает Apache для подключения к серверам баз данных. В состоянии по умолчанию это значение установлено на off, что означает, что Appache не разрешен для подключения.

Чтобы проверить, является ли это разрешено на вашей коробке:

getsebool httpd_can_network_connect_db 

и если она возвращает off вы должны разрешить его:

setsebool -P httpd_can_network_connect_db on 

(-P сделать эту настройку после перезагрузок)

Для получения дополнительной информации см. SELinux Booleans и ⁠Configuring Booleans.

+0

Нечетный. Я должен был сделать это дважды на виртуальных машинах, и оба они, после перезагрузки, получили следующее сообщение: не удалось загрузить политику SELinux. Чтобы обойти это, мне нужно поставить selinux = 0 перед загрузкой виртуальной машины ... – TekiusFanatikus