MySQL: error grave: no se pueden abrir y bloquear tablas de privilegios: la tabla 'mysql.host' no existe [cerrado]


9

De repente, mi servidor MySQL 5.5 local dejó de funcionar en mi Windows XP SP3.

También tengo instalado WAMP Apache y WAMP MySQL, pero WAMP MySQL no se está ejecutando. El registro de errores muestra:

  • No se puede iniciar el servidor: Enlace en el puerto TCP / IP: No existe tal archivo o directorio
  • ¿Ya tiene otro servidor mysqld ejecutándose en el puerto: 3306?

Intenté cambiar el puerto de 3306 a 3307, pero el servicio aún no se iniciaba, dando un error:

El Visor de eventos muestra:

  • Error grave: no se pueden abrir y bloquear tablas de privilegios: la tabla 'mysql.host' no existe
  • No se puede abrir la tabla mysql.plugin. Ejecute mysql_upgrade para crearlo.

Aparentemente, solo puedo ejecutar mysql_upgrade si el servidor se está ejecutando. ¿Cómo puedo crear 'mysql.host' si el servicio no se puede iniciar?

Desinstalé el Servidor MySQL y lo reinstalé, y durante el asistente de configuración después de la instalación, recibo un error: No se pudo iniciar el servicio. Error: 0

¿Cómo procedo desde aquí?


Steve, ¿estás ejecutando esto en Windows, BSD, Linux, OSX o algún otro sistema operativo? Si lo está ejecutando en Windows, los detalles de algunos pasos serán diferentes.
Rik Schneider

@Rik Schneider: Rick, estoy ejecutando MySQL en mi computadora portátil con Windows. Gracias.
Steve

Respuestas:


9

Ejecute el siguiente comando

mysql_install_db

Por cierto, esto es necesario cuando se realiza una instalación en (al menos) Linux CentOS 7. De lo contrario, mysqld no se iniciará. Vi esto cuando corrísystemctl status mysqld.service 2015-02-20 15:41:07 15160 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
Mike S

5

Inicialice mysql antes de comenzar en Windows.

mysqld --initialize

Desearía poder votar esto más de una vez. He estado buscando esta solución simple. ¡Gracias!
Schiavini

1

Lo primero que debe hacer es ejecutar estos comandos:

use mysql
show tables;

Tenga en cuenta las diferencias.

MySQL 5.0 tiene 17 tablas en el esquema mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.1 tiene 23 tablas en el esquema mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.5 tiene 24 tablas en el esquema mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

Tenga en cuenta que mysql.plugin no existe en MySQL 5.0. Es muy posible suponer que de alguna manera instaló MySQL 5.0 e hizo desaparecer las tablas vitales para MySQL 5.5.

Aquí hay algunas buenas noticias. Hay algo que puedes probar.

Para este ejemplo

  • ServerA es donde viven sus datos de MySQL 5.5
  • ServerB es donde creará un entorno MySQL 5.5 separado

Aquí están tus pasos

  1. En ServerA, mkdir / root / myusers
  2. En ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Instale MySQL 5.5 en ServerB
  4. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  5. En ServerA, cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. servicio mysql start

Eso es.

Si está ejecutando esto en Windows, deben aplicarse los mismos principios.

Darle una oportunidad !!!

ACTUALIZACIÓN 2011-07-29 16:15 EDT

Si sus nombres de usuario tenían privilegios específicos de base de datos, estos son sus pasos

  1. En ServerA, mkdir / root / myusers
  2. En ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. En ServerA, cp /var/lib/mysql/mysql/db.* / root / myusers /.
  4. Instale MySQL 5.5 en ServerB
  5. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  6. En ServerA, cp / root / myusers / * / var / lib / mysql / mysql /.
  7. servicio mysql start

0

No se pudo iniciar el servicio. Error: 0

Agregue la ruta MySQL a las variables de entorno.


Gracias, pero ya estaba en la variable Ruta.
Steve

0

parece que ya tienes MySQL corriendo

tratar

ps ax|grep mysql

si ve algún resultado, probablemente necesite detenerlo (o reiniciar el cuadro).

Si no ve ningún resultado, intente ejecutar mysqld sin demonizar y ver el resultado.


0

Agregué una etiqueta de Windows para ayudar a las personas a responder la pregunta.

Mi fondo no es Windows, pero se aplican los principios.

¿Ya hay un proceso mysql ejecutándose? Si es así, deberá eliminarlo antes de desinstalarlo. Si aún se estaba ejecutando cuando intentó desinstalar / reinstalar, tendrá procesos y archivos que le impiden desinstalar por completo.

Abra la ventana de servicios, busque cualquier cosa con mysql en el nombre y asegúrese de que esté configurado para no intentar comenzar con un reinicio. Luego abra la pestaña de procesos en ejecución de la ventana de programas en ejecución (use CTRL-ALT-DEL para abrir) y busque y elimine los procesos en ejecución con mysql en el nombre.

Si está satisfecho de que no hay más procesos mysql en ejecución, puede continuar. Es posible que desee reiniciar para asegurarse de que no haya más procesos mysql en ejecución.

En este momento, debería poder reinstalar e iniciar mysql.


0

Ejecute mysql-test-run y debería ver el siguiente resultado:

./mysql-test-run
Logging: ./mysql-test-run  
2013-09-14 03:39:32 2566 [Warning] Setting lower_case_table_names=2 because file system for /var/folders/fr/sn4l2f393_v_ytcwkb0lx7_40000gp/T/_M2mZFQPjV/ is case insensitive
2013-09-14 03:39:32 2566 [Note] Plugin 'FEDERATED' is disabled.
2013-09-14 03:39:32 2566 [Note] Binlog end
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'MyISAM'
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'CSV'
MySQL Version 5.6.13
Checking supported features...
 - SSL connections supported
Using suites: main,sys_vars,binlog,federated,rpl,innodb,innodb_fts,perfschema,funcs_1,opt_trace,parts,auth_sec
Collecting tests...
 - adding combinations for binlog



 - adding combinations for rpl
Removing old var directory...
Creating var directory '/Users/das/mysql/mysql-5.6.13-osx10.7-x86_64/mysql-test/var'...
Installing system database...
Using server port 50409

==============================================================================

TEST                                      RESULT   TIME (ms) or COMMENT
--------------------------------------------------------------------------

0

Si mueve su datadir, no solo necesita otorgar los nuevos permisos de datadir, sino que debe asegurarse de que todos los directorios principales tengan permiso.

Moví mi datadir a un disco duro, montado en Ubuntu como:

/media/*user*/Data/

y mi datadir era Bases de datos .

Tuve que establecer permisos en 771 para cada uno de los directorios de medios, usuarios y datos:

sudo chmod 771 *DIR*

Si esto no funciona, otra forma de hacer que mysql funcione es cambiar el usuario en /etc/mysql/my.cnf a root; aunque no hay duda de algunos problemas al hacerlo desde una perspectiva de seguridad.

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.