sql >> Databáze >  >> RDS >> Mysql

Windows Batch Script pro zálohování místních databází MySQL a uchovávání pouze N nejnovějších SLOŽEK se záložními soubory

S pomocí @foxidrive výše se mi podařilo získat datum složek tak, jak jsem chtěl, aby byly, tedy RRRR-MM-DD HH-MIN-SEC.

V těchto složkách jsou gzipované databáze .sql uložené díky adityasatrio zálohovacímu skriptu MySQL Backup Batch Script .

S pomocí @Magoo z této odpovědi https://stackoverflow.com/a/17521693/1010918 Podařilo se mi odstranit všechny složky (nameDir) při zachování nejnovějších N složek (nameDir) a také ne dotykem na všechny soubory, které mohou být v adresáři (backupDir).

Zde je kompletní pracovní skript.

Neváhejte a odstraňte jakýkoli výskyt pause a a echo ne podívejte se, co se děje uvnitř příkazového řádku.

Přidejte to navíc do Plánovače úloh systému Windows a máte spolehlivé řešení zálohování pro místní vývojové prostředí, které využívá databáze MySQL.

Prosím, poděkujte lidem, kteří mi pomohli to udělat. Bez vás bych musel používat nákladnou aplikaci pro Windows pouze k místnímu ukládání databází MySQL.

(..a pro náš další trik si pošleme e-mailem protokol chyb, pokud při zálohování souborů .sql dojde k chybám.. ale to je jiná otázka a příběh na jiný den.. )

 @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. Inner Join laravel 5.2

  2. Vysvětlení příkazu DROP TABLE na serveru SQL

  3. Růst velikosti databáze SQL Server pomocí historie zálohování

  4. Schéma nelze zrušit, protože neexistuje nebo nemáte oprávnění. - SQL Server / Výukový program TSQL, část 29