Je suivais ce tutoriel:
Jusqu'ici, j'ai installé mysql-server mysql-client libmysqlclient-dev , et j’étais supposé dire à MySQL de créer sa structure de répertoires de base de données où il stockera ses informations en utilisant Sudo mysql_install_db
.
$ Sudo mysql_install_db
[WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
[ERROR] The data directory needs to be specified.
Je pensais que lancer mysqld --initialize
résoudrait le problème:
$ mysqld --initialize
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
[ERROR] Aborting
Comment puis-je dire à MySQL de créer sa structure de répertoires de base de données où il stockera ses informations?
J'ai réussi à résoudre le problème en utilisant une question précédemment répondue, Comment installer mysql sur Ubuntu 16.04 , mais je devais modifier la solution pour qu'elle fonctionne à ma place.
Lorsque j'ai supprimé/déplacé le répertoire /var/lib/mysql
, mysqld --initialize
n'a pas pu créer le répertoire de base de données que je souhaite en remplacement de /var/lib/mysql
, et il m'a donné Errcode: 13 - Permission denied
même si je l'ai précédé Sudo
.
J'ai supprimé/déplacé le contenu de /var/lib/mysql/
, mais pas le répertoire lui-même. J'ai de nouveau essayé de lancer Sudo mysql --initialize
, et cela a fonctionné. J'ai créé un nouveau contenu dans le répertoire /var/lib/mysql/
. Le contenu produit par mysql --initialize
est différent du contenu précédent que j'ai supprimé/déplacé.
J'ai continué le reste des étapes du tutoriel et j'ai parfaitement fonctionné.
P.S. J'avais besoin d'utiliser Sudo -i
pour accéder à /var/lib/mysql
.
C'est la solution complète pour votre problème.
Selon fromdual , il est suggéré de suivre simplement le conseil de l'erreur. Certaines fonctionnalités sont obsolètes.
Notre conseil est d'activer la variable explicit_defaults_for_timestamp maintenant sur vos systèmes de test afin de voir si votre application se comporte bien et vous êtes prêt pour la prochaine version lorsque cette fonctionnalité deviendra la valeur par défaut.
À court terme, cet avertissement n'est PAS dangereux. À long terme, vous devez être prêt pour la fonctionnalité déconseillée. Vous vous débarrassez de l'avertissement my setting explicit_defaults_for_timestamp = 1 dans votre section my.cnf [mysqld].
Vous pouvez trouver le fichier my.cnf
aux emplacements suivants, et dans cet ordre les valeurs se substituent:
Vous pouvez aussi trouver votre fichier par
find / -name my.cnf
J'ai ajouté ce qui suit dans /etc/mysql/my.cnf
[mysqld]
explicit_defaults_for_timestamp = 1
Maintenant essaye
mysqld --initialize
Et j'ai eu une erreur réduite sans trucs d'horodatage
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting
Est-ce que c'est bon? Pas sûr alors je regarde plus profondément. Selon ce qui précède réponse de pile acceptée pour l’erreur vous devez
Sudo -i #log into root
cd /var/lib/mysql
rm -r *
su username # get back to the original user
mysqld --initialize
Ceci, m'a toujours donné exactement la même erreur. Pas de changement!
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting
Je ne suis pas sûr que la réponse acceptée ci-dessus ait aidé à supprimer le /var/lib/mysql
, mais Sudo
a aidé:
Sudo mysqld --initialize
travaillé ... pas d'erreur du tout!