Pesquisa de site

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

Artigos relacionados