Mit Hilfe von @foxidrive oben gelang es mir, das Datum der Ordner so zu bekommen, wie ich es wollte, nämlich YYYY-MM-DD HH-MIN-SEC.
In diesen Ordnern sind die gzippten .sql-Datenbanken gespeichert dank adityasatrio's MySQL Backup Batch Script .
Mit Hilfe von @Magoo aus dieser Antwort https://stackoverflow.com/a/17521693/1010918 Ich habe es geschafft, alle Ordner (nameDir) unter Beibehaltung zu löschen die neuesten N-Ordner (nameDir) und auch nicht Berühren von Dateien, die sich möglicherweise im Verzeichnis (backupDir) befinden.
Hier ist das vollständige Arbeitsskript.
Fühlen Sie sich frei, jedes Vorkommen von pause
zu entfernen und und echo
zu nicht Sehen Sie, was in der Eingabeaufforderung vor sich geht.
Fügen Sie dies zusätzlich zum Windows Task Scheduler hinzu und Sie haben selbst eine solide Sicherungslösung für eine lokale Entwicklungsumgebung, die MySQL-Datenbanken verwendet.
Bitte danke den Leuten, die mir geholfen haben, dies zu erledigen. Ohne euch hätte ich eine kostspielige Windows-App verwenden müssen, nur um MySQL-Datenbanken lokal zu speichern.
(.. und für unseren nächsten Trick werden wir uns selbst ein Fehlerprotokoll per E-Mail zusenden, wenn beim Sichern der .sql-Dateien Fehler auftreten.. aber das ist eine andere Frage und Geschichte für einen anderen Tag..)
@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