Aller au contenu

"Doctrine Connection refused" avec Symfony 3 en prod - création base de données


Messages recommandés

Bonjour,

Je fais appel à vous suite à de très nombreux jours de recherche sans succès...

Je n'arrive pas à me connecter à la base de données de prod.

J'ai un fichier parameters.yml avec mes identifiants de prod et de dev :

parameters:
    database_host: localhost
    database_port: 8889
    database_name: contratloctool
    database_user: root
    database_password: root
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    secret: xxxx
    database_host_prod: localhost
    database_port_prod: 3306
    database_name_prod: contratloctool
    database_user_prod: root
    database_password_prod: xxxx

Dans mon config.yml j'ai :

# Doctrine Configuration
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                unix_socket: /tmp/mysql.sock
            prod:
                driver:   pdo_mysql
                host:     "%database_host_prod%"
                port:     "%database_port_prod%"
                dbname:   "%database_name_prod%"
                user:     "%database_user_prod%"
                password: "%database_password_prod%"
                charset:  UTF8
                unix_socket: /tmp/mysql.sock

En réalité je ne sais pas vraiment quels identifiants mettre (ceux de MariaDB ? de l'utilisateur ? ... de même, quel est le "host" à renseigner en prod ? le nom du Synology ? Il y a très peu de docs à ce sujet malheureusement et c'est pas très clair ...

Quand je veux faire un php bin/console doctrine:schema:create -e prod par exemple, j'ai une belle erreur avec la trace associée :

[Doctrine\DBAL\Exception\ConnectionException]                              
  An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused  
                                                                             

Exception trace:
 () at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:103
 Doctrine\DBAL\Driver\AbstractMySQLDriver->convertException() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:145
 Doctrine\DBAL\DBALException::driverException() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php:47
 Doctrine\DBAL\Driver\PDOMySql\Driver->connect() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:360
 Doctrine\DBAL\Connection->connect() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:429
 Doctrine\DBAL\Connection->getDatabasePlatformVersion() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:389
 Doctrine\DBAL\Connection->detectDatabasePlatform() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:328
 Doctrine\DBAL\Connection->getDatabasePlatform() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:763
 Doctrine\ORM\Mapping\ClassMetadataFactory->getTargetPlatform() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:616
 Doctrine\ORM\Mapping\ClassMetadataFactory->completeIdGeneratorMapping() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:174
 Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332
 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78
 Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:216
 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:115
 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getAllMetadata() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php:59
 Doctrine\ORM\Tools\Console\Command\SchemaTool\AbstractCommand->execute() at /volume1/Web/contratloctool/sources/v0.3/vendor/doctrine/doctrine-bundle/Command/Proxy/CreateSchemaDoctrineCommand.php:51
 Doctrine\Bundle\DoctrineBundle\Command\Proxy\CreateSchemaDoctrineCommand->execute() at /volume1/Web/contratloctool/sources/v0.3/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:262
 Symfony\Component\Console\Command\Command->run() at /volume1/Web/contratloctool/sources/v0.3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:848
 Symfony\Component\Console\Application->doRunCommand() at /volume1/Web/contratloctool/sources/v0.3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:190
 Symfony\Component\Console\Application->doRun() at /volume1/Web/contratloctool/sources/v0.3/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:80
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /volume1/Web/contratloctool/sources/v0.3/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:121
 Symfony\Component\Console\Application->run() at /volume1/Web/contratloctool/sources/v0.3/bin/console:29

MERCI d'avoir pris le temps de lire et de m'aider, je suis dans l'impasse la plus totale :(

Bonne soirée

Lien vers le commentaire
Partager sur d’autres sites

Tu dois utiliser les identifiants du compte que tu as créé dans la base de données, si tu n'as pas créé de compte et de base pour ton appli (c'est mal), tu peux utiliser le compte root avec le mot de passe que tu as renseigné en installant le paquet mariadb.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut Fenrir ! 

Merci de ta réponse rapide, la mienne l'était un peu moins (je n'ai pas reçu de mail de notif je sais pas pourquoi :) )

Justement, j'en ai créé plusieurs d'utilisateurs, mais je ne sais pas forcément quoi mettre en nom d'hôte ... Comment dire que le serveur est le NAS lui-même ? et quand je me connecte avec cet utilisateur, dois je mettre par ex root@mon-hote dans le formulaire de connexion ?

Merci beaucoup !

Lien vers le commentaire
Partager sur d’autres sites

Ca ne marche toujours pas. 

Voici mon parameters.yml : 

database_host_prod: localhost
database_port_prod: null
database_name_prod: contratloctool
database_user_prod: root
database_password_prod: null

Et je lance cette commande dans ma console (en utilisateur root ou mon propre user) :

php56 bin/console doctrine:schema:create --dump-sql -e prod

Et mon erreur :

[Doctrine\DBAL\Exception\ConnectionException]                              
  An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused

 

Capture d’écran 2017-06-25 à 21.01.55.png

Lien vers le commentaire
Partager sur d’autres sites

Toujours le même problème, avec un utilisateur, un mot de passe, et localhost comme "host"... je les ai renseigné dans le parameters.yml

La base est créée dans PHPMyAdmin, faut-il y créer aussi les tables ?

Lorsque je lance ma commande de création :

