Eu tenho três (3) posts no StackExchange que explicam rapidamente a causa raiz
-
Apr 24, 2014
: mysql: Restaurar todos os privilégios para o usuário admin -
Aug 07, 2013
: MySQL - ERROR 1045 (28000): acesso negado para o usuário: problema de permissão -
May 01, 2013
: Posso descobrir qual versão do MySQL dos arquivos de dados?
CAUSA RADICA
- Você tem 37 colunas em
mysql.user
. Tudo bem para o MySQL 5.0 - Você está executando o MySQL 5.5. Você deveria ter 42 colunas.
SUGESTÃO
Você terá que executar o comando do MySQL
# mysql_upgrade --upgrade-system-tables
Tenha em mente que você está pulando duas versões do MySQL. Faça o backup da tabela mysql.user
antes de fazer isso
ATUALIZAÇÃO 2015-02-10 10:59 EST
Com base no seu comentário , Eu posso apenas sugerir uma coisa: Consulte o meu post Qualquer problema conhecido que esteja sendo atualizado do MySQL 5.1.73 para 5.6.21? na seção "PROBLEMA # 1: Caminho de atualização" sobre como atualizar duas versões do MySQL.
ATUALIZAÇÃO 2015-02-11 12:26 EST
Aqui está sua situação
- Você tem um
mysql.user
compatível com o MySQL 5.0 - Você precisa obter o
mysql.user
atualizado para trabalhar com o MySQL 5.5
Eu tenho uma ideia maluca: adicionar as 5 colunas ausentes à mão
No meu post DBA StackExchange Não é possível conceder privilégios como root , Eu exibo todas as colunas na tabela mysql.user
do MySQL 5.6, 5.5, 5.1, 5.0 e 4.x.
A partir dessas exibições, faremos o seguinte:
- Faça um backup do mysql.user antes como mysql.user_backup
- Construa
mysql.user
para ter as mesmas colunas que o MySQL 5.5, adicionando as cinco (5) colunas faltantes. - Verifique se as colunas estão na mesma ordem
- Preencha os privs ausentes para usuários raiz com
Y
- Implantar novos privs
Etapas para reparar mysql.user
CREATE TABLE mysql.user_backup LIKE mysql.user;
INSERT INTO mysql.user_backup SELECT * FROM mysql.user;
ALTER TABLE mysql.user
ADD Event_priv enum('N','Y') DEFAULT 'N' AFTER Create_user_priv;
ALTER TABLE mysql.user
ADD Trigger_priv enum('N','Y') DEFAULT 'N' AFTER Event_priv;
ALTER TABLE mysql.user
ADD Create_tablespace_priv enum('N','Y') DEFAULT 'N' AFTER Trigger_priv;
ALTER TABLE mysql.user
ADD plugin CHAR(64) DEFAULT NULL AFTER max_user_connections;
ALTER TABLE mysql.user
ADD authentication_string text DEFAULT 'N' AFTER plugin;
UPDATE mysql.user SET
Event_priv='Y',
Trigger_priv='Y',
Create_tablespace_priv ='Y'
WHERE user='root' and host='localhost';
FLUSH PRIVILEGES;
Se você quiser reverter isso, você pode fazer isso
RENAME TABLE mysql.user TO mysql.user_old,mysql.user_backup TO mysql.user;
FLUSH PRIVILEGES;