Obejití hesla k MySQL s minimálním „výpadkem“
Dnes jsem náhodou potřeboval řešit přístup k MySQL serveru na kterém bylo špatně uloženo root heslo. Aby to nebylo tak jednoduché, jednalo se o produkční server kde se odstávka nedá řešit na delší dobu než 1 – 2 vteřiny, takže klasický postup s přidáním parametru –skip-grant-tables tak jak je popisován ve spoustě návodů nejde použít, protože server by byl vystven veřejně na Internetu s vypnutou autorizací.
Řešení je kupodivu překvapivě jednoduché, ale návod se o něm nezmiňuje. Stačí vytvořit script obsahující například takovýto dotaz:
UPDATE
mysql.user
SET
Password=PASSWORD('noveheslo')
WHERE
User='root';
FLUSH PRIVILEGES;
Tento script uložte napřiklad do souboru /var/lib/mysql/init.sql (samozřejmě cesta k instalaci MySQL se na Vašem serveru může lišit, tato je ale nejobvyklejší) a do souboru /etc/my.cnf přidejte do sekce označené [mysqld] řádku:
[mysqld] . . . . init-file=/var/lib/mysql/init.sql
Nyní MySQL server restartujte a přihlašte se nově nastaveným heslem. Celý výpadek jsme tímto tedy minimalizovali jen na dobu restartu služby.
Nezapomeňte ihned po úspěšné změně hesla odstranit záznam init-file ze souboru /etc/my.cnf a samozřejmě také smazat script init.sql který jste pro tuto změnu hesla vytvořili!!!
Tento postup byl testován na MySQL 5.1.46. Na starších verzích nemusí fungovat nebo se může chovat jinak.

Dobrej tip. Díky za něj.