1
votes

Connexion Drupal 8 obtenant l'autorisation PDO refusée

Je suis nouveau sur Drupal 8 et je commence par créer un exemple de site. J'ai tout configuré correctement, mais j'obtiens l'erreur de connexion PDO ci-dessous. Je suis presque sûr que cela a à voir avec le nom d'hôte, mais je ne peux pas comprendre quoi.

Mon settings.php ressemble à ceci:

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)

Et dans mon. cnf J'ai ajouté:

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

Et mon journal d'erreurs httpd affiche:

[Fri Jun 07 03: 47: 32.183065 2019] [php7: notice] [pid 19631] [client :: 1: 58796] PDOException: SQLSTATE [HY000] [2002] Autorisation refusée dans /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php en ligne 79 # 0 /var/www/html/core/lib/Drupal/Core/Database/Driver/mysql/Connection.php(420): PDO -> __ construct ('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 [fonction interne]: 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 (Array, 'base de données') \ n # 6 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(260): Drupal \ Component \ DependencyInjection \ Container-> get ('base de données', 1) \ n # 7 /var/www/html/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php(62): Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> resolutionServicesAndParameters (Array) \ n # 8 /var/www/html/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService (Array, 'cache.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}, référent: http: // localhost: 1180 / core / install.php

Je peux me connecter à la base de données via les deux:

max_allowed_packet=100M 

donc je sais que ce n'est pas une erreur d'autorisation dans la base de données. Le site Web est hébergé dans le cloud et j'y accède via un tunnel SSH (localhost: 1180). Si j'ai essayé de définir temporairement selinux sur permissive mais cela n'a pas aidé.

Quelqu'un peut-il indiquer ce qui ne va pas?


MISE À JOUR: Après quelques redémarrages, etc. un peu, la page Web montre:

$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',
 );


0 commentaires

3 Réponses :


0
votes

Tout d'abord, c'est une mauvaise idée d'utiliser l'utilisateur root pour Drupal - si quelqu'un trouve une faiblesse, vous lui donnez simplement accès à tout ce qui se trouve sur votre base de données, et probablement au reste du système aussi. Bien qu'il s'agisse d'un système de développement, il n'est pas sage de prendre de mauvaises habitudes.

Quoi qu'il en soit, sur le problème. Une chose à savoir avec MySQL est que les connexions de l'hôte local sont normalement détournées via un socket de domaine Unix (c'est-à-dire un «fichier» dans le système de fichiers) pour des raisons de performances. Parfois, vous obtenez un échec d'autorisation refusée parce que le socket n'est pas présent ou n'est pas accessible à l'utilisateur établissant la connexion, ou que l'utilisateur a inclus "localhost" dans la table des permissions MySQL alors qu'il devrait être "127.0.0.1" ou vice versa. Enfin, dans ce mix, avec IPv6, certaines piles de réseaux OS sont désormais réglées par défaut sur ":: 1" (l'équivalent IPv6 de 127.0.0.1) à la place.

Vérifiez à nouveau ce que contient la table des autorisations de la base de données: les trois (hôte, utilisateur, mot de passe) doivent correspondre pour que l'accès soit accordé. Mon expérience est que le wildcard-host: "%" n'est pas fiable, donc j'évite de l'utiliser.

Vous pouvez essayer de définir le 127 ... sur "localhost" à la fois dans drupal et dans la table des permissions de MySQL.

HTH


1 commentaires

J'ai changé le nom d'utilisateur en «drupal», ajouté à la fois drupal @ localhost et drupal@127.0.0.1 aux tables des utilisateurs MySQL. Même erreur. J'ai confirmé que mysql écoutait uniquement sur ip4 0.0.0.0. J'ai confirmé via la ligne de commande mysql que l'utilisateur drupal peut accéder à cette table à partir des hôtes localhost et 127.0.0.1



1
votes

Après de nombreuses expérimentations, le problème découle de l'installation de PHP 7.2 sur CentOS 7. (qui n'est livré qu'avec PHP 5.x)

Je n'ai jamais pu le faire fonctionner, mais après avoir construit un nouvel ubuntu qui inclut PHP 7, tout a semblé fonctionner.

Je n'ai pas pu retracer cela jusqu'à un seul module / paramètre / package. Mais la solution est de ne pas tenter sur CentOS 7 (en utilisant remi repo pour les packages PHP7x)


0 commentaires

1
votes

Il y a de fortes chances que SELinux soit impliqué. Supposons que vous utilisez 127.0.0.1 au lieu de localhost ? J'ai eu exactement la même erreur (mais j'ai vraiment essayé de me connecter à un hôte distant) et cette réponse m'a aidé moi.

Ainsi, bientôt:

setsebool -P httpd_can_network_connect_db 1


0 commentaires