sql >> データベース >  >> RDS >> Mysql

ローカルのMySQLデータベースをバックアップし、バックアップファイルを含む最新のフォルダをN個だけ保持するWindowsバッチスクリプト

    上記の@foxidriveの助けを借りて、フォルダの日付を希望どおりに取得できました。フォルダはYYYY-MM-DDHH-MIN-SECです。

    これらのフォルダには、adityasatrioのMySQLバックアップバッチスクリプト のおかげで保存されたgzip圧縮された.sqlデータベースがあります。 。

    この回答から@Magooの助けを借りて https://stackoverflow.com/a/17521693/1010918 保持しながらすべてのフォルダ(nameDir)を削除することができました 最新のN個のフォルダー(nameDir)およびない ディレクトリ(backupDir)にある可能性のあるファイルに触れます。

    これが完全に機能するスクリプトです。

    pauseの発生を自由に削除してください およびecho しない コマンドプロンプト内で何が起こっているかを確認してください。

    さらに、これをWindowsタスクスケジューラに追加すると、MySQLデータベースを利用するローカル開発環境用の堅牢なバックアップソリューションを手に入れることができます。

    私がこれを成し遂げるのを手伝ってくれた人々に感謝してください。皆さんがいなければ、MySQLデータベースをローカルに保存するためだけに高価なWindowsアプリを使用する必要がありました。

    (..そして次のトリックでは、.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. 行番号=rownumの場所を選択します

    2. 軽量のWordPressインストール:SQLiteでWordPressをインストールする方法

    3. Pythonでのmysql.connectorを使用したformat-parametersの処理に失敗しました

    4. Jsonはmysql結果セット全体をエンコードします