Partage
  • Partager sur Facebook
  • Partager sur Twitter

Migration base de données

Doctrine avec Symfony5

Sujet résolu
6 avril 2020 à 17:03:02

Bonjour,

Je suis entrain de créer un site web avec Symfony5. J'en suis à la création de la base de données

J'ai via MakerBundle créé plusieurs entité. Ensuite dans le .env j'ai modifier la variable DATABASE_URL pour qu'elle corresponde à l'adresse du serveur mysql.

Jusque là tout va bien, mais quand j'ai fait mon

symfony console doctrine:database:create

ma console m'a renvoyé une grosse erreur :

In AbstractMySQLDriver.php line 106:
                                                                                                                     
  An exception occurred in driver: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the  
   client                                                                                                            
                                                                                                                     

In PDOConnection.php line 31:
                                                                                           
  SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client  
                                                                                           

In PDOConnection.php line 27:
                                                                                           
  SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client  
                                                                                           

In PDOConnection.php line 27:
                                                                                                                
  PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]  
                                                                                                                

Donc je n'arrive pas à créer ma base de données directement depuis la console.

Pour info : Le serveur mysql existe bien, j'y ai accès depuis DataGrip

Je suis sous Fedora 31 avec php à la version 7.3.16 (cli)
et pour mysql j'ai installé community-mysql à la version 8.0.19


  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
6 avril 2020 à 17:35:43

La section MySQL 8 devrait répondre à ta question : https://www.php.net/manual/fr/ref.pdo-mysql.php

  • Partager sur Facebook
  • Partager sur Twitter
6 avril 2020 à 19:03:08

Ca à bien l'air d'être mon problème, mais le seul fichier 'my.cnf' que j'ai trouvé était dans le /etc et contenait de base

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

J'ai bien essayé de rajouter le fameux paramètre du plugin comme demandé dans la doc.

Mais après avoir restart mysql, aucun changement du côté de symfony

edit :

En regardant dans la table mysql.user, il y a une colonne par rapport au plugin utilisé, j'ai changé la valeur à celle donnée php.net.

Je n'ai plus l'erreur du pdo, mais j'ai une autre erreur un peu plus grave :

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

Je ne peux plus me connecter à ma base de données, donc je peux pas revenir en arrière et remettre l'ancienne valeur.

J'ai essayé de réinstaller mysql, mais ça ne change rien

