Instalación de tablas MySQL predeterminadas en Windows (mysql_install_db)


12

En Linux, las tablas de concesión de MySQL predeterminadas se pueden crear con el mysql_install_dbscript, pero eso no funciona en Windows.

¿Cómo se pueden instalar las tablas de concesión predeterminadas en Windows?

(No, no estoy buscando la respuesta de que los resultados de Google están llenos de cómo se instalan automáticamente en Windows, porque ese es solo el caso con la distribución del instalador, no con el paquete ZIP. Además, eso no ayuda después MySQL está instalado y el directorio de datos está dañado o está siendo reemplazado o tal).

Respuestas:


13

Sabía que me había enfrentado a esto antes y logré resolverlo, así que busqué en mis unidades y encontré un archivo por lotes que había escrito la última vez.

Para cualquier otra persona que experimente este problema, lo que debe hacer es ejecutar el demonio del servidor con los --bootstrapparámetros.

Aquí está la secuencia de comandos que utilicé para volcar todas las bases de datos en un archivo SQL y volver a importarlas (es decir, de forma manual e inconveniente, implementando una contraparte de MySQL para el vacuumcomando de 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

Si ha tenido este extraño dilema en las tablas de concesión de MySQL para Windows, le recomiendo lo siguiente:

Paso 1. Obtenga la distribución del archivo ZIP que no tiene el instalador.

Paso 2. Descomprima su contenido para C:\MySQLZipStuff

Paso 3. Busca la carpeta C:\MySQLZipStuff\data\mysql

Paso 4. Copie todos los archivos en C:\MySQLZipStuff\data\mysqlla carpeta mysql de su directorio de datos deseado.

Paso 5 net start mysql

Si ya tiene la carpeta mysql, puede hacer esto en su lugar:

Paso 1. Edite my.iniagregando esta línea en la sección [mysqld]

[mysqld]
skip-grant-tables
skip-networking

Paso 2. net stop mysql

Paso 3. net start mysql

En este punto, puede escribir 'mysql' y ya está. Sin embargo, no puede ejecutar comandos GRANT con las tablas de concesión deshabilitadas.

Paso 4. Tendrá que ingresar un superusuario manualmente. Me gusta esto

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

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

Esto mostrará todas las columnas en la tabla de usuario. Tendrá que cambiar manualmente cada columna de esta manera:

ACTUALIZAR mysql.user SET select_priv = 'Y', insert_priv = 'Y', ... DONDE user = 'root' AND host = 'localhost';

c) Configure una contraseña para root @ localhost de esta manera:

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

Paso 5. Eliminar skip-grant-tablesy skip-networkingdemy.ini

Paso 6 net stop mysql

Paso 7 net start mysql

Ahora puede iniciar sesión en mysql como root usando 'whateverpasswordyouwant' como contraseña.

Darle una oportunidad !!!


Gracias por los consejos; Esos son muchos pasos teniendo en cuenta que en Linux solo se necesita un único script. :-(
Synetech

3

FYI

es --initializeahora, en lugar de lo obsoleto--bootstrap


NÓTESE BIEN. en aras de la exhaustividad:

Para ejecutar esto usando una cuenta sin privilegios:

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

Luego inicie el servidor:

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

2

Para cualquiera que use XAMPP y experimente este problema, XAMPP se entrega con una copia de seguridad de estas tablas mysql predeterminadas.

Copie todo en esta carpeta C:\xampp\mysql\backup\mysqly péguelo C:\xampp\mysql\data\mysql, sobrescribiendo todo.

Tenga cuidado: los datos pueden perderse; no lo sé, tuve una instalación limpia.


Eso es útil para XAMPP, pero es un escenario de caso de uso bastante limitado ya que MySQL es mucho más de uso general que un solo servidor web.
Synetech

Oh, lo sé. Solo quería publicar eso allí para cualquier persona que aterrizó en esta página después de buscar en Google ese error y también usa XAMPP (como yo). No espero que esto se marque como aceptado, sino que se deje como referencia para otros.
Alec Gorge

Ok, genial No me di cuenta de que tener que reiniciar manualmente XAMPP era un problema común.
Synetech

No lo es, no tengo idea de cómo sucedió esto y no quería volver a ejecutar el instalador por temor a sobrescribir los archivos de configuración cuidadosamente cuidados: P
Alec Gorge

¡Oh, lo sé! Como MySQL no tiene un método integrado para reducir el archivo de la base de datos (como el vacuumcomando de SQLite3, et. Al.), Tengo que volcarlo manualmente y crear uno nuevo de vez en cuando, ya que no tengo mucho espacio; pero siempre me preocupa hacerlo, así que lo pospuse el mayor tiempo posible.
Synetech
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.