WordPress バックアップ

 サーバー自体のバックアップとは別にWordPressの設定、データベースのバックアップを定期的に行う。

 設定ファイル等はrobocopyで存在するファイルのみ新しいものをコピーする。

 データベースは、SQLファイルとして毎日1回出力する。

 サーバー上に保存するとインスタンスを削除したときに消えてしまうのでローカルPCに保存する。そのため、リモート接続を行ったときにのみ行うこととした。

 あらかじめローカルPCにはバックアップしたい設定ファイル等のファイルを同じ階層構造でコピーしておく。

 システム環境変数にローカルPCのフォルダーパスを定義しておく。

WORDPRESS_BACKUP=\\tsclient\C\Backup

 ローカルPCにファイルを保存するため、タスクスケジューラーでリモートデスクトップ接続したときに実行するように設定しておく。その際、ローカルリソースのCドライブを利用することを指定している。

Backup.bat

@echo off
echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
rem DATEの出力で、先頭に曜日が漢字一文字で表示されることがある。
rem その場合は設定-時計と言語-日付と時刻-日付と時刻の形式を変更するで、
rem 日付(短い形式)でyyyy/MM/ddを選ぶと曜日が出力されなくなるようだ。
rem OSのバージョンによっては、設定-時刻と言語-日付と時刻-日付、時刻、地域の書式設定-データ形式を変更する
if not "%1" == "" goto :BACKUP

setlocal

if not exist %~d0%~p0log mkdir %~d0%~p0log

set LOG_FILE=%~d0%~p0log\%COMPUTERNAME%_Backup_%date:~-10,4%-%date:~-5,2%-%date:~-2,2%.log

if "%WORDPRESS_BACKUP%" == "" (
    echo no backup placement >> %LOG_FILE% 2>&1
    echo set WORDPRESS_BACKUP=xxx >> %LOG_FILE% 2>&1
    endlocal

    EXIT /B
)

if not exist %LOG_FILE% (
    rem ログファイルへ出力するため、あえてファイルを通して呼び出す
    for %%f in (ProgramData Squid xampp) do call %0 %%f >> %LOG_FILE% 2>&1

    call BackupMySQL.bat >> %LOG_FILE% 2>&1
)

endlocal

EXIT /B

:BACKUP

setlocal

if exist \%1 (
  if not "%WORDPRESS_BACKUP%" == "" (
      echo robocopy  \%1 %WORDPRESS_BACKUP%\%1 /S /XJ /XO /XX /XL /NP
      robocopy  \%1 %WORDPRESS_BACKUP%\%1 /S /XJ /XO /XX /XL /NP
  )
)

endlocal

EXIT /B

 時刻が%TIME: =0%となっているのは、10:00より前は10時台が0サプレスされるのでスペースを0に置き換えている。

BackupMySQL.bat

@echo off
echo %DATE%-%TIME: =0% : Excecuting ... %0 %*
rem MAX_FILES 残す個数

setlocal

set /a MAX_FILES=0
if not "%1" == "" set /a MAX_FILES=%1

for %%i in (wp-01 wp-02) do call :MYSQLDUMP %%i %MAX_FILES%
endlocal

EXIT /B


:MYSQLDUMP

setlocal

if not exist %~d0%~p0MySQL mkdir %~d0%~p0MySQL
set SQL_FILE=%~d0%~p0MySQL\%COMPUTERNAME%_%1_%date:~-10,4%-%date:~-5,2%-%date:~-2,2%.sql

if not exist %SQL_FILE% (
    echo C:\xampp\mysql\bin\mysqldump -u -p %1
    C:\xampp\mysql\bin\mysqldump -u ユーザー名 -pパスワード %1 > %SQL_FILE%

    if not "%WORDPRESS_BACKUP%" == "" (
        if not exist %WORDPRESS_BACKUP%\xampp\Tools\MySQL mkdir %WORDPRESS_BACKUP%\xampp\Tools\MySQL
        echo copy /Y %SQL_FILE% %WORDPRESS_BACKUP%\xampp\Tools\MySQL\
        copy /Y %SQL_FILE% %WORDPRESS_BACKUP%\xampp\Tools\MySQL\
    )
)

endlocal

EXIT /B

 mysqldumpのパスワード指定は、-pの後に空白を開けず続けて指定する。