Acabei de instalar o MySQL 8.0.36 no Ubuntu 22.04 e agora quero executar o mysql_secure_installation
.
O guia para isso na Digital Ocean indica que no Ubuntu, a execução mysql_secure_installation
produz um loop lógico se você não configurar primeiro a senha do usuário 'root' do MySQL. Seguindo suas instruções, fiz o seguinte:
$ sudo mysql
[sudo] password for user:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'crocodile69210';
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye
Depois de fazer isso, não consigo mysql_secure_installation
mais correr. Quando tento, recebo um erro de senha:
$ sudo mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
Error: Access denied for user 'root'@'localhost' (using password: YES)
Isso acontece quando eu insiro a senha de usuário 'root' do MySQL que estabeleci anteriormente ( crocodile69210
) e minha sudo
senha do sistema operacional. Se eu não inserir nenhuma senha, o resultado será o mesmo, exceto que a última linha é
(using password: NO)
.
O que eu faço para poder correr mysql_secure_installation
?
Editar: parece que a ALTER USER
instrução acima não define realmente uma senha. Se eu executar $ mysql -u root -p
e literalmente copiar e colar a senha que defini, que ainda está visível no histórico do terminal, não consigo fazer login mysql
:
$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Não tenho certeza se ou como isso ilumina o problema.
Edição 2: Trabalhando com a teoria de que o guia Digital Ocean está errado, desinstalei o MySQL ( $ sudo apt remove mysql-server
) e reinstalei-o. Não executei o ALTER USER
comando fornecido no artigo DO. Ainda não consigo executar mysql_secure_installation
e recebo os mesmos erros de senha de "Acesso negado" que recebi durante a primeira tentativa.
Edição 3: Mais informações
Quando instalei pela primeira vez mysql-server
a partir de uma tela totalmente em branco, consegui usar $ sudo mysql
imediatamente para acessar o shell interativo do MySQL. Acho que depois de 1) desinstalar mysql-server
usando $ sudo apt remove mysql-server
E 2) limpar completamente mysql-server
usando $ sudo apt purge mysql-server
, depois de reinstalar ainda não consigo usar $ sudo mysql
. Recebo o erro de senha "Acesso negado". Então, algo sobre a primeira instalação obviamente ainda está por aí. Descobrir o que é isso provavelmente ajudará a resolver todo o problema.
Edição final:
No Ubuntu,
apt purge
(ouapt remove --purge
) simplesmente não funciona para MySQL. Você deve seguir este procedimento para desinstalar completamente o MySQL do seu sistema.Gerei a senha para o usuário 'root' do MySQL usando um gerenciador de senhas e não inspecionei a senha. Tinha uma barra invertida (
\
). Ao definir a senha usando oALTER USER
comando, o shell interpreta isso como um caractere de escape e o remove antes de passá-lo para o MySQL. Portanto, minha senha 'root' não era realmente o que eu pensava que estava configurando.
Não use barras invertidas nas senhas do MySQL
A razão pela qual você não consegue mais fazer login como
root
usandosudo mysql
é quedefiniu o método de autenticação para
root
tomysql_native_password
, substituindo o padrãoauth_socket
, que é o método que permite que um usuário do sistema com o mesmo nome do usuário MySQL (neste casoroot
) faça login no servidor sem fornecer uma senha.Felizmente, as instalações do MySQL em distros baseadas em Debian vêm com um usuário bastante privilegiado chamado
debian-sys-maint
, o que pode livrar você de problemas nesses casos.Primeiro, faça login no MySQL como
debian-sys-maint
(executesudo less /etc/mysql/debian.cnf
para descobrirdebian-sys-maint
a senha):Então, como primeira tentativa, tente alterar
root
a senha de novamente:(não há necessidade
FLUSH PRIVILEGES
depois.)Por que?
Porque tentei alterar
root
a senha usando exatamente o mesmo método que o seu e consigo fazer login perfeitamente no servidor em execuçãomysql -u root -pcrocodile69210
.O procedimento que você seguiu parece estar correto: há uma chance de que, simplesmente, algo tenha dado errado durante o processo.
Mas, independentemente, para fins de execução
mysql_secure_installation
, se definir a senha novamente não funcionar, provavelmente você poderá definir o método de autenticação pararoot
voltarauth_socket
e apenas executarsudo mysql_secure_installation
; o guia que você está seguindo é bem antigo e é provável que o bug sobre o qual ele está alertando já tenha sido corrigido há muito tempo: