Mám řešení!
Při resetování hesla uživatele root v kroku 2) změňte také ověřovací plugin na mysql_native_password
:
use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root'; # THIS LINE
flush privileges;
quit;
To mi umožnilo úspěšně se přihlásit!
Řešení s úplným kódem
1. Nejprve spusťte tyto bash příkazy
sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql
2. Poté spusťte příkazy mysql => zkopírujte a vložte toto do CLI ručně
use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user
flush privileges;
quit;
3. Spusťte více příkazů bash
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p
4. Problém se zásuvkou (z vašich komentářů)
Když uvidíte zásuvku Chyba, komunita přišla se 2 možnými řešeními:
sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &
(díky @Cerin)
Nebo
mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld
(díky @Peter Dvukhrechensky)
Slepé cesty a možné chyby hran
Namísto localhost použijte 127.0.0.1
mysql -uroot # "-hlocalhost" is default
Může vést k chybě „chybějící soubor“ nebo slt.
mysql -uroot -h127.0.0.1
Funguje lépe.
Přeskočit problém se soketem
Našel jsem mnoho způsobů, jak vytvořit mysqld.sock
soubor, změnit přístupová práva nebo jej symbolicky propojit. O to koneckonců nešlo.
Přeskočte my.cnf
soubor
Problém tam také nebyl. Pokud si nejste jisti, může vám pomoci toto.
Pro Ubuntu 18.04 a mysql 5.7
-
krok 1:
sudo mkdir /var/run/mysqld;
krok 2:
sudo chown mysql /var/run/mysqld
krok 3:
sudo mysqld_safe --skip-grant-tables
&quit (použijte quit if itsstuck )
přihlášení do mysql bez hesla
-
krok 4:
sudo mysql --user=root mysql
krok 5:
SELECT user,authentication_string,plugin,host FROM mysql.user;
krok 6:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'
nyní se přihlaste pomocí
mysql -u root -p <root>
Můžete to zkusit následovně, u mě to funguje.
Spustit server:
sudo service mysql start
Nyní přejděte do složky ponožek:
cd /var/run
Zálohujte ponožku:
sudo cp -rp ./mysqld ./mysqld.bak
Zastavit server:
sudo service mysql stop
Obnovte ponožku:
sudo mv ./mysqld.bak ./mysqld
Spusťte mysqld_safe:
sudo mysqld_safe --skip-grant-tables --skip-networking &
Init mysql shell:
mysql -u root
Změnit heslo:
Nejprve tedy vyberte databázi
mysql> use mysql;
Nyní zadejte dva dotazy:
mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root';
Nyní bude vše v pořádku.
mysql> flush privileges;
mysql> quit;
Pro kontrolu:
mysql -u root -p
hotovo!
N.B, After login please change the password again from phpmyadmin
Nyní zkontrolujte hostname/phpmyadmin
Username: root
Password: 123456
Další podrobnosti naleznete v části Jak obnovit zapomenuté heslo phpmyadmin v Ubuntu
mysql
příkaz ve výchozím nastavení používá k připojení k MySQL sokety UNIX.
Pokud používáte MariaDB, musíte na straně serveru načíst modul Unix Socket Authentication Plugin.
Můžete to udělat úpravou [mysqld]
konfigurace takto:
[mysqld]
plugin-load-add = auth_socket.so
V závislosti na distribuci je konfigurační soubor obvykle umístěn na /etc/mysql/
nebo /usr/local/etc/mysql/
Pokud unix_socket=OFF
je nastaven ve stejné sekci, povolte jej změnou na unix_socket=ON
nebo tato oprava neplatí.