Installazione delle tabelle MySQL predefinite in Windows (mysql_install_db)


12

In Linux, le tabelle di concessione MySQL predefinite possono essere create con lo mysql_install_dbscript, ma ciò non funziona su Windows.

Come è possibile installare le tabelle di concessione predefinite su Windows?

(No, non sto cercando la risposta che i risultati di Google sono pieni di come vengono installati automaticamente su Windows, perché questo è solo il caso della distribuzione del programma di installazione, non del pacchetto ZIP. Inoltre, ciò non aiuta dopo MySQL è installato e la directory dei dati è danneggiata o viene sostituita o simili.)

Risposte:


13

Sapevo di averlo affrontato prima e sono riuscito a capirlo, quindi ho cercato le mie unità e ho trovato un file batch che avevo scritto l'ultima volta.

Per tutti coloro che riscontrano questo problema, è necessario eseguire il demone del server con i --bootstrapparametri.

Ecco lo script che ho usato per scaricare tutti i database in un file SQL e reimportarli (ovvero, manualmente e in modo inopportuno, implementando una controparte MySQL al vacuumcomando di SQLite ).

::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_"

5

Se hai avuto questo strano dilemma nelle tabelle delle sovvenzioni MySQL per Windows, ti consiglio quanto segue:

Passaggio 1. Ottieni la distribuzione ZIP FIle che non contiene il programma di installazione.

Passaggio 2. Decomprimere il contenuto C:\MySQLZipStuff

Passaggio 3. Cerca la cartella C:\MySQLZipStuff\data\mysql

Passaggio 4. Copiare tutti i file nella C:\MySQLZipStuff\data\mysqlcartella mysql della directory di dati desiderata.

Passaggio 5. net start mysql

Se hai già la cartella mysql puoi invece farlo:

Passaggio 1. Modifica my.iniaggiungendo questa riga nella sezione [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Passo 2. net stop mysql

Passaggio 3. net start mysql

A questo punto, puoi semplicemente digitare 'mysql' e ci sei dentro. Tuttavia, non puoi eseguire i comandi GRANT con le tabelle di concessione disabilitate.

Passaggio 4. Dovrai inserire manualmente un superutente. Come questo

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

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

Questo mostrerà tutte le colonne nella tabella utente. Dovrai cambiare manualmente ogni colonna in questo modo:

AGGIORNA mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... DOVE user = 'root' AND host = 'localhost';

c) Configurare una password per root @ localhost in questo modo:

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

Passaggio 5. Rimuovere skip-grant-tablese skip-networkingdamy.ini

Passaggio 6. net stop mysql

Passaggio 7 net start mysql

Ora puoi accedere a mysql come root usando 'whateverpasswordyouwant' come password.

Provaci !!!


Grazie per i suggerimenti; sono molti passaggi considerando che su Linux ci vuole solo un singolo script. :-(
Synetech

3

Cordiali saluti,

è --initializeora, invece che deprecato--bootstrap


NB. per amor di completezza:

Per eseguirlo utilizzando un account senza privilegi:

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

Quindi avviare il server:

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

2

Per chiunque utilizzi XAMPP e riscontri questo problema, XAMPP viene fornito con un backup di queste tabelle mysql predefinite.

Copia tutto in questa cartella C:\xampp\mysql\backup\mysqle incollalo C:\xampp\mysql\data\mysql, sovrascrivendo tutto.

Attenzione: i dati potrebbero andare persi - Non saprei, ho avuto un'installazione pulita.


È utile per XAMPP, ma è uno scenario di utilizzo piuttosto limitato poiché MySQL è molto più generico di un singolo web server.
Synetech,

Oh lo so. Volevo solo postarlo lì per chiunque sia arrivato su questa pagina dopo aver cercato su Google per quell'errore e usa anche XAMPP (come me). Non mi aspetto che questo sia contrassegnato come accettato, ma che sia lasciato come riferimento per gli altri.
Alec Gorge,

Va bene, d'accordo. Non mi ero reso conto che dover ripristinare manualmente XAMPP fosse un problema comune.
Synetech,

No, non ho idea di come sia successo e non volevo ripetere l'installazione per paura di sovrascrivere file di configurazione ben curati: P
Alec Gorge,

Oh lo so! Dato che MySQL non ha un metodo integrato per ridurre il file di database (come il vacuumcomando di SQLite3, et. Al.), Devo scaricarlo manualmente e crearne uno nuovo di tanto in tanto poiché non ho molto spazio; ma sono sempre preoccupato di farlo, quindi l'ho rimandato il più a lungo possibile.
Synetech,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.