Zapomněli jste heslo uživatele root MySQL? Bez obav! Tato příručka vás provede kroky k resetování hesla uživatele root MySQL v operačních systémech Linux. Níže uvedené kroky by také měly fungovat pro resetování rootového hesla MariaDB.
Návod na resetování hesla uživatele root (administrátora) v MySQL jsme již zveřejnili starší verze, tedy MySQL 5.7. Tato metoda však nefungovala s novou verzí MySQL 8. Pokud jste chtěli resetovat heslo root v MySQL 8, postupujte podle některého ze dvou níže uvedených řešení.
Resetujte heslo kořenového uživatele MySQL v Linuxu
Jak jsem již zmínil, heslo root MySQL můžeme resetovat dvěma způsoby.
- Obecný způsob,
- Pomocí
init_file
systémová proměnná.
1. Obecný způsob resetování hesla root MySQL
Tato metoda bude fungovat bez ohledu na operační systém, který používáte. Varuji vás, že je to méně bezpečný způsobem, protože server MySQL spustíme pomocí --skip-grant-tables
volba. To umožňuje komukoli s přístupem k serveru neomezený přístup ke všem databázím .
Nejprve zastavte službu MySQL pomocí příkazu:
$ sudo systemctl stop mysql
Můžete ověřit, zda je MySQL skutečně zastavena příkazem:
$ sudo systemctl status mysql
Ukázkový výstup:
● 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 ubuntu2004.localdomain systemd[1]: Starting MySQL Community Server… May 29 10:08:37 ubuntu2004.localdomain systemd[1]: Started MySQL Community Server. May 29 11:53:07 ubuntu2004.localdomain systemd[1]: Stopping MySQL Community Server… May 29 11:53:08 ubuntu2004.localdomain systemd[1]: mysql.service: Succeeded. May 29 11:53:08 ubuntu2004.localdomain systemd[1]: Stopped MySQL Community Server.
Služba MySQL neběží.
Nyní restartujte server MySQL bez kontroly oprávnění spuštěním následujícího příkazu:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Zde --skip-grant-tables
umožňuje připojit se k databázovému serveru mysql bez hesla a se všemi oprávněními. --skip-networking
Tato volba se používá k zabránění připojení ostatních klientů k databázovému serveru. A ampersand (&
) symbol se používá ke spuštění příkazu na pozadí, takže můžete psát další příkazy uvedené v následujících krocích. Mějte prosím na paměti, že výše uvedený příkaz je nebezpečný a váš databázový server se stává nezabezpečeným a zranitelným vůči bezpečnostním hrozbám. Tento příkaz byste měli spouštět pouze na krátkou dobu pro resetování hesla.
Může se zobrazit následující chyba:
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.
Pokud se zobrazí tato chyba, vytvořte chybějící adresář (tj. /var/run/mysqld
) a nastavte mu správná oprávnění, jak je uvedeno níže.
$ sudo mkdir -p /var/run/mysqld
$ sudo chown -R mysql:mysql /var/run/mysqld
Nyní zkuste znovu spustit server mysql bez hesla a s právy root:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Dále se připojte k serveru mysql pomocí příkazu:
$ mysql
Dostanete se do příkazového řádku mysql shellu.
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.
Protože jsme se přihlásili bez načtení tabulek grantů (protože jsme použili --skip-grant-tables
možnost), nemůžeme použít ALTER USER
příkaz k resetování hesla. Pojďme tedy načíst tabulky grantů pomocí příkazu:
mysql> FLUSH PRIVILEGES;
Nyní spusťte následující příkaz pro aktualizaci hesla uživatele root mysql:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
Ve výše uvedeném příkazu nahraďte [email protected]#@!
s vlastním heslem. Upozorňujeme, že pokud jste povolili Validate Password
musíte použít silné heslo.
Nakonec ukončete výzvu mysql:
mysql> exit
Nakonec vypněte běžící databázový server, který jste spustili dříve pomocí --skip-grant-tables
volba. Chcete-li to provést, spusťte:
$ sudo mysqladmin -u root -p shutdown
Budete požádáni o zadání sudo
heslo následované root
MySQL uživatelské heslo, které jste nastavili v předchozím kroku.
[sudo] password for ostechnix: Enter password: 2021-05-29T12:09:38.425737Z mysqld_safe mysqld from pid file /var/lib/mysql/ubuntu2004.localdomain.pid ended [1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Pokud výše uvedený příkaz nefunguje, vyhledejte .pid file
který obsahuje ID procesu serveru. Soubor PID bude obvykle dostupný v /var/lib/mysql/
nebo /var/run/mysqld/
nebo /usr/local/mysql/data/
adresář v závislosti na vaší distribuci, názvu hostitele a konfiguraci. Obecně má název souboru příponu .pid a začíná buď mysqld
nebo název hostitele vašeho systému.
V mém případě je to "/var/lib/mysql/ubuntuserver.pid"
.
Zastavil jsem tedy instanci databázového serveru příkazem:
$ sudo kill `/var/lib/mysql/ubuntuserver.pid`
Použijte prosím zpětné zaškrtnutí uvést cestu k souboru.
MySQL pid můžeme také najít pomocí ps
a grep
příkazy jako níže:
$ ps ax | grep mysql
Ukázkový výstup:
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
Ručně to zabijte, jak je uvedeno níže:
$ sudo kill <PID>
Nebo ukončete všechny služby MySQL:
$ sudo killall mysql
Nyní spusťte službu MySQL normálně pomocí příkazu:
$ sudo systemctl start mysql
Nyní se přihlaste k serveru MySQL s novým heslem:
$ mysql -u root -p
Ukázkový výstup:
2. Resetujte kořenové heslo MySQL pomocí souboru s hesly
Dalším způsobem, jak resetovat heslo root mysql, je použít init_file
systémová proměnná.
Zastavit službu MySQL:
$ sudo systemctl stop mysql
Vytvořte textový soubor, například ostechnix.txt
:
$ vi ostechnix.txt
Přidejte do něj následující řádek:
ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
Nahraďte [email protected]#@!
s vlastním heslem ve výše uvedeném řádku. Pokud jste povolili Validate Password
plugin, měli byste zadat silné heslo. Uložte a zavřete soubor.
Nyní spusťte MySQL server pomocí init_file
systémová proměnná, která ukazuje na ostechnix.txt
soubor:
$ sudo mysqld --init-file=/home/sk/ostechnix.txt &
Tento příkaz spustí obsah ostechnix.txt
a aktualizujte soubor [email protected]
heslo účtu s novým heslem uvedeným v ostechnix.txt
a nakonec spusťte server mysql.
Nyní zastavte a restartujte server mysql normálně:
$ sudo systemctl stop mysql
$ sudo systemctl start mysql
Nakonec smažte soubor s hesly, tj. ostechnix.txt
.
$ rm /home/sk/ostechnix.txt
Nyní se můžete přihlásit k serveru mysql pomocí nového hesla pomocí příkazu:
$ mysql -u root -p
Také jsme zveřejnili mírně odlišnou metodu resetování kořenového hesla MySQL. Podrobnosti naleznete v následující příručce:
>> How To Reset Root Password In MySQL 8 On Ubuntu Linux
Závěr
V této příručce jsme se naučili dva různé způsoby, jak obnovit zapomenuté heslo uživatele root MySQL v operačních systémech Linux. Pokud jste ztratili heslo uživatele k účtu správce databáze, můžete ho snadno resetovat během několika minut.