Соединение Drupal 8, получающее разрешение PDO, отказано - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в Drupal 8 и начинаю с создания примера сайта.У меня все настроено правильно, но я получаю ошибку подключения PDO ниже.Я почти уверен, что это связано с именем хоста, но я не могу понять, что.

Мой файл settings.php выглядит так:

$databases['default']['default'] = array (
   'database' => 'website_pet',
   'username' => 'drupal',
   'password' => 'mypass',
   'host' => '127.0.0.1',
   'port' => '3306',
   'driver' => 'mysql',
   'prefix' => '',
   'collation' => 'utf8mb4_general_ci',
 );

И в my.cnf у меня естьдобавлено:

max_allowed_packet=100M 

И мой журнал ошибок httpd показывает:

[Пт 07 июня 03: 47: 32.183065 2019] [php7: заметка] [pid 19631] [клиент:: 1: 58796] PDOException: SQLSTATE [HY000] [2002] Отказано в доступе в /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php в строке 79 # 0 / var / www / html / core/lib/Drupal/Core/Database/Driver/mysql/Connection.php(420): PDO -> конструкция __ («mysql: host = 127 ....», «drupal», «mypass», Array) \ n #1 /var/www/html/core/lib/Drupal/Core/Database/Database.php(371): Drupal \ Core \ Database \ Driver \ mysql \ Connection :: open (Array) \ n # 2 / var / www/html/core/lib/Drupal/Core/Database/Database.php(166): Drupal \ Core \ Database \ Database :: openConnection ('default', 'default') \ n # 3 [внутренняя функция]: Drupal \Core \ Database \ Database :: getConnection ('default') \ n # 4 / var / www / html / core / lib / Drupal / Component / DependencyInjection / PhpArrayContainer.php (79): call_user_func_array ('Drupal \\ Core \\ Dat ...', Array) \ n # 5 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService (массив, «база данных») \ n # 6 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(260): Drupal\ Component \ DependencyInjection \ Container-> get ('database', 1) \ n # 7 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(62): Drupal \ Component \ DependencyInjection \PhpArrayContainer-> resolServicesAndParameters (Array) \ n # 8 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService (.container ') \ n # 9 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(543): Drupal \ Component \ DependencyInjection \ Container-> get (' cache.container ') \ n #10 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(904): Drupal \ Core \ DrupalKernel-> getCachedContainerDefinition () \ n # 11 /var/www/html/core/lib/Drupal/Core/DrupalKernel.php(476): Drupal \ Core \ DrupalKernel-> initializeContainer () \ n # 12 / var / www/html/core/lib/Drupal/Core/DrupalKernel.php(692): Drupal \ Core \ DrupalKernel-> boot () \ n # 13 /var/www/html/index.php(19): Drupal \ Core \DrupalKernel-> handle (Object (Symfony \ Component \ HttpFoundation \ Request)) \ n # 14 {main}, реферер: http://localhost:1180/core/install.php

Я могу подключиться к базе данных через оба:

mysql -u drupal -pmypass -h 127.0.0.1 website_pet
mysql -u drupal -pmypass -h localhost website_pet

так что я знаю, что это не ошибка разрешения для базы данных.Сайт размещен в облаке, и я обращаюсь к нему через туннель SSH (localhost: 1180).Если вы пытались временно настроить selinux для разрешения, но это не помогло.

Может кто-нибудь указать, что с этим не так?


ОБНОВЛЕНИЕ: После некоторых перезагрузок и т. Д. Ошибка немного меняется, веб-страница показывает:

