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 don’t 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.