incapaz de redefinir a senha root do mysql

28

Preciso redefinir a senha root da minha instalação mysql local, mas ela não me deixou. Eu tentei isso:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

Como posso redefinir a senha? edit 1 eu consegui isso:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

parece que um processo está reiniciando o mysql automaticamente assim que eu o mato ...

stdcerr
fonte

Respostas:

43

Primeiro tente usar

mysql -u root -p

e digite sua senha (se você se lembrar) no prompt para fazer login como usuário root do sql (observe que a opção -pé para senha).

Se você realmente precisa redefinir sua senha root para mysql, aqui está uma maneira fácil - reconfigurar o pacote dpkg-reconfigure.

Etapas fáceis para redefinir a senha root do mySQL:

  1. Verifique a versão do seu mysql-server;

    apt-cache policy mysql-server
    

    e veja a linha que mostra a versão instalada, entre outras informações. por exemplo, para minha instalação é:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (A partir disso, eu sei que mysql-server-5.5instalei no meu sistema.)

  2. Inicie a reconfiguração com:

    sudo dpkg-reconfigure mysql-server-*.*
    

    onde mysql-server-*.*deve ser substituído pela versão que você possui. (para mim seria mysql-server-5.5). Isso interromperá o daemon do banco de dados. Um prompt será exibido onde você deverá digitar sua nova senha e confirmar a reconfiguração.

    snap1

    O daemon será iniciado automaticamente após a reconfiguração.

  3. Você pode fazer login com:

    mysql -u root -p
    

    e inicie suas tarefas administrativas de banco de dados.

Referências:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Que em breve será limpo conforme indicado na página.]

  2. Guia do servidor Ubuntu relacionado à sua versão específica.

preciso
fonte
2
Pode confirmar que dpkg-reconfigure mariadb-server-10.1funcionou para MariaDB quando todas as outras soluções não. Obrigado por isso.
Liviucmg
19
dpkg-reconfigurenão solicitou a senha para mim .. existe uma maneira de forçá-lo?
Unirgy
15
não funcionou para mim. Eu usei o comando acima e obtive "Verificando se é necessária atualização. Esta instalação do MySQL já foi atualizada para 5.7.13, use --force se você ainda precisar executar o mysql_upgrade". Usar --force deu a mesma resposta.
Anthony Scaife
5
Aparentemente, isso não funciona mais.
dpi
1
@Paulo Henrique Não. Dada a situação, decidimos que o melhor uso do nosso tempo era uma reinstalação completa do servidor.
Anthony Scaife
21

Referência retirada deste blog:

Etapa 1: Interrompa o serviço MySQL.

sudo service mysql stop

Etapa 2: Mate todos os mysqld em execução.

sudo killall -9 mysqld

Etapa 3: Iniciando o mysqld no modo de Segurança.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Etapa 4: Inicie o cliente mysql

mysql -u root

Etapa 5: Após o login bem-sucedido, execute este comando para alterar qualquer senha.

FLUSH PRIVILEGES;

Etapa 6: você pode atualizar a senha root do mysql.

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

para mysql> 5.7 use isto em vez de acima:

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

Etapa 7: Por favor, execute este comando.

FLUSH PRIVILEGES;

Etapa 8: sair do console do mysql

exit

Etapa 9: Mate o mysqld_safe e inicie o mysql

sudo killall mysqld_safe && sudo service mysql start
Anvesh
fonte
1
deve ser sudo service mysql stop, nãosudo stop mysql
knocte
1
Além disso, no final que está faltando os passos sudo killall mysqld_safe && sudo service mysql starte, em seguida, tente fazer login novamente
knocte
3
Para o MYSQL 5.7, a sintaxe da senha de alteração foi alterada paraALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel
7
NOTA ! Existe uma nova fera no MySQL 5.7 chamada auth_socket. Se você instalar o mysql sem uma senha root, a besta o atacará e você perderá 50 hitpoints. Na etapa 6 acima, você precisa ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Você pode ler sobre isso aqui . Teoricamente (não tentei), você deve conseguir fazer login no mysql sem uma senha se "sudo su -" se tornar root.
olafure
3
E no caso de ALTER USER ...não funcionar, usoUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure
9

No Ubuntu 16.04 e mysql-server-5.7, a resposta correta é o último comentário do olafure, dpkg-reconfigure mysql-server-5.7não funciona mais.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Agora no console do mysql >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

Reinicie o bom mysql processo

sudo killall mysqld
sudo service mysql start

Verifique sua nova senha

mysql -u root -p
Enter password: newpass
mysql>
Pierre-Damien
fonte
5
Na mysqld_safeexecução, eu recebo o erro: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Então eu corri sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqlde o restante da resposta acima funciona. Isso é um bug no Ubuntu 16? Eu nunca tive todos esses problemas ao atualizar senhas antes.
21716 Chester
@Chester muito obrigado !! Esta foi a única maneira que finalmente funcionou agora, pois todas as outras soluções geram um erro. (Ubuntu-Server 16.04 aqui) Isso deve ser adicionado à resposta
derHugo
3

A partir do MySQL 5.7 , durante a instalação inicial, se você deixar a senha em branco, a autenticação será baseada no auth_socketplug - in para esse usuário .

A maneira correta de alterar a senha será:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

Barun
fonte
Este foi o meu caso exato (senha vazia durante a instalação no mysql 5.7) e esta foi a única solução para o meu caso.
cherouvim
Recebo a mensagem:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Por favor, reinicie o servidor MySQL sem --skip-grant-tablesopção e veja se esta solução funciona.
Barun
@ Barun, não, sem a --skip-grant-tablesopção Eu não consigo nem entrar no MySQL como root. Ele dizERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149
Resolvido! Eu tive que acessar o console MySQL regular (não mysqld_safe) como root sem senha. Eu tenho o Ubuntu 18.04 e o mysql-server-5.7. Esta resposta me ajudou a askubuntu.com/a/767252/585252 (veja a parte inferior)
user2513149
1

Nada do restante das respostas pareceu funcionar para mim. Esta é a minha solução:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

Lá:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

Então:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
fonte
1
O resto não funciona para mim nem ... nem a sua solução, infelizmente: Ainda obter este erro 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo
1
Este é o único conselho que funciona para mim dentre as seis sugestões que tentei, mas adicionei o bit do @Chester acima para evitar o erro "O arquivo de soquete UNIX não existe": sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldIsso está no mysql 5.7 e no ubuntu 18.04 .
twowheeler
0

Crie um arquivo com isso:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;

Pare o servidor mysql e execute o seguinte:

mysqld_safe --init-file=/home/me/mysql-init &

Verifique aqui para mais detalhes: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

Elier
fonte