it-swarm.com.de

Wie erstelle ich eine Datenbankverzeichnisstruktur für MySQL?

Ich habe dieses Tutorial verfolgt:

https://www.digitalocean.com/community/tutorials/how-to-use-mysql-with-your-Ruby-on-Rails-application-on-ubuntu-14-04

Bisher habe ich mysql-server mysql-client libmysqlclient-dev installiert und MySQL angewiesen, seine Datenbank zu erstellen Verzeichnisstruktur, in der die Informationen mit Sudo mysql_install_db gespeichert werden.

$ Sudo mysql_install_db

[WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
[ERROR]   The data directory needs to be specified.

Ich dachte, mysqld --initialize würde das Problem lösen:

$ 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

Wie kann ich MySQL anweisen, seine Datenbankverzeichnisstruktur zu erstellen, in der die Informationen gespeichert werden?

3
hussam

Ich konnte das Problem mit einer zuvor beantworteten Frage lösen: Wie installiere ich mysql unter Ubuntu 16.04? , aber ich musste die Lösung so ändern, dass sie für mich funktioniert.

Als ich das /var/lib/mysql -Verzeichnis löschte/verschob, konnte mysqld --initialize das gewünschte Datenbankverzeichnis nicht als Ersatz für /var/lib/mysql erstellen, und es gab mir Errcode: 13 - Permission denied, obwohl ich es vorangestellt hatte Sudo.

Ich habe den Inhalt von /var/lib/mysql/ gelöscht/verschoben, aber nicht das Verzeichnis selbst. Ich habe erneut versucht, Sudo mysql --initialize auszuführen, und es hat funktioniert und neuen Inhalt im Verzeichnis /var/lib/mysql/ erstellt. Der von mysql --initialize erstellte Inhalt unterscheidet sich vom vorherigen Inhalt, den ich gelöscht/verschoben habe.

Ich setzte den Rest der Schritte im Tutorial fort und arbeitete perfekt.

P.S. Ich musste Sudo -i verwenden, um auf /var/lib/mysql zuzugreifen.

2
hussam

Dies ist die gesamte Lösung für Ihr Problem.

Laut fromdual wird empfohlen, nur den Ratschlägen des Fehlers zu folgen. Einige Funktionen sind veraltet.

Es wird empfohlen, die Variable explicit_defaults_for_timestamp jetzt auf Ihren Testsystemen zu aktivieren, damit Sie feststellen können, ob sich Ihre Anwendung gut verhält, und sich dann auf die nächste Version vorzubereiten, wenn diese Funktion zur Standardfunktion wird.

Kurzfristig ist diese Warnung NICHT gefährlich. Langfristig müssen Sie auf die veraltete Funktionalität vorbereitet sein. Die Warnung my setting explicit_defaults_for_timestamp = 1 in Ihrem Abschnitt my.cnf [mysqld] wird entfernt.

Sie können finden Sie die my.cnf -Datei an den folgenden Speicherorten, und in dieser Reihenfolge überschreiben sich die Werte gegenseitig:

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $ MYSQL_HOME/my.cnf
  • [datadir] /my.cnf
  • ~/.my.cnf

Sie können auch Finden Sie Ihre Datei von

find / -name my.cnf

Ich habe folgendes in /etc/mysql/my.cnf hinzugefügt

[mysqld]
explicit_defaults_for_timestamp = 1

Versuchen Sie es jetzt

mysqld --initialize

Und ich habe einen reduzierten Fehler ohne Timestamp-Zeug bekommen

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting

Ist das gut? Ich bin mir nicht sicher, also schaue ich tiefer. Entsprechend dem obigen akzeptierte Stapelantwort für den Fehler müssen Sie

Sudo -i #log into root
cd /var/lib/mysql
rm -r *

su username  # get back to the original user

mysqld --initialize 

Dies gab mir immer noch genau den gleichen Fehler. Keine Änderung!

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting

Ich bin nicht sicher, ob die oben akzeptierte Antwort überhaupt beim Entfernen des /var/lib/mysql geholfen hat, aber Sudo hat geholfen:

Sudo mysqld --initialize

hat funktioniert ... überhaupt kein Fehler!

0
Thej Kiran