sql >> Database >  >> RDS >> Mysql

Windows Batch Script om lokale MySQL-databases te back-uppen en alleen N laatste FOLDERS met back-upbestanden te bewaren

Met de hulp van @foxidrive hierboven ben ik erin geslaagd om de datum van de mappen te krijgen zoals ik ze wilde hebben, namelijk JJJJ-MM-DD HH-MIN-SEC.

In deze mappen worden de gzipped .sql-databases opgeslagen dankzij adityasatrio's MySQL Backup Batch Script .

Met de hulp van @Magoo uit dit antwoord https://stackoverflow.com/a/17521693/1010918 Ik heb alle mappen (nameDir) kunnen verwijderen met behoud van de nieuwste N-mappen (nameDir) en ook niet het aanraken van alle bestanden die zich in de map zouden kunnen bevinden (backupDir).

Hier is het volledige werkende script.

Voel je vrij om elk voorkomen van pause te verwijderen en en echo naar niet kijk wat er gebeurt in de opdrachtprompt.

Voeg dit bovendien toe aan Windows Taakplanner en je hebt een solide back-upoplossing voor een lokale ontwikkelomgeving die gebruik maakt van MySQL-databases.

Gelieve de mensen te bedanken die me geholpen hebben om dit voor elkaar te krijgen. Zonder jullie had ik een dure Windows-app moeten gebruiken om alleen lokaal MySQL-databases op te slaan.

(..en voor onze volgende truc gaan we een foutenlogboek naar onszelf e-mailen als er fouten zijn tijdens het maken van een back-up van de .sql-bestanden.. maar dat is een andere vraag en verhaal voor een andere 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. Een CHECK-beperking in SQL Server uitschakelen (T-SQL-voorbeelden)

  2. SQL Server 2017:Beschikbare functies op Linux

  3. Hoe een JDBC-toepassing te beschermen tegen SQL-injectie?

  4. MySQL InnoDB Cluster instellen met MySQL Shell (plus MySQL Router)