Installer les tables MySQL par défaut sous Windows (mysql_install_db)

12

Sous Linux, les tables d'octroi MySQL par défaut peuvent être créées avec le mysql_install_dbscript, mais cela ne fonctionne pas sous Windows.

Comment installer les tables de droits par défaut sous Windows?

(Non, je ne cherche pas la réponse que les résultats de Google regorgent de la façon dont ils sont automatiquement installés sur Windows, car ce n'est que le cas avec la distribution du programme d'installation, pas le package ZIP. En outre, cela n'aide pas après MySQL est installé et le répertoire de données est endommagé ou est remplacé ou autre.)

Synetech
la source

Réponses:

13

Je savais que j'avais déjà fait face à cela avant et j'ai réussi à le comprendre, alors j'ai fouillé mes lecteurs et trouvé un fichier de commandes que j'avais écrit la dernière fois.

Si vous rencontrez ce problème, vous devez exécuter le démon de serveur avec les --bootstrapparamètres.

Voici le script que j'ai utilisé pour vider toutes les bases de données dans un fichier SQL et les réimporter (c'est-à-dire implémenter manuellement et de manière peu pratique un équivalent MySQL à la vacuumcommande 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_"
Synetech
la source
5

Si vous avez eu cet étrange dilemme dans les tables de subvention MySQL pour Windows, je recommande ce qui suit:

Étape 1. Obtenez la distribution ZIP FIle qui ne contient pas le programme d'installation.

Étape 2. Décompressez son contenu pour C:\MySQLZipStuff

Étape 3. Recherchez le dossier C:\MySQLZipStuff\data\mysql

Étape 4. Copiez tous les fichiers dans C:\MySQLZipStuff\data\mysqlle dossier mysql de votre répertoire de données souhaité.

Étape 5 net start mysql

Si vous avez déjà le dossier mysql, vous pouvez le faire à la place:

Étape 1. Modifiez my.inien ajoutant cette ligne dans la section [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Étape 2. net stop mysql

Étape 3. net start mysql

À ce stade, vous pouvez simplement taper «mysql» et vous y êtes. Cependant, vous ne pouvez pas exécuter les commandes GRANT avec les tables d'autorisation désactivées.

Étape 4. Vous devrez saisir manuellement un superutilisateur. Comme ça

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

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

Cela affichera toutes les colonnes de la table utilisateur. Vous devrez modifier manuellement chaque colonne comme ceci:

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

c) Configurez un mot de passe pour root @ localhost comme ceci:

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

Étape 5. Retirez skip-grant-tableset skip-networkingdemy.ini

Étape 6 net stop mysql

Étape 7 net start mysql

Vous pouvez maintenant vous connecter à mysql en tant que root en utilisant le mot de passe "anypasswordyouwant".

Essaie !!!

RolandoMySQLDBA
la source
Merci pour les conseils; c'est beaucoup d'étapes considérant que sous Linux, cela ne prend qu'un seul script. :-(
Synetech
3

FYI,

c'est --initializemaintenant, au lieu du déprécié--bootstrap


NB. par souci d'exhaustivité:

Pour exécuter cela en utilisant un compte non privilégié:

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

Démarrez ensuite le serveur:

mysqld.exe   --log_syslog=0 --console --standalone
Imifos
la source
2

Pour toute personne qui utilise XAMPP et rencontre ce problème, XAMPP est livré avec une sauvegarde de ces tables mysql par défaut.

Copiez tout dans ce dossier C:\xampp\mysql\backup\mysqlet collez-le C:\xampp\mysql\data\mysql, en écrasant tout.

Soyez averti: les données peuvent être perdues - je ne sais pas, j'ai eu une installation propre.

Gorges d'Alec
la source
C'est pratique pour XAMPP, mais c'est un scénario d'utilisation assez limité car MySQL est beaucoup plus polyvalent qu'un simple serveur Web.
Synetech
Oh, je sais. Je voulais juste le publier là-bas pour toute personne ayant atterri sur cette page après avoir recherché cette erreur sur Google et utilisant également XAMPP (comme moi). Je ne m'attends pas à ce que cela soit marqué comme accepté, mais à être laissé comme référence pour les autres.
Alec Gorge
D'accord cool. Je ne savais pas que devoir réinitialiser manuellement XAMPP était un problème courant.
Synetech
Ce n'est pas le cas, je ne sais pas comment cela s'est produit et je ne voulais pas réexécuter le programme d'installation de peur d'écraser les fichiers de configuration soigneusement entretenus: P
Alec Gorge
Oh, je sais! Étant donné que MySQL n'a pas de méthode intégrée pour réduire le fichier de base de données (comme la vacuumcommande de SQLite3, et al.), Je dois le vider manuellement et en créer un nouveau de temps en temps car je n'ai pas beaucoup d'espace; mais je suis toujours inquiet de le faire, alors je le remets le plus longtemps possible.
Synetech