Mysql
 sql >> база данни >  >> RDS >> Mysql

Пакетен скрипт на Windows за архивиране на локални MySQL бази данни и запазване само на N най-новите ПАПКИ с архивни файлове

С помощта на @foxidrive по-горе успях да получа датата на папките, каквато исках да бъдат, като ГГГГ-ММ-ДД ЧЧ-МИН-СЕК.

В тези папки се намират gzipped .sql бази данни, съхранявани благодарение на MySQL Backup Batch на adityasatrio .

С помощта на @Magoo от този отговор https://stackoverflow.com/a/17521693/1010918 Успях да изтрия всички папки (nameDir) при запазване най-новите N папки (nameDir), а също и не докосване на всички файлове, които може да са в директорията (backupDir).

Ето пълния работещ скрипт.

Чувствайте се свободни да премахнете всяко появяване на pause и и echo зане вижте какво се случва в командния ред.

Освен това добавете това към Windows Task Scheduler и ще имате солидно решение за архивиране за локална среда за разработка, която използва MySQL бази данни.

Моля, благодаря на хората, които ми помогнаха да направя това. Без вас, момчета, трябваше да използвам скъпо приложение за Windows само за локално запазване на MySQL бази данни.

(..и за следващия ни трик ще изпратим имейл регистър за грешки до себе си, ако има грешки при архивиране на .sql файловете.. но това е друг въпрос и история за друг ден.. )

 @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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайки Prepared Statement, как да върна идентификатора на вмъкнатия ред?

  2. Симулиране на ORDER BY FIELD() на MySQL в Postgresql

  3. Проектиране на връзки около структура на наследяване

  4. Използване на Laravel Raw Query с Placeholder

  5. Как да промените стойността по подразбиране на колона с помощта на процедура