Loading...
Willow Media

Reset mysql root password in docker container

In veel gevallen start ik MySql in Docker zo op, dat er een random root wachtwoord wordt aangemaakt. Dit is prima, mits je of het wachtwoord uit de logfile haalt. In het geval dat je deze niet hebt, kan je mogelijk in de problemen komen. Zo liep ik tegen het probleem aan dat binary logging aan stond en m'n schijfruimte vol begon te lopen.

Het gaat in dit geval om MySql 8, hoewel de methode voor een oudere installatie hetzelfde zal zijn, is de sql die uitgevoerd dient te worden wel anders. MySql kan opgestart worden met een initialisatie script, waarmee bijvoorbeeld het wachtwoord wordt aangepast.

We stoppen de container en starten deze weer op buiten het normale proces om. Of te wel, de container wordt gestart maar met bash als startup:

> docker-compose stop mysql
> docker-compose run mysql bash

Hierna zal je in de command prompt terecht komen. We maken een initialisatie script aan met de sql om het wachtwoord aan te passen:

> cat << 'EOF' > mysql-init.sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'super-secret-password';
FLUSH PRIVILEGES

Hierna starten we mysql op via mysqld_safe, met het script als parameter. Door & te gebruiken wacht de shell niet totdat de applicatie klaar is. Hij draait dus in de achtergrond:

> mysqld_safe --init-file=mysql-init.sql &
[1] 7
Logging to '/var/lib/mysql/b96a199271ba.err'.
2021-11-09T09:17:30.107776Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Overigens lijkt het er wel op dat de shell wacht tot het programma klaar is, maar als je een enter geeft zal er een nieuwe regel met de command prompt getoond worden. Vervolgens wachten we heel even zodat mysql kan starten en het script kan starten. Hierna kunnen we testen of het gelukt is:

> mysql -u root -p"super-secret-password" -h localhost

Als alles gelukt is, zal je hierna inloggen met het nieuwe wachtwoord. We sluiten de container via control+d of exit, en starten deze weer normaal op. Hierna is het mogelijk om als root met het nieuwe wachtwoord in te loggen:

> docker-compose up -d

Aanvullend, om vervolgens de binary log te laten krimpen kan bijvoorbeeld de volgende sql uitgevoerd worden, als root:

PURGE BINARY LOGS BEFORE '2021-11-09'
  • Docker
  • MySql