Como redefinir a senha do usuário root do MySQL no Linux
Você esqueceu sua senha de usuário root do MySQL? Sem problemas! Este guia orienta você nas etapas para redefinir a senha do usuário root do MySQL em sistemas operacionais Linux. As etapas abaixo também devem funcionar para redefinir a senha root do MariaDB.
Já publicamos um guia para redefinir a senha do usuário root (administrativo) em versões mais antigas do MySQL, ou seja, MySQL 5.7. Mas esse método não funcionou com a nova versão do MySQL 8. Se você deseja redefinir a senha root no MySQL 8, siga qualquer uma das duas soluções alternativas fornecidas abaixo.
Redefinir a senha do usuário root do MySQL no Linux
Como já mencionei, podemos redefinir a senha root do MySQL de duas maneiras.
- A maneira genérica,
- Usando a variável de sistema
init_file
.
1. A maneira genérica de redefinir a senha root do MySQL
Este método funcionará independentemente do sistema operacional que você usa. Aviso que é uma forma menos segura, pois vamos iniciar o servidor MySQL com o -- opção skip-grant-tables. Isto dá a qualquer pessoa com acesso ao servidor acesso irrestrito a todos os bancos de dados.
Primeiro, pare o serviço MySQL usando o comando:
sudo systemctl stop mysql
Você pode verificar se o MySQL está realmente parado com o comando:
sudo systemctl status mysql
Exemplo de resultado:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2021-05-29 11:53:08 UTC; 8s ago
Process: 560 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Process: 666 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
Main PID: 666 (code=exited, status=0/SUCCESS)
Status: "Server shutdown complete"
May 29 10:08:33 ubunt4.localdomain systemd[1]: Starting MySQL Community Server…
May 29 10:08:37 ubunt4.localdomain systemd[1]: Started MySQL Community Server.
May 29 11:53:07 ubunt4.localdomain systemd[1]: Stopping MySQL Community Server…
May 29 11:53:08 ubunt4.localdomain systemd[1]: mysql.service: Succeeded.
May 29 11:53:08 ubunt4.localdomain systemd[1]: Stopped MySQL Community Server.
Bem, o serviço MySQL não está funcionando.
Agora, reinicie o servidor MySQL sem verificação de permissão executando o seguinte comando:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Aqui, a opção --skip-grant-tables
permite que você se conecte ao servidor de banco de dados mysql sem senha e com todos os privilégios. A opção --skip-networking
é usada para evitar que outros clientes se conectem ao servidor de banco de dados. E o símbolo e comercial (&
) é usado para executar o comando em segundo plano, para que você possa digitar os outros comandos fornecidos nas etapas subsequentes. Esteja ciente de que o comando acima é perigoso e seu servidor de banco de dados se torna inseguro e vulnerável a ameaças de segurança. Você deve executar este comando apenas por um breve período para redefinir a senha.
Você pode ver o seguinte erro:
2021-05-29T12:00:19.991826Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2021-05-29T12:00:19.996942Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
Se você vir este erro, crie o diretório ausente (ou seja, /var/run/mysqld
) e defina as permissões adequadas para ele, como abaixo.
sudo mkdir -p /var/run/mysqld
sudo chown -R mysql:mysql /var/run/mysqld
Agora tente novamente iniciar o servidor mysql sem senha e com privilégios de root:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Em seguida, conecte-se ao servidor mysql usando o comando:
mysql
Você será direcionado ao prompt do shell do mysql.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2021, 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.
Como fizemos login sem carregar tabelas de concessão (porque usamos a opção --skip-grant-tables
), não podemos usar o comando ALTER USER
para redefinir a senha. Então, vamos carregar tabelas de concessões usando o comando:
mysql> FLUSH PRIVILEGES;
Agora, execute o seguinte comando para atualizar a senha do usuário root do mysql:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';
No comando acima, substitua P@ssw0rd123#@!
pela sua própria senha. Observe que se o componente Validar Senha
estiver ativado, você deverá usar uma senha forte.
Finalmente, saia do prompt do mysql:
mysql> exit
Redefinir a senha do usuário root do MySQL no Linux
Por fim, desligue o servidor de banco de dados em execução que você iniciou anteriormente com a opção --skip-grant-tables
. Para fazer isso, execute:
sudo mysqladmin -u root -p shutdown
Você será solicitado a inserir sua senha sudo
seguida pela senha de usuário root
do MySQL que você definiu na etapa anterior.
[sudo] password for ostechnix:
Enter password:
2021-05-29T12:09:38.425737Z mysqld_safe mysqld from pid file /var/lib/mysql/ubunt4.localdomain.pid ended
[1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Se o comando acima não funcionar, encontre o arquivo.pid
que contém o ID do processo do servidor. O arquivo PID geralmente estará disponível em /var/lib/mysql/
ou /var/run/mysqld/
ou /usr/local/mysql/data/
dependendo da sua distribuição, nome do host e configuração. Geralmente, o nome do arquivo tem uma extensão .pid e começa com mysqld
ou com o nome do host do seu sistema.
No meu caso, é "/var/lib/mysql/ubuntuserver.pid"
.
Então, parei a instância do servidor de banco de dados com o comando:
sudo kill `/var/lib/mysql/ubuntuserver.pid`
Por favor use o crase para mencionar o caminho do arquivo.
Também podemos encontrar o pid do MySQL usando os comandos ps
e grep
como abaixo:
ps ax | grep mysql
Exemplo de resultado:
1930 pts/0 S 0:00 sudo mysqld_safe --skip-grant-tables --skip-networking
1931 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking
2091 pts/0 Sl 0:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=ubuntuserver.pid
Mate-o manualmente como abaixo:
sudo kill <PID>
Ou elimine todos os serviços MySQL:
sudo killall mysql
Agora, inicie o serviço MySQL normalmente usando o comando:
sudo systemctl start mysql
Agora, faça login no servidor MySQL com a nova senha:
mysql -u root -p
Exemplo de resultado:
Conecte-se ao servidor MySQL com a nova senha root
Conecte-se ao servidor MySQL com a nova senha root
2. Redefina a senha root do MySQL com arquivo de senha
A outra maneira de redefinir a senha root do mysql é usar a variável de sistema init_file
.
Pare o serviço MySQL:
sudo systemctl stop mysql
Crie um arquivo de texto, por exemplo ostechnix.txt
:
vi ostechnix.txt
Adicione a seguinte linha nele:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';
Substitua P@ssw0rd123#@!
pela sua própria senha na linha acima. Se você ativou o plugin Validar senha
, você deve especificar uma senha forte. Salve e feche o arquivo.
Agora, inicie o servidor MySQL com a variável de sistema init_file
que aponta para o arquivo ostechnix.txt
:
sudo mysqld --init-file=/home/sk/ostechnix.txt &
Este comando executará o conteúdo do arquivo ostechnix.txt
e atualizará a senha da conta root@localhost
com a nova senha mencionada no arquivo ostechnix.txt
e finalmente inicie o servidor mysql.
Agora pare e reinicie o servidor mysql normalmente:
sudo systemctl stop mysql
sudo systemctl start mysql
Por fim, exclua o arquivo de senha, ou seja, ostechnix.txt
.
rm /home/sk/ostechnix.txt
Agora você pode fazer login no servidor mysql com a nova senha usando o comando:
mysql -u root -p
Também postamos um método ligeiramente diferente para redefinir a senha root do MySQL. Verifique o seguinte guia para obter detalhes:
>> How To Reset Root Password In MySQL 8 On Ubuntu Linux
Conclusão
Neste guia, aprendemos duas maneiras diferentes de redefinir a senha esquecida do usuário root do MySQL em sistemas operacionais Linux. Se você perdeu a senha de usuário da conta administrativa do banco de dados, poderá redefini-la facilmente em alguns minutos.
Recurso:
- Manual de Referência do MySQL 8.0