Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Windows Batch Script untuk mencadangkan database MySQL lokal &hanya menyimpan N FOLDER terbaru dengan file cadangan

Dengan bantuan @foxidrive di atas saya berhasil mendapatkan tanggal folder seperti yang saya inginkan, yaitu YYYY-MM-DD HH-MIN-SEC.

Dalam folder ini adalah databs .sql gzip yang disimpan berkat Skrip Batch Cadangan MySQL adityasatrio .

Dengan bantuan @Magoo dari jawaban ini https://stackoverflow.com/a/17521693/1010918 Saya berhasil menghapus semua folder (nameDir) sambil menyimpan folder N terbaru (nameDir) dan juga tidak menyentuh file apa pun yang mungkin ada di direktori (backupDir).

Inilah skrip kerja lengkapnya.

Jangan ragu untuk menghapus kemunculan pause dan dan echo untuk tidak lihat apa yang terjadi di dalam command prompt.

Selain itu, tambahkan ini ke Penjadwal Tugas Windows dan Anda akan mendapatkan solusi pencadangan yang solid untuk lingkungan pengembangan lokal yang menggunakan database MySQL.

Tolong ucapkan terima kasih kepada orang-orang yang membantu saya menyelesaikan ini. Tanpa kalian, saya harus menggunakan aplikasi Windows yang mahal hanya untuk menyimpan database MySQL secara lokal.

(..dan untuk trik selanjutnya kita akan mengirimkan email error log ke diri kita sendiri jika ada kesalahan saat membackup file .sql.. tapi itu adalah pertanyaan dan cerita lain untuk hari lain.. )

 @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. Permintaan mysql untuk mengonversi baris ke kolom secara dinamis

  2. mysql mati tapi subsys terkunci

  3. MySQL COUNT() dan nulls

  4. KESALAHAN 1452:Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal

  5. Bisakah saya menjalankan HTTP GET langsung di SQL di bawah MySQL?