Je sais plus quoi faire :(

-
Edité par Gashmob 6 avril 2020 à 20:35:35

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
6 avril 2020 à 22:53:31

Desinstaller MySQL ne supprime pas ses données donc c'est normal !

Quel est ton environnement ? Tu dis faire tourner PHP 7.3 mais le problème que tu décris ne s'applique a priori qu'aux premières 7.1 et 7.2 🤔

  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 12:06:39

Je suis sous Fedora 31

php -v me renvoie :

PHP 7.3.16 (cli) (built: Mar 17 2020 10:18:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.16, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.16, Copyright (c) 1999-2018, by Zend Technologies

et mysql -V me renvoie :

mysql  Ver 8.0.19 for Linux on x86_64 (Source distribution)




  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 15:05:10

Ah il semblerait que le support ne date que de PHP 7.4.4..! (https://www.php.net/ChangeLog-7.php#7.4.4)

Si tu n’as pas possibilité de mettre à jour alors il faudra lancer une requête du genre

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'rootpassword';



  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 15:31:21

Après avoir regardé mes mises à jour, il me dit que mon paquet php-cli est à jour, donc c'est que dans les dépot fedora (a priori) ils ont pas mieux. Donc je peux update php à la 7.4.4

Donc j'ai essayé de faire la commande :

mysql -u root "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'rootpassword'" -p

Ca me demande mon mot de passe, je le rentre, et ça me renvoie :

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Dis-moi si je me suis trompé dans la commande, mais je ne vois pas d'autre manière de faire. Car même juste 'mysql -u root -p' me renvoie cette erreur :(

-
Edité par Gashmob 7 avril 2020 à 15:31:39

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 16:05:10

Redémarre MySQL avec l’option -skip-grant-tables ; tu devrais pouvoir exécuter ta requête ensuite.
  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 16:45:10

D'habitude pour redémarer mysql, je fais 'systemctl restart mysqld.service'. Or il ne reconnait pas cette option

Donc j'ai fait 'mysqld --skip-grant-tables' et voici ce qu'il me renvoie :

2020-04-07T14:42:42.298775Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld 8.0.19) starting as process 19298
2020-04-07T14:42:42.299665Z 0 [ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
2020-04-07T14:42:42.299704Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-04-07T14:42:42.299797Z 0 [System] [MY-010910] [Server] /usr/libexec/mysqld: Shutdown complete (mysqld 8.0.19)  Source distribution.

 J'ai cherché une section Security dans le manuel de mysqld, mais il n'y en a pas, même la recherche ne l'a pas trouvé. En lisant un peu plus précisemment, ça parle de lancer en root, donc je suis sorti du root, j'ai lancé la commande sans sudo :

2020-04-07T14:44:33.138695Z 0 [Warning] [MY-010091] [Server] Can't create test file /var/lib/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
2020-04-07T14:44:33.138746Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld 8.0.19) starting as process 19327
2020-04-07T14:44:33.140371Z 0 [Warning] [MY-010091] [Server] Can't create test file /var/lib/mysql/mysqld_tmp_file_case_insensitive_test.lower-test
2020-04-07T14:44:33.140378Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2020-04-07T14:44:33.140510Z 0 [ERROR] [MY-010187] [Server] Could not open file '/var/log/mysql/mysqld.log' for error logging: Permission denied
2020-04-07T14:44:33.140540Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-04-07T14:44:33.140595Z 0 [System] [MY-010910] [Server] /usr/libexec/mysqld: Shutdown complete (mysqld 8.0.19)  Source distribution.



  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 17:03:01

D’après https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html#resetting-permissions-unix lancer MySQL en tant que root nécessite l’option --user=mysql.
  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 17:42:23

Alors j'ai essayé avec la méthode proposé sur le site, et voila ce que ça me fait :

[root@pc-cours kevin]# mysqld --skip-grant-tables --user=mysql &
[2] 23019
[root@pc-cours kevin]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Même en mettant l'option -p pour rentrer un mot de passe, ça ne fonctionne pas

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 17:54:05

Bon je pense que tu peux vider le dossier de données (/var/lib/mysql probablement) et réinstaller MySQL…

Assure-toi également de n’avoir qu’une instance.

  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 18:15:23

J'ai tout effacé, j'ai réinstallé comunity-mysql-server, je l'ai lancé avec 'systemctl start mysqd.service', j'ai fait 'mysql' : ET TOUT FONCTIONNE (danse de la victoire)

Merci beaucoup à MatTheCat.

Pour ce qui est du mot de passe, je le laisse à vide pour l'instant, je verrais quand je mettrais le site sur serveur en mod prod.

Quand j'ai réessayé de faire mon 'symfony console doctrine:database:create', il me renvoie cette erreur ->

In AbstractMySQLDriver.php line 106:
                                                          
  An exception occurred in driver: could not find driver  
                                                          

In PDOConnection.php line 31:
                         
  could not find driver  
                         

In PDOConnection.php line 27:
                         
  could not find driver  

C'est celle que j'avais avant d'installer le mod php pour le driver pdo qui m'a conduit à l'erreur pour laquelle j'ai créé ce sujet.

J'avais installé ce mod du fait que le fichier d'où vient l'erreur s'appelle "PDOConnection.php".

Donc j'hésite à réinstaller ce driver au cas ou ça me ferait retour case départ

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 18:21:07

Es-tu en mesure de lancer la requête ALTER USER ?
  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 18:26:38

A priori oui

J'ai l'habitude de le faire depuis la console de DataGrip

Mais ic ça me renvoie

Operation ALTER USER failed for 'root'@'%'



-
Edité par Gashmob 7 avril 2020 à 18:32:25

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 18:35:45

Je ne sais ce qu'est cette console ; peux-tu lancer la requête depuis le client ?
  • Partager sur Facebook
  • Partager sur Twitter
7 avril 2020 à 18:38:53

Même chose, mise à part que ça précise le code d'erreur

ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'


edit :

J'ai trouvé l'erreur, la bonne requête est :

ALTER USER `root`@`localhost` IDENTIFIED WITH mysql_native_password BY 'rootpassword';

Il manquait le host pour le user qu'on change

-
Edité par Gashmob 7 avril 2020 à 18:44:47

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

Anonyme
7 avril 2020 à 18:48:47

Si même sans PHP tu n'as pas accès à ta base... 😕

Ça dépasse mes connaissances ; j'espère qu'un DBA passera par là ! 

  • Partager sur Facebook
  • Partager sur Twitter
11 avril 2020 à 9:32:27

Après une recherche dans les extensions php, j'ai trouvé l'extension php-mysqlnd qui est d'après la description :un pilote pour mysql.

Donc je l'ai installé, j'ai réessayer la commande et c'est tout bon. J'ai donc pu faire ma migration

  • Partager sur Facebook
  • Partager sur Twitter

while (true) { be happy }

29 janvier 2021 à 23:31:04

Bonjour à tous, 

je me permet de poster ce commentaire pour donner la solution que j'ai trouvé à cette même erreur que j'ai rencontré aujourd'hui. 

Il s'avère que mon problème se trouvait au niveau du fichier .env à la ligne suivante : 

DATABASE_URL="mysql://db_user:password@127.0.0.1:3306/dbname?serverVersion=5.7"

Afin de créer une base de donnée en symfony, il est primordial d'adapter cette ligne à votre configuration. Vous devez remplacer db_user par root, password par root pour ceux pour lesquels le mot de passe est root (pour ma part par exemple) ou sinon ne rien mettre, pour certain serveur local il n'a pas de mot de passe. Ensuite à la place de dbname, vous devez mettre le nom que vous voulez donner à votre futur base. MAIS CE N'EST PAS FINI !! Si vous vous contentez seulement de ces modifications, vous rencontrerez la même erreur ou pas ! Pour ma part, j'ai rencontré cette erreur, car je devais aussi changer le numéro de port, qui est initialement 3306, sauf pour ceux qui utilise MAMP (sur mac), le port qu'utilise MAMP pour mysql est 8889. Donc en remplaçant 3306 par 8889 cela fonctionne :).

  • Partager sur Facebook
  • Partager sur Twitter