MySQL: errore irreversibile: impossibile aprire e bloccare le tabelle dei privilegi: la tabella 'mysql.host' non esiste [chiuso]


9

Improvvisamente il mio server MySQL 5.5 locale ha smesso di funzionare sul mio Windows XP SP3.

Ho anche installato WAMP Apache e WAMP MySQL, ma WAMP MySQL non è in esecuzione. Il registro errori mostra:

  • Impossibile avviare il server: collegamento su porta TCP / IP: nessun file o directory
  • Hai già un altro server mysqld in esecuzione sulla porta: 3306?

Ho provato a cambiare la porta da 3306 a 3307, ma il servizio non si avviava ancora, dando errore:

Il Visualizzatore eventi mostra:

  • Errore irreversibile: impossibile aprire e bloccare le tabelle dei privilegi: la tabella "mysql.host" non esiste
  • Impossibile aprire la tabella mysql.plugin. Esegui mysql_upgrade per crearlo.

Apparentemente, posso eseguire mysql_upgrade solo se il server è in esecuzione. Come posso creare 'mysql.host' se il servizio non può essere avviato?

Ho disinstallato MySQL Server e reinstallato, e durante la procedura guidata di configurazione dopo l'installazione, viene visualizzato un messaggio di errore: Impossibile avviare il servizio. Errore: 0.

Come procedo da qui?


Steve, stai eseguendo questo su Windows, BSD, Linux, OSX o qualche altro sistema operativo? Se lo stai eseguendo su Windows, i dettagli di alcuni passaggi saranno diversi.
Rik Schneider,

@Rik Schneider: Rick, sto eseguendo MySQL sul mio laptop Windows. Grazie.
Steve,

Risposte:


9

Esegui il seguente comando

mysql_install_db

A proposito, questo è necessario quando si esegue un'installazione su (almeno) Linux CentOS 7. Altrimenti mysqld non si avvierà. L'ho visto correresystemctl 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

inizializzare mysql prima di iniziare su Windows.

mysqld --initialize

Vorrei poter votare questo più di una volta. Ho cercato questa soluzione semplice. Grazie!
Schiavini,

1

La prima cosa che devi fare è eseguire questi comandi:

use mysql
show tables;

Si prega di notare le differenze

MySQL 5.0 ha 17 tabelle nello schema 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 ha 23 tabelle nello schema 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 ha 24 tabelle nello schema 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                      |
+---------------------------+

Si noti che mysql.plugin non esiste in MySQL 5.0. È plausibile supporre che tu abbia in qualche modo installato MySQL 5.0 e fatto sparire le tabelle vitali per MySQL 5.5.

Ecco alcune buone notizie. C'è qualcosa che puoi provare.

Per questo esempio

  • ServerA è dove vivono i tuoi dati MySQL 5.5
  • ServerB è dove creerai un ambiente MySQL 5.5 separato

Ecco i tuoi passi

  1. Su ServerA, mkdir / root / myusers
  2. Su ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Installa MySQL 5.5 su ServerB
  4. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  5. Su ServerA, cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. servizio mysql start

Questo è tutto.

Se lo stai eseguendo in Windows, devono essere applicati gli stessi principi.

Provaci !!!

AGGIORNAMENTO 2011-07-29 16:15 EDT

Se i tuoi nomi utente avevano privilegi specifici per DB, ecco i tuoi passaggi

  1. Su ServerA, mkdir / root / myusers
  2. Su ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Su ServerA, cp /var/lib/mysql/mysql/db.* / root / myusers /.
  4. Installa MySQL 5.5 su ServerB
  5. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  6. Su ServerA, cp / root / myusers / * / var / lib / mysql / mysql /.
  7. servizio mysql start

0

Non è stato possibile avviare il servizio. Errore: 0.

Aggiungi il percorso MySQL alle variabili di ambiente.


Grazie, ma era già nella variabile Path.
Steve,

0

sembra che tu abbia già mysql in esecuzione

provare

ps ax|grep mysql

se vedi qualche output, probabilmente devi fermarlo (o riavviare la casella).

se non vedi alcun output, prova a eseguire mysqld senza demonizzare e vedere l'output.


0

Ho aggiunto un tag di Windows per aiutare le persone a rispondere alla domanda.

Il mio background non è Windows ma si applicano i principi.

Esiste già un processo mysql? In tal caso sarà necessario ucciderlo prima di disinstallarlo. Se era ancora in esecuzione quando si è tentato di disinstallare / reinstallare, si avranno processi e file in sospeso che impediscono la disinstallazione completa.

Apri la finestra dei servizi, cerca qualsiasi cosa con mysql nel nome e assicurati che sia impostato per non tentare di iniziare con un riavvio. Quindi apri la scheda Processi in esecuzione della finestra dei programmi in esecuzione (usa CTRL-ALT-DEL per aprire) e cerca e uccidi i processi in esecuzione con mysql nel nome.

Se sei sicuro che non ci siano più processi mysql in esecuzione, puoi continuare. Potresti voler riavviare per essere certo che non ci siano più processi mysql in esecuzione.

Al momento dovresti essere in grado di reinstallare e avviare mysql.


0

Esegui mysql-test-run e dovresti vedere il seguente output:

./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

Se si sposta il proprio datadir, non solo è necessario concedere le autorizzazioni per il nuovo datadir, ma è necessario assicurarsi che tutte le directory padre dispongano dell'autorizzazione.

Ho spostato il mio datadir su un disco rigido, montato su Ubuntu come:

/media/*user*/Data/

e il mio datadir era Database .

Ho dovuto impostare le autorizzazioni su 771 per ognuna delle directory media, utente e dati:

sudo chmod 771 *DIR*

Se questo non funziona, un altro modo per far funzionare mysql è cambiare l'utente in /etc/mysql/my.cnf in root; sebbene non vi siano dubbi su come farlo dal punto di vista della sicurezza.

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.