Encontrei uma solução que é tão estranha quanto o problema em si.
Reinicie o MySQL / MariaDB usando (não é necessário, leia minhas edições no final do post) --skip-grant-tables
(procure por tutoriais na web).
Veja o campo plugin
na tabela mysql.user
:
MariaDB [mysql]> SELECT user, plugin FROM user;
+------+-------------+
| user | plugin |
+------+-------------+
| root | unix_socket |
| root | unix_socket |
| root | unix_socket |
| root | unix_socket |
+------+-------------+
Eu tive que redefinir o campo de plug-in de cada entrada para uma string em branco.
UPDATE user SET plugin=""; // without WHERE clause
Além disso, certifique-se de que uma senha esteja definida, porque às vezes ela parece ser apagada (selecione em user, password
fields). Caso contrário, atualize-o com:
UPDATE user SET password=PASSWORD("my_password") WHERE user="root";
Os parâmetros de privilégios precisam ser salvos explicitamente:
FLUSH PRIVILEGES;
Em seguida, reinicie o MySQL no modo normal e você poderá conectar-se à conta root.
Isso não necessariamente desabilitará a conexão via soquete Unix. Depois que meu MySQL va reparado, no PMA, eu posso ver que a conexão é estabelecida através de um socket Unix.
EDIT , alguns meses depois: Estou acostumado a ter esse problema voltando com frequência, acho que a cada atualização do MariaDB (ou algo parecido). Então eu tenho uma melhor compreensão do problema; há um plugin UNIX_SOCKET que permite que você efetue login em uma conta MariaDB sem ter que criar uma senha, porque ela usa as credenciais do shell para confiar em você, sem precisar digitar nenhuma senha. De fato, este plugin é um plugin de autenticação e não um método de comunicação com o servidor SQL. Assim, você pode desativá-lo com segurança se não usar o soquete unix como método de login. A única coisa que não consigo explicar é por que o plugin UNIX_SOCKET é regularmente configurado em cada conta do banco de dados, sem nenhuma ação do meu lado.
Isso tem um bom efeito colateral que, quando isso acontece, você pode acessar o servidor SQL sem precisar reiniciar o MariaDB com --skip-grant-tables
: faça o login na conta root do sistema e conecte-se com mysql -u root
sem senha, então redefina o campo do plugin da maneira explicada acima.
EDIT 2: Confirmado, acontece em cada atualização do MariaDB no Ubuntu.