Table des matières
Sauvegarde automatique de base MySQL sous windows
Certains ont le mauvais gout d'installer des serveurs MySQL sous windows plutot que d'utiliser un vrai OS.
Cela ne va néanmoins pas nous empêcher de vouloir mettre en place une sauvegarde automatisée de ces bases L'idée est de faire tourner une tache planifiée avec un utilisateur dédié. Nous allons sauvegarder les credentials MySQL pour cet utilisateur Il suffira ensuite d’écrire le script de sauvegarde, puis de le lancer via le planificateur de tache
Stockage des credentials
On va stocker le login / mot de passe utilisé pour le dump (ici root) dans %APPDATA%\MySQL\.mylogin.cnf de l'utilisateur concerné (ce fichier ne sera pas un fichier plaintext)
- lancer une invite ligne de commande sous le nom de l'utilisateur de service :
runas /user:jobserviceaccount@mydomain cmd
- dans cette fenetre lancer la commande suivant (adapter le chemin vers MySQL en fonction de votre version) :
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql_config_editor" set --user=root --password
- entrez le mot de passe associé qui sera stocké automatiquement
Ecriture du script de sauvegarde
Prenez votre éditeur favori ou a défaut lancez le moins moisi que vous trouverez sous windows : notepad++.
Un simple blocnote aka notepad peut faire l'affaire. On va ici éditer un nouveau fichier, par exemple dans mon cas D:\sauvegarde_mysql.bat
Mettez y le contenu suivant :
SET JOUR=%date:~-10,2% SET ANNEE=%date:~-4% SET MOIS=%date:~-7,2% SET HEURE=%time:~0,2% SET MINUTE=%time:~3,2% SET SECOND=%time:~-5,2% IF "%time:~0,1%"==" " SET HEURE=0%HEURE:~1,1% SET REPERTOIR=D:\SauvegardeMysql\ SET FICHIER=%REPERTOIR%%ANNEE%_%MOIS%\Sauvegarde_mysql_du_%JOUR%_%MOIS%_%ANNEE%_a_%HEURE%_%MINUTE%.sql IF NOT exist "%REPERTOIR%%ANNEE%_%MOIS%" md "%REPERTOIR%%ANNEE%_%MOIS%" REM do the actual dump "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump" -u root --opt iobeya -h localhost > %FICHIER% REM Compress DB dump file into CAB file (use "EXPAND file.cab" to decompress). REM makecab / expand command is available on all windows versions and compression is claimed to be better than zip REM MAKECAB "%FICHIER%" "%FICHIER%.cab" REM or we just use 7zip since it works better :p "C:\Program Files\7-Zip\7z.exe" a -t7z %FICHIER%.7z %FICHIER% REM Delete uncompressed DB dump file if comprssion is fine if %ERRORLEVEL% EQU 0 DEL /q /f "%FICHIER%" REM remove backups older than 2 months old set /a m=%date:~3,2%-2 if %m% LSS 10 set m=0%m% set a=%date:~6,4% rmdir "%REPERTOIR%%a%_%m%" /s /q
Changez le nom de la base (ici iobeya) par votre base a sauver (ou sinon regardez l'option –all-databases par exemple)
Le mieux est d'essayer de lancer ce script une fois manuellement dans la fenêtre qui est encore ouverte au nom de l'utilisateur de service, voir si tout se passe bien en lançant dedans :
D:\sauvegarde_mysql.bat
Vous devriez voir apparaitre un répertoire ANNEE_MOIS dans votre répertoire de sauvegarde (ici D:\SauvegardeMysql\2019_05 par exemple) contenant lui même un fichier qui ne doit pas être vide
Si tout c'est bien passé, il suffit d'ajouter la tâche planifiée associée.
Création de la tache planifiée
- Lancer le task scheduler
- Créer une nouvelle tache, dont l'utilisateur sera comme ci dessus jobserviceaccount@mydomain
- On peut cocher la case de ne pas stocker le mot de passe localement : acces a des ressources locales uniquement
- Dans les action, ajouter une nouvelle action “démarrer un programme” et lancer votre script D:\sauvegarde_mysql.bat
- Ajouter un nouveau trigger, on va choisir une execution quotidienne le soir, par exemple vers 22h (ne pas oublier d'activer ce trigger en cochant la case en bas :p )
- On doit vous demander le mot de passe du compte de service associé
Ca y est c'est fini
Voila il ne vous reste plus qu'a déguster une bonne biere un bon café en attendant de voir demain si tout c'est bien passé cette nuit pour cette sauvegarde