php56 bin/console doctrine:schema:create --dump-sql -e prod

j'ai encore et toujours le même problème...

Lien vers le commentaire
Partager sur d’autres sites

J'arrive à afficher "There are no tables" à la fois dans le terminal, ainsi que dans le navigateur

J'ai rajouté des options dans config.yml (il manquait les entity manager, suite au rajout d'une connection) :

# Doctrine Configuration
doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                unix_socket: /tmp/mysql.sock
            prod:
                driver:   pdo_mysql
                host:     "%database_host_prod%"
                port:     "%database_port_prod%"
                dbname:   "%database_name_prod%"
                user:     "%database_user_prod%"
                password: "%database_password_prod%"
                charset:  UTF8
                unix_socket: /tmp/mysql.sock


        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: "%kernel.root_dir%/data/data.db3"
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #     path:     "%database_path%"

    #orm:
        #auto_generate_proxy_classes: "%kernel.debug%"
        #naming_strategy: doctrine.orm.naming_strategy.underscore
        #auto_mapping: true
    orm:
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    AppBundle: ~
                    ContratBundle: ~
                    LocataireBundle: ~
                    UserBundle: ~
            prod:
                connection: prod
                mappings:
                    AppBundle: ~
                    ContratBundle: ~
                    LocataireBundle: ~
                    UserBundle: ~

Et lors de cette commande php56 bin/console doctrine:database:create --connection prod , j'ai ce soucis :

An exception occured in driver: SQLSTATE[HY000] [2002] No such file or directory

Toujours bloqué donc...

Lien vers le commentaire
Partager sur d’autres sites

Ça veut dire que la base existe, les identifiants sont bon, la connexion est ok.

Le problème vient donc de ton code ou de l’initialisation de la base, il faut que tu demandes au développeur de l'appli.

Essaye de mettre ça en commentaire

Le 14/06/2017 à 19:29, maxougl a dit :

unix_socket: /tmp/mysql.sock

 

Lien vers le commentaire
Partager sur d’autres sites

C'est moi le développeur de l'appli ;-) En fait j'ai une appli SF3, qui marche en dev et que je veux faire tourner en prod sur mon NAS

J'ai mis ça en commentaire, j'ai l'erreur :

An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

Pourtant les identifiants sont bons comme tu dis

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, maxougl a dit :

C'est moi le développeur de l'appli ;-)

curieux alors de demander :

Il y a 4 heures, maxougl a dit :

faut-il y créer aussi les tables ?

Si c'est ton code tu devrais le savoir ...

BTW, c'est peut être un souci avec la création de ton objet (tu sembles utiliser PDO), essaye ça :

<?php
$dbname = 'DB';
$dbuser = 'LOGIN';
$dbpass = 'PASS';
$dbhost = 'localhost';

try {
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
    foreach($dbh->query("SHOW TABLES FROM $dbname") as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Erreur : " . $e->getMessage() . "<br/>";
    die();
}
?>

 

Lien vers le commentaire
Partager sur d’autres sites

Bah ouais mais mon code je le connais c'est pas le problème, le soucis c'est la mise en prod de SF sur un Synology et ça y'a très peu de docs dessus :/ C'est en faisant un doctrine:schema:create que j'ai ces problèmes donc bon...

Et le fichier, bah tout marche bien, mais je n'ai pas de tables (ce que le schema create devrait faire)

Lien vers le commentaire
Partager sur d’autres sites

Je n'ai jamais utilisé symfony (de manière générale je n'utilise aucun framework, c'est souvent contre productif, surtout qu'ici tu en empiles 2 si on compte l'orm), mais ton erreur semble "courante", une petite recherche sur le net te sort pas mal de résultats : https://duckduckgo.com/?q=doctrine+An+exception+occured+in+driver%3A+SQLSTATE[HY000]+[1045]+Access+denied&t=ffcm&ia=qa

Je ne vais pas pouvoir t'aider plus et ça sort complétement du cadre de ce forum, tu devrais aller voir par ici : https://stackoverflow.com/questions/tagged/symfony

Lien vers le commentaire
Partager sur d’autres sites

Ca marche, merci ! 

Ouais, en fait c'est surtout que Synology (je trouve) est pas vraiment fait pour y mettre du web un peu poussé, les versions de PHP sont pas simples à gérer, la commande pour redémarrer le serveur Apache, MySql ou autre change sans cesse (il suffit de voir les forums) et la doc Synology sur ce sujet est inexistante (ça fait des mois que je cherche à mettre en ligne cette appli...)

Lien vers le commentaire
Partager sur d’autres sites

il y a 11 minutes, maxougl a dit :

Ca marche, merci !

Où est-ce que ça coinçait alors ?

Il y a 13 heures, maxougl a dit :

unix_socket: /tmp/mysql.sock

Il faut savoir d'avec PDO, le fait d'indiquer localhost comme hôte MySQL force l'utilisation du socket Unix. Je ne sais pas s'il en est de même pour les autres extensions mysql de PHP (mysql et mysqli).

Citation

When the host name is set to "localhost", then the connection to the server is made thru a domain socket.

Source : http://php.net/manual/en/ref.pdo-mysql.connection.php

Dans tous les cas, sur un NAS Synology ce socket se situe dans /run/mysqld/mysqld.sock (pour l'instant).

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.