sql >> Database teknologi >  >> RDS >> Mysql

Windows Batch Script til at sikkerhedskopiere lokale MySQL-databaser og kun beholde N seneste MAPPER med backup-filer

Ved hjælp af @foxidrive ovenfor lykkedes det mig at få datoen på mapperne, som jeg ville have dem til at være, de var ÅÅÅÅ-MM-DD TT-MIN-SEK.

I disse mapper er de gzippede .sql-databaser gemt takket være adityasatrios MySQL Backup Batch Script .

Med hjælp fra @Magoo fra dette svar https://stackoverflow.com/a/17521693/1010918 Det lykkedes mig at få slettet alle mapper (nameDir) mens jeg beholdt de seneste N mapper (nameDir) og også ikke ved at røre ved filer, der måtte være i mappen (backupDir).

Her er det komplette arbejdsscript.

Du er velkommen til at fjerne enhver forekomst af pause og og echo til ikke se, hvad der foregår inde i kommandoprompten.

Tilføj også dette til Windows Task Scheduler, og du har dig selv en solid backup-løsning til et lokalt udviklingsmiljø, der gør brug af MySQL-databaser.

Tak venligst de mennesker, der hjalp mig med at få dette gjort. Uden jer ville jeg kun have været nødt til at bruge en dyr Windows-app for lokalt at gemme MySQL-databaser.

(..og til vores næste trick vil vi e-maile en fejllog til os selv, hvis der er fejl under sikkerhedskopiering af .sql-filerne.. men det er et andet spørgsmål og en historie for en anden dag.. )

 @echo off

 set dbUser=root
 set dbPassword=root
 set "backupDir=D:\MySQLDumps"
 set "mysqldump=C:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump.exe"
 set "mysqlDataDir=C:\wamp\bin\mysql\mysql5.6.17\data"
 set "zip=C:\Program Files\7-Zip\7z.exe"

 :: https://stackoverflow.com/a/31789045/1010918 foxidrive's answer helped me get the folder with the date and time I wanted

rem The four lines below will give you reliable YY DD MM YYYY HH Min Sec MS variables in XP Pro and higher.

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "MS=%dt:~15,3%"

 set "dirname=%YYYY%-%MM%-%DD% %HH%-%Min%-%Sec%"

 :: remove echo here if you like
 echo "dirName"="%dirName%"

 :: switch to the "data" folder
 pushd "%mysqlDataDir%"

 :: create backup folder if it doesn't exist
 if not exist "%backupDir%\%dirName%\" mkdir "%backupDir%\%dirName%"

 :: iterate over the folder structure in the "data" folder to get the databases

 for /d %%f in (*) do (
 :: remove echo here if you like
 echo processing folder "%%f"

 "%mysqldump%" --host="localhost" --user=%dbUser% --password=%dbPassword% --single-transaction --add-drop-table --databases %%f > "%backupDir%\%dirName%\%%~nxf.sql"

 "%zip%" a -tgzip "%backupDir%\%dirName%\%%~nxf.sql.gz" "%backupDir%\%dirName%\%%~nxf.sql"

  del "%backupDir%\%dirName%\%%~nxf.sql"

 )
 popd

 :: delete all folders but the latest 2


 :: https://stackoverflow.com/a/17521693/1010918 Magoo's answer helped me get what I wanted to do with the folders
 :: for /f "skip=2 delims=" %G in ('dir /B /ad-h /o-d') DO echo going to delete %G

 :: below following my version with rd (remove dir) command and /s and /q
 :: remove echo before rd to really delete the folders in question!!
 :: attention they will be deleted with content in them!!

 :: change the value after skip= to what you like, this is the amount of latest folders to keep in your backup directory
    for /f "skip=2 delims=" %%a in (' dir "%backupDir%\" /b /ad-h /o-d') do echo rd /s /q "%backupDir%\%%a"

:: remove pause here if you like and add the file to Windows Task Manager
 pause


  1. Opdag fremtidige duplikerede værdier, mens du itererer gennem MySQL-resultater i PHP

  2. Hvordan gemmer man flere muligheder i en enkelt tabel?

  3. MySql bærbar version

  4. PHP:Vis HTML, hvis der eksisterer en post, ellers vis intet