Additional uncaught exception thrown while handling exception.
Original
Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away: CREATE TABLE {cache_default} ( `cid` VARCHAR(255) CHARACTER SET ascii BINARY NOT NULL DEFAULT '' COMMENT 'Primary Key: Unique cache ID.', `data` LONGBLOB NULL DEFAULT NULL COMMENT 'A collection of data to cache.', `expire` INT NOT NULL DEFAULT 0 COMMENT 'A Unix timestamp indicating when the cache entry should expire, or -1 for never.', `created` DECIMAL(14, 3) NOT NULL DEFAULT 0 COMMENT 'A timestamp with millisecond precision indicating when the cache entry was created.', `serialized` SMALLINT NOT NULL DEFAULT 0 COMMENT 'A flag to indicate whether content is serialized (1) or not (0).', `tags` LONGTEXT NULL DEFAULT NULL COMMENT 'Space-separated list of cache tags for this entry.', `checksum` VARCHAR(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL COMMENT 'The tag invalidation checksum when this entry was saved.', PRIMARY KEY (`cid`), INDEX `expire` (`expire`), INDEX `created` (`created`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'Storage for the cache API.'; Array ( ) in Drupal\views\ViewsData->cacheSet() (line 209 of /var/www/html/core/modules/views/src/ViewsData.php).

Drupal\views\ViewsData->cacheSet('views_data', Array) (Line: 257)
Drupal\views\ViewsData->getData() (Line: 160)
Drupal\views\ViewsData->get('block_content') (Line: 91)
Drupal\views\Plugin\Derivative\ViewsEntityRow->getDerivativeDefinitions(Array) (Line: 101)
Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator->getDerivatives(Array) (Line: 87)
Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator->getDefinitions() (Line: 284)
Drupal\Core\Plugin\DefaultPluginManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 147)
views_theme(Array, 'module', 'views', 'core/modules/views') (Line: 447)
Drupal\Core\Theme\Registry->processExtension(Array, 'views', 'module', 'views', 'core/modules/views') (Line: 334)
Drupal\Core\Theme\Registry->build() (Line: 233)
Drupal\Core\Theme\Registry->get() (Line: 86)
Drupal\Core\Utility\ThemeRegistry->initializeRegistry() (Line: 67)
Drupal\Core\Utility\ThemeRegistry->__construct('theme_registry:runtime:seven', Object, Object, Array, 1) (Line: 253)
Drupal\Core\Theme\Registry->getRuntime() (Line: 142)
Drupal\Core\Theme\ThemeManager->render('html', Array) (Line: 437)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 195)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 139)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 582)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 140)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 66)
Drupal\Core\Render\BareHtmlPageRenderer->renderBarePage(Array, Object, 'install_page', Array) (Line: 76)
Drupal\Core\ProxyClass\Render\BareHtmlPageRenderer->renderBarePage(Array, Object, 'install_page', Array) (Line: 1067)
install_display_output(Array, Array) (Line: 167)
install_drupal(Object) (Line: 44)
Additional
Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away: CREATE TABLE {cache_default} ( `cid` VARCHAR(255) CHARACTER SET ascii BINARY NOT NULL DEFAULT '' COMMENT 'Primary Key: Unique cache ID.', `data` LONGBLOB NULL DEFAULT NULL COMMENT 'A collection of data to cache.', `expire` INT NOT NULL DEFAULT 0 COMMENT 'A Unix timestamp indicating when the cache entry should expire, or -1 for never.', `created` DECIMAL(14, 3) NOT NULL DEFAULT 0 COMMENT 'A timestamp with millisecond precision indicating when the cache entry was created.', `serialized` SMALLINT NOT NULL DEFAULT 0 COMMENT 'A flag to indicate whether content is serialized (1) or not (0).', `tags` LONGTEXT NULL DEFAULT NULL COMMENT 'Space-separated list of cache tags for this entry.', `checksum` VARCHAR(255) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL COMMENT 'The tag invalidation checksum when this entry was saved.', PRIMARY KEY (`cid`), INDEX `expire` (`expire`), INDEX `created` (`created`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'Storage for the cache API.'; Array ( ) in Drupal\views\ViewsData->cacheSet() (line 209 of /var/www/html/core/modules/views/src/ViewsData.php).

Drupal\views\ViewsData->cacheSet('views_data:block_content', Array) (Line: 176)
Drupal\views\ViewsData->get('block_content') (Line: 91)
Drupal\views\Plugin\Derivative\ViewsEntityRow->getDerivativeDefinitions(Array) (Line: 101)
Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator->getDerivatives(Array) (Line: 87)
Drupal\Component\Plugin\Discovery\DerivativeDiscoveryDecorator->getDefinitions() (Line: 284)
Drupal\Core\Plugin\DefaultPluginManager->findDefinitions() (Line: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (Line: 147)
views_theme(Array, 'module', 'views', 'core/modules/views') (Line: 447)
Drupal\Core\Theme\Registry->processExtension(Array, 'views', 'module', 'views', 'core/modules/views') (Line: 334)
Drupal\Core\Theme\Registry->build() (Line: 233)
Drupal\Core\Theme\Registry->get() (Line: 86)
Drupal\Core\Utility\ThemeRegistry->initializeRegistry() (Line: 67)
Drupal\Core\Utility\ThemeRegistry->__construct('theme_registry:runtime:seven', Object, Object, Array, 1) (Line: 253)
Drupal\Core\Theme\Registry->getRuntime() (Line: 142)
Drupal\Core\Theme\ThemeManager->render('html', Array) (Line: 437)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 195)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 139)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 582)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 140)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 66)
Drupal\Core\Render\BareHtmlPageRenderer->renderBarePage(Array, 'Error', 'install_page', Array) (Line: 76)
Drupal\Core\ProxyClass\Render\BareHtmlPageRenderer->renderBarePage(Array, 'Error', 'install_page', Array) (Line: 1067)
install_display_output(Array, Array, Array) (Line: 260)
_drupal_log_error(Array, 1) (Line: 602)
_drupal_exception_handler(Object)

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

После долгих экспериментов проблема связана с установкой PHP 7.2 на CentOS 7. (который поставляется только с PHP 5.x)

Невозможно заставить его работать, но после сборки новой Ubuntu, которая включаетВ PHP 7 все вроде работало.

Я не мог отследить это до одного модуля / параметра / пакета.Но решение состоит в том, чтобы не пытаться использовать CentOS 7 (используя remi repo для пакетов PHP7x)

0 голосов
/ 07 июня 2019

Прежде всего, это плохая идея использовать пользователя root для Drupal - если кто-то обнаружит слабость, вы просто дадите ему доступ ко всему в вашей базе данных и, возможно, ко всей остальной системе. Несмотря на то, что это может быть система разработчиков, неразумно приобретать вредные привычки.

В любом случае, к вопросу. С MySQL следует помнить, что соединения localhost обычно переадресовываются через сокет домена Unix (то есть «файл» в файловой системе) по соображениям производительности. Иногда вы получаете ошибку отказа в разрешении, потому что сокет отсутствует или недоступен для пользователя, устанавливающего соединение, или пользователь включил «localhost» в таблицу разрешений MySQL, когда он должен быть «127.0.0.1» или наоборот. Наконец, в этом соединении с IPv6 некоторые сетевые стеки ОС теперь вместо этого по умолчанию используют «:: 1» (эквивалент IPv6 127.0.0.1).

Дважды проверьте, что содержит таблица разрешений БД: все три (хост, пользователь, пароль) должны совпадать, чтобы доступ был предоставлен. Мой опыт показывает, что подстановочный знак-хост: «%» не является надежным, поэтому я избегаю его использования.

Вы можете попробовать установить 127 ... в "localhost" как в drupal, так и в таблице разрешений в MySQL.

НТН

...