V tomto článku vám ukážu, jak obnovit heslo root MySQL dvěma různými způsoby. Obě metody také náhodou fungují s vidlicí MariaDB bez Oracle.
Proč?
Existují dva hlavní důvody, proč je nutné resetovat heslo root:
- zapomněli jste heslo
- to nevíte toto heslo
Důvodů, proč neznáte heslo, může být mnoho:nikdy jste neznali heslo a starý DBA je pryč; někdo se změnil pro zábavu nebo ze zlomyslných důvodů; jsou 3 hodiny ráno, systém se zhroutil a dba je na dovolené v jiné zemi atd.
Faktem je, že jednoho rána musíte nacpat databázi a dostat se do této situace:

Předpokládám, že máte superuživatele (tj. su nebo sudo do root) přístup k operačnímu systému. Můj operační systém v tomto tutoriálu je Debian Linux.
Obě metody vyžadují, abyste předtím zastavili službu mysql. Udělejte to pomocí (nezapomeňte na su/sudo podle potřeby):
# service mysql stop
Metoda 1:
Vytvořte soubor pomocí příkazu SQL pro nastavení nového root hesla, které použijeme při startu mysql. Můžete použít jakýkoli textový editor nebo stačí napsat:
# echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';" > passreset.sql
Pokud zvolíte textový editor, vytvořte soubor pouze s tučnou částí. Samozřejmě zvolte skutečný heslo, snadno zapamatovatelné a těžko zjistitelné.
A spusťte jej ručně pomocí uživatele mysql ( -u mysql) a souboru, který jsme předtím vytvořili (–init-file:passreset.sql). Úplný příkazový řádek by byl:
# mysqld -u mysql --init-file=/var/lib/mysql/passreset.sql
Počkejte, dokud se nezobrazí zpráva:mysqld:připraveno na připojení . Poté otevřete další konzolu a otestujte své nové root heslo:

Metoda 2:
V minulosti jsem to viděl několikrát na internetu, jak resetovat heslo root mysql. První pokus dnes ráno pro mě nefungoval, ale našel jsem řešení.
Použijeme tento přepínač příkazu mysqld:
--skip-grant-tables Start without grant tables. This gives all users FULL ACCESS to all tables.

To mi umožnilo plný přístup ke všem tabulkám. Postup je připojit se k mysql a spustit příkaz ALTER USER, který jsme viděli v předchozí metodě, ale zobrazila se chyba o spuštění mysqld s tabulkami skip-grant-tables.
Řešením je spustit mysqld pomocí přepínače skip-grant-tables a pomocí uživatele mysql. Úplný příkazový řádek je:
# mysqld -u mysql --skip-grant-tables
A v jiné konzoli před aktualizací vyprázdněte oprávnění a poté oprávnění znovu:
# mysql -u root
MariaDB (none) > flush privileges;
MariaDB (none) > ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
MariaDB (none) > flush privileges;
MariaDB (none) > ^DBye

Dokončit
Nyní můžete zastavit mysql a spustit jej normálně. V mém případě ctrl-c nefungovalo, aby to zastavilo, musím předtím zabít ručně spuštěný proces:
# killall mysqld
# service mysql start
A je to, jednou z těchto metod znovu získáte kontrolu nad MySQL nebo MariaDB.