Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Windows Batch Script để sao lưu cơ sở dữ liệu MySQL cục bộ &chỉ giữ N THƯ MỤC mới nhất với các tệp sao lưu

Với sự trợ giúp của @foxidrive ở trên, tôi đã quản lý để có được ngày của các thư mục như tôi muốn, chúng là YYYY-MM-DD HH-MIN-SEC.

Trong các thư mục này, các cơ sở dữ liệu .sql đã được giải nén được lưu trữ nhờ vào Tập lệnh sao lưu hàng loạt MySQL của adityasatrio .

Với sự trợ giúp của @Magoo từ câu trả lời này https://stackoverflow.com/a/17521693/1010918 Tôi đã quản lý để xóa tất cả các thư mục (nameDir) trong khi vẫn giữ N thư mục mới nhất (nameDir) và cũng không chạm vào bất kỳ tệp nào có thể có trong thư mục (backupDir).

Đây là tập lệnh làm việc hoàn chỉnh.

Vui lòng xóa mọi sự xuất hiện của pause và và echo để không xem điều gì đang xảy ra bên trong dấu nhắc lệnh.

Ngoài ra, hãy thêm tính năng này vào Trình lập lịch tác vụ của Windows và bạn có cho mình một giải pháp sao lưu ổn định cho môi trường phát triển cục bộ sử dụng cơ sở dữ liệu MySQL.

Xin cảm ơn những người đã giúp tôi hoàn thành việc này. Nếu không có các bạn, tôi sẽ phải sử dụng một ứng dụng Windows tốn kém chỉ để lưu cục bộ cơ sở dữ liệu MySQL.

(..và thủ thuật tiếp theo của chúng tôi, chúng tôi sẽ gửi nhật ký lỗi qua email cho chính mình nếu có lỗi khi sao lưu các tệp .sql .. nhưng đó là một câu hỏi khác và câu chuyện cho một ngày khác ..)

 @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. Cách tạo mối quan hệ trong MySQL

  2. Hỗ trợ JSON gốc trong MYSQL 5.7:Ưu và nhược điểm của kiểu dữ liệu JSON trong MYSQL là gì?

  3. MySQL, chuyển AUTO_INCREMENT sang một bảng khác

  4. Truy xuất MySQL cấp cao nhất của mẹ

  5. Làm thế nào để sử dụng Django với các bảng cơ sở dữ liệu chỉ đọc kế thừa với các khóa chính tổng hợp?