Quem gerencia servidores com cPanel sabe que o painel automatiza praticamente tudo no provisionamento de contas e no gerenciamento de senhas. Porém, quando um script interno entra em loop de erro, o diagnóstico pode ser um verdadeiro quebra-cabeça.
Recentemente enfrentei duas variantes desse mesmo problema: uma durante a criação de uma nova conta de usuário (usuario) e outra durante a alteração rotineira de senha de uma conta ativa (empresa). Em ambas as situações, o painel falhava ao tentar executar instruções no MySQL, gerando uma cascata contínua de exceções e travando a interface web com o seguinte erro:
Cpanel::Exception::Database::Error/(XID k3wmzt) The system received an error from the “MySQL” database “mysql”: ER_PASSWORD_NO_MATCH (Can't find any matching row in the user table)
Se você já encontrou falhas misteriosas de GRANT ou exceções no cpmysql.pl que impedem a associação de bancos ou travam a alteração de senhas no WHM, este passo a passo mostra as causas raízes nos bastidores, os becos sem saída com ferramentas descontinuadas e como resolver o problema via linha de comando ou pela interface gráfica.
1. O sintoma inicial no log de erros do cPanel#
O sinal de alerta apareceu ao monitorar o log principal do cPanel em tempo real:
tail -f /usr/local/cpanel/logs/error_log
O terminal registrou dois fluxos de execução problemáticos no subsistema Cpanel::Mysql:
Cenário a: falha na criação e provisionamento de bancos#
Cpanel::Mysql::Basic::_sendmysql_untrapped(Cpanel::Mysql=HASH(0x1b87070), "GRANT ALL ON `usuario\_base`.* TO 'usuario'\@'localhost'; "...) called at /usr/local/cpanel/Cpanel/Mysql/Create.pm line 237
Cpanel::Mysql::Create::__ANON__() called at /usr/local/cpanel/3rdparty/perl/542/cpanel-lib/Try/Tiny.pm line 100
Try::Tiny::try(CODE(0x1e4bd78), Try::Tiny::Catch=REF(0x1d08cb8)) called at /usr/local/cpanel/Cpanel/Mysql/Create.pm line 241
Cpanel::Mysql::Create::_dbowner_to_all_without_ownership_checks(Cpanel::Mysql=HASH(0x1b87070), "method", "GRANT", "users", HASH(0x102ef50), "database", undef) called at /usr/local/cpanel/Cpanel/Mysql/Create.pm line 108
Cpanel::Mysql::dbcache(Cpanel::Mysql=HASH(0x1b87070), "") called at bin/admin/Cpanel/cpmysql.pl line 390
QUERY: GRANT ALL ON `usuario\_base`.* TO 'usuario'@'localhost'; GRANT USAGE ON *.* TO 'usuario'@'localhost'; GRANT ALL ON `usuario\_base`.* TO 'usuario'@'servidor.meudominio.com.br'; GRANT USAGE ON *.* TO 'usuario'@'servidor.meudominio.com.br'
Cenário b: falha durante alteração de senha da conta#
Cpanel::Mysql::Create::add_dbowner_to_all(Cpanel::Mysql=HASH(0x2fb77c0), "empresa", "SenhaTemporaria123", 0, undef, 1) called at /usr/local/cpanel/Cpanel/Mysql/Create.pm line 307
Cpanel::Mysql::Create::create_dbowner(Cpanel::Mysql=HASH(0x2fb77c0), "empresa", 1) called at bin/admin/Cpanel/cpmysql.pl line 169
QUERY: ALTER USER IF EXISTS 'empresa'@'localhost' IDENTIFIED BY 'SenhaTemporaria123'; GRANT USAGE ON *.* TO 'empresa'@'localhost'; ALTER USER IF EXISTS 'empresa'@'198.51.100.25' IDENTIFIED BY 'SenhaTemporaria123'; GRANT USAGE ON *.* TO 'empresa'@'198.51.100.25'; ALTER USER IF EXISTS 'empresa'@'servidor.meudominio.com.br' IDENTIFIED BY 'SenhaTemporaria123'; GRANT USAGE ON *.* TO 'empresa'@'servidor.meudominio.com.br'
O script em Perl cpmysql.pl falhava continuamente em ambos os fluxos ao tentar atualizar privilégios no MySQL.
2. A anatomia da falha: as duas causas do er_password_no_match#
A análise das queries enviadas pelo cPanel expõe a lógica interna do painel: ele tenta orquestrar a senha do sistema operacional replicando-a para o usuário do banco nos três escopos de rede utilizados pelo cPanel (localhost, o IP público do servidor e o FQDN completo da máquina).
O erro ER_PASSWORD_NO_MATCH (Can't find any matching row in the user table) tem duas origens técnicas distintas:
Causa 1: O usuário do banco de dados está fisicamente ausente#
Embora a query utilize ALTER USER IF EXISTS, certas versões do MySQL e MariaDB falham quando executam o comando seguinte (GRANT USAGE ON . TO 'empresa'@'...') em bloco dentro de uma transação DBI, se o usuário não constar previamente na tabela mysql.user.
O cPanel assume que o usuário dono da conta já existe no banco. Se a conta passou por migração imperfeita ou o usuário foi removido manualmente, a alteração de senha trava.
Causa 2: O usuário existe, mas o skip-name-resolve está ativo#
Este é o cenário mais enganoso. Você abre o console do MySQL, roda um SELECT User, Host FROM mysql.user e vê claramente o usuário cadastrado para servidor.meudominio.com.br. Mesmo assim, o MySQL devolve ER_PASSWORD_NO_MATCH.
Isso ocorre porque a diretiva skip-name-resolve no /etc/my.cnf desativa a resolução reversa de DNS. O motor do banco de dados ignora qualquer checagem baseada em nomes alfanuméricos de host, aceitando apenas IPs ou a palavra literal localhost. Quando o cPanel tenta rodar o comando apontando para o FQDN, o MySQL rejeita a instrução.
3. Comandos descontinuados e armadilhas comuns#
Ao tentar forçar o cPanel a reconstruir o mapa de privilégios de banco, é comum recorrer a scripts antigos documentados em fóruns. Em versões modernas do cPanel, a maioria desses scripts em Perl foi removida:
# /usr/local/cpanel/bin/restoreuserprivileges --user=usuario
-bash: /usr/local/cpanel/bin/restoreuserprivileges: No such file or directory
# /usr/local/cpanel/scripts/restorealluserprivileges
-bash: /usr/local/cpanel/scripts/restorealluserprivileges: No such file or directory
# /usr/local/cpanel/scripts/database_map_cleaner usuario
-bash: /usr/local/cpanel/scripts/database_map_cleaner: No such file or directory
Até mesmo chamadas via API de linha de comando (whmapi1 rebuild_dbmap) retornam Unknown app requested for this version of the API. As rotinas foram consolidadas nos daemons internos do painel.
4. Como resolver passo a passo#
Dependendo da causa identificada, a resolução segue por dois caminhos:
Solução para a Causa 1: Recriando o usuário ausente#
Se o usuário não constar na tabela mysql.user, você pode recriá-lo via terminal ou pela interface gráfica.
Opção a: via terminal (SSH)#
Acesse o console do MySQL como root:
mysql
Recrie o usuário para os três escopos identificados no log, utilizando a senha temporária capturada ou a nova senha definida:
CREATE USER 'empresa'@'localhost' IDENTIFIED BY 'MinhaSenhaSegura123!';
CREATE USER 'empresa'@'198.51.100.25' IDENTIFIED BY 'MinhaSenhaSegura123!';
CREATE USER 'empresa'@'servidor.meudominio.com.br' IDENTIFIED BY 'MinhaSenhaSegura123!';
GRANT USAGE ON *.* TO 'empresa'@'localhost';
GRANT USAGE ON *.* TO 'empresa'@'198.51.100.25';
GRANT USAGE ON *.* TO 'empresa'@'servidor.meudominio.com.br';
FLUSH PRIVILEGES;
EXIT;
Em seguida, execute a reconstrução do mapa de bancos da conta:
/usr/local/cpanel/scripts/rebuild_dbmap empresa
Opção b: pela interface gráfica (WHM/cPanel)#
Se você prefere operar pelo navegador:
- No WHM, vá em SQL Services (Serviços SQL) e abra o Database Map Tool.
- Selecione a conta em questão e verifique se as bases estão desvinculadas.
- Acesse o cPanel da conta afetada, navegue até Bancos de Dados MySQL e recrie o usuário principal na seção "Usuários do MySQL".
- Retorne ao WHM e refaça a alteração de senha da conta. O erro não ocorrerá mais, pois a tabela
mysql.useragora possui o registro para o comandoALTER USER.
Solução para a Causa 2: Desativando o skip-name-resolve#
Se você confirmou que o usuário já existe na tabela mysql.user e o erro persiste teimosamente para o hostname FQDN, o culpado é o isolamento de DNS do MySQL.
Passo 1: Edite o /etc/my.cnf#
Abra a configuração do banco de dados:
sudo nano /etc/my.cnf
(Caso utilize arquivos modulares, verifique também /etc/my.cnf.d/).
Localize a diretiva e comente-a com #:
# skip-name-resolve
Salve o arquivo.
Passo 2: Reinicie os serviços#
Reinicie o banco de dados e o daemon do cPanel:
# Para sistemas com MariaDB:
sudo systemctl restart mariadb
# Para sistemas com MySQL 8.0+:
sudo systemctl restart mysqld
# Reiniciar o cPanel:
sudo systemctl restart cpanel
Validação e cuidados operacionais#
Assim que os serviços forem reiniciados com o usuário presente e o skip-name-resolve desativado, o arquivo /usr/local/cpanel/logs/error_log silenciará imediatamente. As queries de ALTER USER e GRANT passarão sem erros, destravando a alteração de senhas e a listagem de bancos de dados.
Alguns aprendizados práticos desse diagnóstico:
- Otimizações genéricas de banco de dados podem quebrar painéis compartilhados: A diretiva
skip-name-resolveé excelente em servidores isolados de aplicação, mas é incompatível com o modelo de privilégios baseado em FQDN do cPanel. - Cuidado ao copiar scripts antigos de fóruns: Comandos como
restoreuserprivilegesjá não existem no cPanel atual. Analisar a query SQL bruta no log poupa horas de tentativas frustradas. - Mapeamento local no
/etc/hosts: Para evitar lentidão em consultas de rede sem usarskip-name-resolve, certifique-se de que o FQDN da máquina (servidor.meudominio.com.br) esteja apontado para127.0.0.1dentro do arquivo/etc/hosts.
Este artigo foi útil?
Deixe uma reação rápida para apoiar o conteúdo:
Este post está licenciado sob CC BY-NC.



Comentários
Participe da discussão abaixo.
0 comentários