impossibile ripristinare la password di root di mysql


28

Devo reimpostare la password di root della mia installazione mysql locale ma non me lo permetterebbe. Ho provato questo:

$ 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

Come posso ottenere la reimpostazione della password? modifica 1 Ho ottenuto questo:

$ 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)

sembra che un processo riavvii automaticamente mysql non appena lo uccido ...

Risposte:


43

Per prima cosa prova ad usare

mysql -u root -p

e inserisci la tua password (se ricordi) al prompt per accedere come utente sql-root (nota che l'opzione -pè per la password).

Se devi davvero reimpostare la password di root per mysql, ecco un modo semplice: riconfigurare il pacchetto con dpkg-reconfigure.

Semplici passi per ripristinare la password di root mySQL:

  1. Controlla la versione del tuo mysql-server;

    apt-cache policy mysql-server
    

    e vedere la riga che mostra la versione installata tra le altre informazioni. ad esempio per la mia installazione è:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (Da questo so che ho mysql-server-5.5installato nel mio sistema.)

  2. Inizia la riconfigurazione con:

    sudo dpkg-reconfigure mysql-server-*.*
    

    dove mysql-server-*.*dovrebbe essere sostituito dalla versione che hai. (per me sarebbe mysql-server-5.5). Questo fermerà il demone del database. Verrà quindi visualizzato un messaggio in cui dovresti inserire la nuova password e confermare la riconfigurazione.

    snap1

    Il demone verrà avviato automaticamente al termine della riconfigurazione.

  3. È quindi possibile accedere con:

    mysql -u root -p
    

    e avvia le attività di amministrazione del database.

Riferimenti:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Che verrebbe presto ripulito come indicato nella pagina.]

  2. Guida al server Ubuntu relativa alla tua versione specifica.


2
Posso confermare che ha dpkg-reconfigure mariadb-server-10.1funzionato per MariaDB quando tutte le altre soluzioni no. Grazie per questo.
liviucmg,

19
dpkg-reconfigurenon ha richiesto la password per me .. c'è un modo per forzarla?
Unirgy

15
Non ha funzionato per me. Ho usato il comando come sopra e ho ottenuto "Verifica se è necessario l'aggiornamento. Questa installazione di MySQL è già stata aggiornata a 5.7.13, utilizzare --force se è ancora necessario eseguire mysql_upgrade". L'uso di --force ha dato la stessa risposta.
Anthony Scaife,

5
Apparentemente questo non funziona più.
dpi

1
@Paulo Henrique No. Data la situazione, abbiamo deciso che il miglior uso del nostro tempo era una reinstallazione completa del server.
Anthony Scaife,

21

Riferimento tratto da questo blog:

Passaggio 1: interrompere il servizio MySQL.

sudo service mysql stop

Passaggio 2: uccidi tutti i mysqld in esecuzione.

sudo killall -9 mysqld

Passaggio 3: avvio di mysqld in modalità provvisoria.

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

Passaggio 4: avviare il client mysql

mysql -u root

Passaggio 5: dopo aver eseguito correttamente l'accesso, eseguire questo comando per modificare qualsiasi password.

FLUSH PRIVILEGES;

Passaggio 6: è possibile aggiornare la password di root di mysql.

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

per mysql> 5.7 usa questo invece di sopra:

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

Passaggio 7: eseguire questo comando.

FLUSH PRIVILEGES;

Passaggio 8: esci dalla console mysql

exit

Passaggio 9: uccidi mysqld_safe e avvia mysql

sudo killall mysqld_safe && sudo service mysql start

1
dovrebbe essere sudo service mysql stop, nosudo stop mysql
knocte

1
inoltre, alla fine mancano i passaggi sudo killall mysqld_safe && sudo service mysql starte quindi riprovare ad accedere nuovamente
knocte

3
Per MYSQL 5.7 la sintassi del cambio password è stata cambiata inALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel,

7
NOTA ! C'è una nuova bestia in MySQL 5.7 chiamata auth_socket. Se installi mysql senza una password di root, la bestia ti attaccherà e perderai 50 punti ferita. Nel passaggio 6 sopra è necessario ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Puoi leggerlo qui . Teoricamente (non ho provato), dovresti essere in grado di accedere a mysql senza password se "sudo su -" diventa root.
olafure,

3
E nel caso in cui ALTER USER ...non funzioni, usaUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure il

9

Sotto Ubuntu 16.04 e mysql-server-5.7, la risposta corretta è l'ultimo commento di olafure, dpkg-reconfigure mysql-server-5.7non funziona più.

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

Ora nella console mysql >mysql

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

Riavvia il buon mysql processo

sudo killall mysqld
sudo service mysql start

Controlla la tua nuova password

mysql -u root -p
Enter password: newpass
mysql>

5
In mysqld_safeesecuzione, ottengo l'errore: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Così ho corso sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqlde il resto della risposta sopra funziona. È un bug su Ubuntu 16? Non ho mai riscontrato tutti questi problemi durante l'aggiornamento delle password.
Chester,

@Chester grazie mille !! Questo è stato l'unico modo che alla fine ha funzionato ora poiché tutte le altre soluzioni generano un errore. (Ubuntu-Server 16.04 qui) Questo dovrebbe essere aggiunto alla risposta
derHugo,

3

A partire da MySQL 5.7 , durante l'installazione iniziale, se si lascia la password vuota, per quell'utente l'autenticazione si baserà sul auth_socketplug-in.

Il modo corretto di cambiare la password sarà:

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/


Questo era il mio caso esatto (password vuota durante l'installazione in mysql 5.7) e questa era l'unica soluzione per il mio caso.
Cherouvim,

Ricevo il messaggio:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149,

@ user2513149 Riavviare il server MySQL senza --skip-grant-tablesopzione e vedere che questa soluzione funziona.
Barun,

@Barun, no, senza --skip-grant-tablesopzione non riesco nemmeno ad accedere a MySQL come root. DiceERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149 il

Risolto! Ho dovuto accedere alla normale console MySQL (non mysqld_safe) come root senza password. Ho Ubuntu 18.04 e mysql-server-5.7. Questa risposta mi ha aiutato a askubuntu.com/a/767252/585252 (vedere la parte inferiore)
user2513149

1

Nulla del resto delle risposte sembrava funzionare per me. Questa è la mia soluzione:

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

Lì dentro:

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

Poi:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p

1
Il resto non funziona per me né ... né purtroppo la tua soluzione: continua a ricevere questo errore 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
Questo è l'unico consiglio che funziona per me tra i sei suggerimenti che ho provato, ma ho aggiunto il bit di @Chester sopra per evitare l'errore "file socket UNIX non esiste": si sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldtratta di mysql 5.7 e ubuntu 18.04 .
twowheeler

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.