mysql_install_db: So legen Sie das Root-Passwort fest

7

mysql 5.6 scheint eine neue Option --random-passwords für mysql_install_db zu haben, mit der ich das Root-Passwort ermitteln kann: http://dev.mysql.com/doc/refman/5.6/en/mysql-install-db.html# option_mysql_install_db_random-passwords

Aber was kann ich mit MySQL 5.5 machen? Die Dokumentation schlägt vor, dass das Root-Passwort leer sein sollte, aber ich kann anscheinend keine Verbindung mit keinem Passwort (oder einem leeren Passwort) herstellen, sodass ich kein echtes Root-Passwort festlegen kann:

Zum Beispiel:

Ich initialisiere die Datenbank wie folgt:

$ mysql_install_db --no-defaults --user=murrayc --datadir=/tmp/testmysql/data

Ich starte den Server wie folgt:

$ mysqld_safe --no-defaults --user=murrayc --port=3308 --datadir='/tmp/testmysql/data' --socket='/tmp/testmysql/mysqld.sock' --pid-file='/tmp/testmysql/pid'

Aber wenn ich versuche, das Root-Passwort so festzulegen (ich glaube, dass sich --user in diesem Fall auf den MySQL-Benutzer bezieht, nicht auf den Linux-Benutzer):

$ mysqladmin --no-defaults --port=3308 --user=root --password='' password 'somenewpassword'

Ich erhalte diesen Fehler:

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
Murrayc
quelle

Antworten:

6

Hat bei der Installation root@localhostkein Passwort.

Sie sollten in der Lage sein, eine Verbindung ohne Passwort herzustellen, indem Sie einfach Folgendes tun:

$ mysql -uroot

Versuche Folgendes:

$ mysqladmin --no-defaults --port=3308 --user=root password 'somenewpassword'

oder du kannst es hartnäckig machen:

$ service mysql restart --skip-grant-tables --skip-networking
$ mysql -e"UPDATE mysql.user SET password=password('somenewpassword') WHERE user='root'"
$ service mysql restart
$ mysql -uroot -p

UPDATE 2013-01-02 16:47 EDT

Es tut mir leid, ich habe die Portnummer übersehen.

Hier ist das Problem: Sie können root @ localhost nicht für einen Nicht-3306-Port verwenden, es sei denn, Sie verwenden das TCP / IP-Protokoll. Bitte versuchen Sie dies:

$ mysqladmin --no-defaults --port=3308 --user=root --protocol=tcp password 'somenewpassword'
RolandoMySQLDBA
quelle
Nein, das ist der Punkt. Eine Anmeldung ohne Passwort ist nicht möglich: 10:41:12 ~$ mysql -uroot --port=3311 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) Befehle wie "service mysql restart" gelten für den regulären mysql-Prozess des Systems. Ich initialisiere eine separate Datenbank und starte eine separate mysqld-Instanz.
Murrayc
Vielen Dank für das Update. Ich könnte nie herausfinden, dass es die Option --protocol benötigt.
Murrayc
-2

Versuche mkdir -p var tmpvorher zu rennen mysql_install_db.

mysql db erstellen ist in meiner situation fehlgeschlagen.

Wenn var und tmp zuvor nicht erstellt wurden und sie als Paras von mysql_install_db verwenden, können wir mysqld erfolgreich starten. Wenn Sie versuchen, MySQL oder Mysqladmin zu verwenden, um eine Verbindung zum Server herzustellen, wurde der Fehler angezeigt: Zugriff für 'root' @ 'localhost' verweigert.

Vielleicht ist die Ursache der Frage bei mir dieselbe.

zhuhongk
quelle
1
Versuchen Sie, das von wo / in welchem ​​Verzeichnis auszuführen? Welchen Fehler soll das lösen?
Mat
basedir von mysql.
Zhuhongk
Bitte bearbeiten Sie das in Ihrer Antwort. Ich bin mir auch nicht sicher, ob ich deinen zweiten Satz verstehe. Könnten Sie das klarstellen? Vielen Dank.
Mat