MySQL: Erro fatal: Não é possível abrir e bloquear tabelas de privilégios: A tabela 'mysql.host' não existe [fechada]


9

De repente, meu servidor MySQL 5.5 local parou de funcionar no meu Windows XP SP3.

Eu também tenho o WAMP Apache e o WAMP MySQL instalados, mas o WAMP MySQL não está em execução. O log de erros mostra:

  • Não é possível iniciar o servidor: Vincule na porta TCP / IP: esse arquivo ou diretório não existe
  • Você já tem outro servidor mysqld em execução na porta: 3306?

Tentei alterar a porta de 3306 para 3307, mas o serviço ainda não foi iniciado, dando erro:

O Visualizador de Eventos mostra:

  • Erro fatal: não é possível abrir e bloquear tabelas de privilégios: a tabela 'mysql.host' não existe
  • Não é possível abrir a tabela mysql.plugin. Por favor, execute mysql_upgrade para criá-lo.

Aparentemente, só posso executar o mysql_upgrade se o servidor estiver em execução. Como posso criar 'mysql.host' se o serviço não puder ser iniciado?

Desinstalei o MySQL Server e reinstalei-o, e durante o assistente de configuração após a instalação, recebo um erro: O serviço não pôde ser iniciado. Erro: 0.

Como procedo daqui?


Steve, você está executando isso no Windows, BSD, Linux, OSX ou algum outro sistema operacional? Se você o estiver executando no Windows, os detalhes de algumas etapas serão diferentes.
Rik Schneider

@Rik Schneider: Rick, estou executando o MySQL no meu laptop Windows. Obrigado.
31411 Steve

Respostas:


9

Execute o seguinte comando

mysql_install_db

BTW, isso é necessário ao instalar (pelo menos) o Linux CentOS 7. Caso contrário, o mysqld não será iniciado. Eu vi isso quando eu corrisystemctl 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

inicialize o mysql antes de iniciar no windows.

mysqld --initialize

Eu gostaria de poder votar isso mais de uma vez. Eu tenho procurado por esta solução simples. Obrigado!
Schiavini

1

A primeira coisa que você precisa fazer é executar estes comandos:

use mysql
show tables;

Observe as diferenças

O MySQL 5.0 possui 17 tabelas no 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                      |
+---------------------------+

O MySQL 5.1 possui 23 tabelas no 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                      |
+---------------------------+

O MySQL 5.5 possui 24 tabelas no 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                      |
+---------------------------+

Por favor note que o mysql.plugin não existe no MySQL 5.0. É muito plausível supor que você de alguma forma instalou o MySQL 5.0 e fez desaparecer as tabelas vitais para o MySQL 5.5.

Aqui estão algumas boas notícias. Há algo que você pode tentar.

Para este exemplo

  • ServerA é onde seus dados MySQL 5.5 residem
  • ServerB é onde você criará um ambiente separado do MySQL 5.5

Aqui estão seus passos

  1. No ServerA, mkdir / root / myusers
  2. No ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Instale o MySQL 5.5 no ServerB
  4. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  5. No ServerA, cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. serviço mysql start

É isso aí.

Se você estiver executando isso no Windows, os mesmos princípios deverão ser aplicados.

De uma chance !!!

UPDATE 2011-07-29 16:15 EDT

Se seus nomes de usuário tiverem privilégios específicos de banco de dados, aqui estão suas etapas

  1. No ServerA, mkdir / root / myusers
  2. No ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. No ServerA, cp /var/lib/mysql/mysql/db.* / root / myusers /.
  4. Instale o MySQL 5.5 no ServerB
  5. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  6. No ServerA, cp / root / myusers / * / var / lib / mysql / mysql /.
  7. serviço mysql start

0

O serviço não pôde ser iniciado. Erro: 0.

Adicione o caminho do MySQL às variáveis ​​de ambiente.


Obrigado, mas já estava na variável Path.
31411 Steve

0

parece que você já tem o mysql rodando

tentar

ps ax|grep mysql

se você vir alguma saída, provavelmente precisará parar (ou reiniciar).

Se você não vir nenhuma saída, tente executar o mysqld sem demonizar e veja a saída.


0

Adicionei uma tag do Windows para ajudar as pessoas a responderem à pergunta.

Meus antecedentes não são janelas, mas os diretores se aplicam.

Existe um processo mysql já em execução? Nesse caso, você precisará matá-lo antes de desinstalar. Se ainda estava em execução quando você tentou desinstalar / reinstalar, você terá processos e arquivos pendentes, impedindo a desinstalação completa.

Abra a janela de serviços, procure por algo com mysql no nome e verifique se está configurado para não tentar iniciar com uma reinicialização. Em seguida, abra a guia processos em execução da janela de programas em execução (use CTRL-ALT-DEL para abrir) e procure e elimine os processos em execução com o mysql no nome.

Se você está convencido de que não há mais processos mysql em execução, você pode continuar. Você pode reiniciar para ter certeza de que não há mais processos mysql em execução.

Neste momento você deve ser capaz de reinstalar e iniciar o mysql.


0

Execute mysql-test-run e você verá a seguinte saída:

./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 você mover o datadir, não precisará apenas conceder as novas permissões ao datadir, mas também garantir que todos os diretórios-pai tenham permissão.

Mudei meu datadir para um disco rígido, montado no Ubuntu como:

/media/*user*/Data/

e meu datadir eram bancos de dados .

Eu tive que definir permissões para 771 para cada um dos diretórios de mídia, usuário e dados:

sudo chmod 771 *DIR*

Se isso não funcionar, outra maneira de fazer o mysql funcionar é mudar o usuário em /etc/mysql/my.cnf para root; embora não haja dúvida de alguns problemas ao fazer isso do ponto de vista da segurança.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.