Erro 1045 MySQL: Access denied for user, como resolver
Entenda o erro 1045 do MySQL, leia usuário, host e senha na mensagem, corrija a conta passo a passo e saiba o que fazer se perdeu a senha do root.
Por Redação Eleven Host · @robson.direitodigital · 29 de outubro de 2026 · 9 min de leitura

Capa da Redação Eleven Host para o guia: Erro 1045 MySQL: Access denied for user, como resolver Arte: Eleven Host
O erro 1045 MySQL aparece quando o servidor recusa o login: ele não achou uma conta com aquele usuário, aquele host e aquela senha. Confira os três e as permissões, começando pela própria mensagem, que diz quem tentou entrar e de onde.
Este guia ensina a ler a mensagem, separa as causas possíveis e leva você pelos passos de correção no Ubuntu. Também cobre o caso do WordPress e de outros apps, o que fazer quando a senha do root foi perdida e como evitar o problema depois. A base é o manual do MySQL 8.4, nas páginas sobre problemas de conexão e erros de acesso negado.
O que a mensagem do erro 1045 diz
A forma completa da mensagem é esta:
ERROR 1045 (28000): Access denied for user 'usuario'@'localhost' (using password: YES)
Segundo o manual, a mensagem de acesso negado informa com qual usuário você tentou entrar, de qual host o cliente estava conectando e se você usou senha. Cada pedaço aponta para uma pista:
- 'usuario'@'localhost': é a conta que o servidor procurou. No MySQL, a conta é formada pelo nome e pelo host, e a tabela de contas precisa ter uma linha que case exatamente com os dois.
- using password: NO: o manual diz que isso significa que você tentou entrar sem senha. Na linha de comando, falta o
-p; em um app, a senha está vazia na configuração. - using password: YES: uma senha foi enviada, mas não bateu com aquela conta. Se aparece YES sem você ter digitado nada, pode haver uma senha antiga guardada em um arquivo de opções; teste com
--no-defaultspara ignorar esses arquivos.
Depois de uma instalação nova, o manual explica que um (using password: NO) para o root indica que uma senha de root já foi definida na instalação e precisa ser informada.
Principais causas do erro 1045
A mensagem não afirma que a senha está errada. O 1045 também aparece quando o host não casa ou quando a conta não existe. Estas são as causas que você deve investigar:
- Senha errada ou vazia: digitada com erro, trocada em outro lugar ou ausente na configuração do app.
- Host diferente: a conta existe como
'usuario'@'localhost', mas você conecta de outra máquina, ou o contrário. - Usuário inexistente: o nome foi digitado errado ou a conta não chegou a ser criada.
- Root com auth_socket no Ubuntu: o root do MySQL pode entrar pelo socket do sistema, sem senha, e recusar
mysql -u root -pcom senha. - Conta anônima mais específica: o manual descreve a armadilha de criar
'usuario'@'%'achando que isso libera olocalhost. Se existir uma conta anônima''@'localhost', ela é mais específica e vence. - Socket x TCP/IP: para
localhost, os programas do MySQL tentam o socket local; com-h 127.0.0.1, a conexão é por TCP/IP, e isso pode casar com outra conta.
Sobre o root no Ubuntu: segundo o manual do plugin auth_socket, ele autentica clientes que conectam da máquina local pelo socket e confere se o nome do usuário do sistema operacional é igual ao nome do usuário do MySQL. Pela rede (TCP/IP), o plugin recusa a conexão.
Como resolver o erro 1045 passo a passo
Siga a ordem abaixo para separar as causas.
1. Entre como administrador do servidor
No Ubuntu, o root do MySQL pode entrar sem senha por meio do sudo:
sudo mysql
Se esse comando entrou, o servidor está funcionando e o problema é a conta que falhou. Se o MySQL ainda nem foi instalado, comece pelo guia Instalar MySQL no Ubuntu: passo a passo na VPS.
2. Veja quais contas existem
SELECT User, Host, plugin FROM mysql.user;
Procure uma linha com o usuário e o host exatamente como na mensagem de erro. Se o usuário aparece só com outro host, esse é o motivo da recusa. A coluna plugin mostra como cada conta autentica, e o root pode aparecer ali com auth_socket.
3. Troque a senha da conta
Se a conta existe com o host certo, defina uma senha nova e longa:
ALTER USER 'usuario'@'localhost' IDENTIFIED BY 'NovaSenhaForte';
Depois atualize a senha no app ou no arquivo de configuração. Para uma conta nova com host diferente, o guia Criar usuário MySQL: como dar permissões com GRANT mostra o CREATE USER e as permissões.
4. Teste o login pelo terminal
Saia do MySQL com EXIT; e teste digitando a senha quando ela for pedida:
mysql -u usuario -p
Segundo o manual, não existe espaço entre -p e a senha quando ela vai no comando, e é melhor não colocá-la ali: use só -p e digite a senha quando o prompt pedir.
5. Compare socket e TCP/IP
Se o app conecta por 127.0.0.1 e o terminal por localhost, o servidor pode usar contas diferentes. Teste a rota do app:
mysql -u usuario -p -h 127.0.0.1
Se esse comando falha e o anterior funciona, crie ou ajuste a conta para o endereço que o app realmente usa.
Precisa de um banco de dados na nuvem? Veja o 11SQL Mini a partir de R$ 9,90/mês e confira na loja o que cada plano inclui. Ver o 11SQL
Erro 1045 conectando de outra máquina
Quando o app está em outro servidor, a mensagem pode mudar para Host ... is not allowed to connect to this MySQL server. Isso quer dizer que não há conta com um host que case com o endereço do cliente, como 198.51.100.20. A solução é criar a conta com esse endereço, e não com o curinga:
CREATE USER 'usuario'@'198.51.100.20' IDENTIFIED BY 'SenhaForteAqui';
Atenção: o manual avisa que a conta com '%' permite conexões de outros hosts e que isso é inseguro. Ele sugere usar o % só para descobrir o host real com SELECT USER() e depois trocar pelo endereço exato.
Para abrir a porta e o acesso pela rede com cuidado, siga o guia Acesso remoto MySQL: como liberar com segurança.
Erro 1045 no WordPress ou em outro app
No WordPress e em outros apps, o 1045 vem de dados de conexão que não batem com a conta. Os campos ficam no arquivo de configuração do app: no WordPress, o wp-config.php traz o nome do banco, o usuário, a senha e o host. Compare cada valor com a conta que você viu no passo 2 e teste a mesma combinação pelo terminal. Se o terminal entra e o app não, a diferença pode estar na senha copiada, em aspas ou em espaço no fim do valor, ou no host usado pelo app.
Quando o site mostra a mensagem em português de que não foi possível estabelecer conexão, o artigo Erro ao estabelecer conexão com o banco de dados: solução cobre as outras causas além das credenciais.
Esqueci a senha do root do MySQL
No Ubuntu, antes de redefinir, tente sudo mysql: se o root usa auth_socket, ele entra sem senha. Só se isso falhar vale seguir o procedimento do manual, que tem riscos. O método do arquivo de inicialização, para sistemas Unix, tem estes passos:
- Pare o servidor. O manual usa o comando
killnormal e avisa para não usarkill -9. No Ubuntu com o serviço do systemd, o equivalente prático ésudo systemctl stop mysql. - Crie um arquivo de texto com uma única linha, trocando a senha de exemplo por uma sua:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
O manual alerta que o arquivo contém a senha, então não o deixe em um lugar que outros usuários possam ler.
- Inicie o servidor apontando para o arquivo, trocando o caminho pelo real:
mysqld --init-file=/caminho/mysql-init &
- Quando o servidor subir, apague o arquivo.
Existe ainda o método com --skip-grant-tables, em que você inicia o servidor sem verificar permissões, conecta com mysql, roda FLUSH PRIVILEGES; e só então o ALTER USER. O manual descreve o risco: nesse modo, é possível conectar sem senha e com todos os privilégios. Por isso o servidor também desliga as conexões remotas com skip_networking. Reinicie o servidor normalmente logo depois do reset.
O FLUSH PRIVILEGES só entra nesse método porque as tabelas de permissões não foram carregadas; em um ALTER USER normal ele não é necessário.
Como evitar o erro 1045 de novo
- Uma conta por app: crie um usuário para cada sistema, com permissão só no banco dele, em vez de usar o root nos apps.
- Host exato: use
localhostquando o app roda no mesmo servidor e o IP do app quando roda em outro. - Senha guardada com cuidado: mantenha a senha no arquivo de configuração do app e em um gerenciador, e não em mensagens ou repositórios públicos.
- Teste pelo terminal: depois de trocar a senha, confirme o login antes de mexer no app.
- Documente o host: anote o endereço que cada app usa, para o próximo ajuste não virar tentativa e erro.
Precisa de um servidor para os seus projetos? A VPS Plano Bronze sai a partir de R$ 17,00/mês; confira na loja o que cada plano inclui. Ver planos de VPS
Checklist do 1045
- Li a mensagem e anotei o usuário, o host e o
using password. - Entrei com
sudo mysqlpara confirmar que o servidor responde. - Rodei
SELECT User, Host, plugin FROM mysql.user;e achei a conta com o host exato. - Troquei a senha com
ALTER USERse havia dúvida. - Testei com
mysql -u usuario -p, digitando a senha no prompt. - Comparei
localhostcom-h 127.0.0.1. - Evitei o
%e usei o IP exato do app. - Atualizei a senha no arquivo de configuração do app.
Perguntas frequentes
O erro 1045 quer dizer só senha errada?
Não. O manual mostra que o mesmo erro aparece quando o host não casa com nenhuma conta ou quando a conta não existe. Por isso a mensagem traz usuário, host e o aviso de senha.
O que muda entre using password YES e NO?
Com NO, nenhuma senha foi enviada. Com YES, uma senha foi enviada e não bateu com a conta.
Por que o root dá 1045 com senha no Ubuntu?
Porque o root pode usar o plugin auth_socket, que confere o usuário do sistema e não a senha. Entre com sudo mysql e crie um usuário próprio para o app.
Preciso rodar FLUSH PRIVILEGES depois do ALTER USER?
Não em um uso normal. Ele aparece no método --skip-grant-tables, em que as tabelas de permissões não estão carregadas.