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

Le mieux serait bien sur d'utiliser un utilisateur MySQL dédié a la sauvegarde mais nous allons ici salement utiliser le compte root

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
Vous devez bien sur également adapter les chemins de sauvegarde et de mysqldump

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

sysadmin/mysqldump_windows.txt · Dernière modification: 2019/05/15 15:07 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0