Standard-MySQL-Tabellen unter Windows installieren (mysql_install_db)

12

Unter Linux können die Standard-MySQL-Grant-Tabellen mit dem mysql_install_dbSkript erstellt werden, dies funktioniert jedoch nicht unter Windows.

Wie können die Standard-Grant-Tabellen unter Windows installiert werden?

(Nein, ich suche nicht die Antwort, dass Googles Ergebnisse vollgepackt sind mit Informationen darüber, wie sie unter Windows automatisch installiert werden, da dies nur bei der Installationsdistribution der Fall ist, nicht bei dem ZIP-Paket. Außerdem hilft das nachher nicht weiter MySQL ist installiert und das Datenverzeichnis ist beschädigt oder wird ersetzt oder so.)

Synetech
quelle

Antworten:

13

Ich wusste, dass ich das schon einmal erlebt hatte und konnte es herausfinden, also durchsuchte ich meine Laufwerke und fand eine Batchdatei, die ich das letzte Mal geschrieben hatte.

Für alle anderen, bei denen dieses Problem auftritt, müssen Sie den Server-Daemon mit den --bootstrapParametern ausführen .

Hier ist das Skript, mit dem ich alle Datenbanken in eine SQL-Datei kopiert und erneut importiert habe (dh manuell - und unpraktisch - ein MySQL-Gegenstück zum SQLite- vacuumBefehl implementiert habe ).

::Start the server, change to the MySQL bin directory, and dump all databases
net start MySQL
cd       /d "%serverdir%\MySQL\bin"
mysqldump  -uroot -p --all-tablespaces --all-databases --add-drop-database --add-drop-table --add-locks --comments --complete-insert --compress --create-options --events --routines --quick --quote-names --set-charset --triggers > %temp%\all.sql

::Stop the server and rename the data directory (as backup)
net stop mysql
ren         "%datadir%\MySQL"        MySQL_

::Delete data folder in MySQL directory, optionally copy old mysql tables
rd    /s /q "%serverdir%\MySQL\data"
md          "%serverdir%\MySQL\data"
xcopy /s /e "%datadir%\MySQL_\mysql" "%serverdir%\MySQL\data"

::Bootstrap the server (creates grant tables if they dont exist)
mysqld --bootstrap

::Run server, optionally upgrade tables and move upgrade log to data directory
start mysqld --skip-grant-tables
mysql_upgrade --force
move "%serverdir%\MySQL\bin\mysql_upgrade_info" "%serverdir%\MySQL\data"

::Import all databases, shutdown, delete logs, then move to old data dir
mysql      -uroot -p < %temp%\all.sql
mysqladmin -uroot -p shutdown
md  "%datadir%\MySQL"
del "%serverdir%\MySQL\data\ib_logfile?"
xcopy /s /e "%serverdir%\MySQL\data\*" "%datadir%\MySQL"
rd    /s /q "%serverdir%\MySQL\data"

::Start the server, if it works, then all should be well, so del
net start mysql
rd    /s /q "%datadir%\MySQL_"
Synetech
quelle
5

Wenn Sie dieses seltsame Dilemma in MySQL-Grant-Tabellen für Windows hatten, empfehle ich Folgendes:

Schritt 1. Rufen Sie die ZIP-Dateiverteilung ab, auf der sich das Installationsprogramm nicht befindet.

Schritt 2. Entpacke den Inhalt von C:\MySQLZipStuff

Schritt 3. Suchen Sie nach dem Ordner C:\MySQLZipStuff\data\mysql

Schritt 4. Kopieren Sie alle Dateien in C:\MySQLZipStuff\data\mysqlden Ordner mysql Ihres gewünschten Datenverzeichnisses.

Schritt 5. net start mysql

Wenn Sie den Ordner mysql bereits haben, können Sie dies stattdessen tun:

Schritt 1. Bearbeiten Sie, my.iniindem Sie diese Zeile im Abschnitt [mysqld] hinzufügen

[mysqld]
skip-grant-tables
skip-networking

Schritt 2. net stop mysql

Schritt 3. net start mysql

An dieser Stelle können Sie einfach "mysql" eingeben und sind dabei. Sie können jedoch keine GRANT-Befehle mit deaktivierten Grant-Tabellen ausführen.

Schritt 4. Sie müssen einen Superuser manuell eingeben. So was

ein) INSERT INTO mysql.user SET user='root',host='localhost';

b) SELECT * FROM mysql.user WHERE user='root' AND host='localhost'\G

Dadurch werden alle Spalten in der Benutzertabelle angezeigt. Sie müssen jede Spalte wie folgt manuell ändern:

UPDATE mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... WHERE user = 'root' AND host = 'localhost';

c) Richten Sie ein Passwort für root @ localhost wie folgt ein:

UPDATE mysql.user SET password=PASSWORD('whateverpasswordyouwant')
WHERE user='root' AND host='localhost';

Schritt 5. Entfernen Sie skip-grant-tablesund skip-networkingvonmy.ini

Schritt 6. net stop mysql

Schritt 7. net start mysql

Jetzt können Sie sich als root bei mysql anmelden und als Passwort 'whateverpasswordyouwant' verwenden.

Versuche es !!!

RolandoMySQLDBA
quelle
Danke für die Tipps; Das sind viele Schritte, wenn man bedenkt, dass unter Linux nur ein einziges Skript benötigt wird. :-(
Synetech
3

Zu Ihrer Information,

es ist --initializejetzt statt der veralteten--bootstrap


NB. der Vollständigkeit halber:

So führen Sie dies mit einem nicht privilegierten Konto aus:

mysqld.exe --log_syslog=0 --console --standalone --initialize

Dann starte den Server:

mysqld.exe   --log_syslog=0 --console --standalone
Imifos
quelle
2

Für alle Benutzer von XAMPP, bei denen dieses Problem auftritt, wird XAMPP mit einer Sicherung dieser Standard-MySQL-Tabellen ausgeliefert.

Kopieren Sie alles in diesen Ordner, C:\xampp\mysql\backup\mysqlfügen Sie es ein C:\xampp\mysql\data\mysqlund überschreiben Sie alles.

Seien Sie gewarnt: Daten könnten verloren gehen - ich würde nicht wissen, ich hatte eine saubere Installation.

Alec Gorge
quelle
Das ist praktisch für XAMPP, aber es ist ein ziemlich begrenztes Anwendungsszenario, da MySQL viel allgemeiner ist als nur ein einziger Webserver.
Synetech
Oh ich weiss. Ich wollte das nur für jeden posten, der nach dem Googeln auf dieser Seite gelandet ist und auch XAMPP verwendet (wie ich). Ich erwarte nicht, dass dies als akzeptiert markiert wird, sondern als Referenz für andere.
Alec Gorge
Ok cool Ich wusste nicht, dass es ein häufiges Problem ist, XAMPP manuell zurückzusetzen.
Synetech
Es ist nicht so, ich habe keine Ahnung, wie dies passiert ist, und ich wollte das Installationsprogramm nicht erneut ausführen, weil ich befürchte, sorgfältig gepflegte Konfigurationsdateien zu überschreiben: P
Alec Gorge
Oh ich weiss! Da MySQL keine eingebaute Methode zum Verkleinern der Datenbankdatei hat (wie der vacuumBefehl von SQLite3 et al.), Muss ich sie manuell sichern und ab und zu eine neue erstellen, da ich nicht viel Speicherplatz habe. Aber ich mache mir immer Sorgen, also schiebe ich es so lange wie möglich auf.
Synetech,