VBScript

WordPressのバックアップを取ってローカル環境で動かす方法(3)

WordPressのバックアップを取ってローカル環境で動かす方法(1)」と「WordPressのバックアップを取ってローカル環境で動かす方法(2)」で、PHPを利用してWordPressのバックアップを取る方法と、取ったバックアップをXAMPPを使ってローカル環境で動かす方法について説明しました。

今回はWordPressのバックアップ処理の自動化を考えてみます。

WordPressのバックアップを取ってローカル環境で動かす方法(1)」に書いてある方法は、下記の流れになります。
これを見ると、必要な作業はPHPファイルの作成とサーバー上のファイル操作だけなので、FTPコマンドを使えば簡単に処理を自動化できそうです。

  1. バックアップを取るためのスクリプト(PHP)を用意する。
  2. 1. のファイルをサーバー上にアップロードする。
  3. アップロードした2. のファイルをブラウザーで開き、バックアップ処理を実行する。
  4. 3. で作成されたバックアップファイルをローカル環境にダウンロードする。
  5. 2. でアップロードしたPHPファイルと、3. で作成されたバックアップファイルをサーバー上から削除する。

早速考えたスクリプト(VBScript)が下記になります。

'**************************************************
' WordPressのバックアップ処理自動化 2014/01/14
' @kinuasa
'**************************************************

Option Explicit

'***** 下記必要に応じて変更 *****
Private Const Url = "//www.ka-net.org/" 'サイトURL
Private Const PHPFileName = "(バックアップ用スクリプト名)"
Private Const WordPressDir = "(WordPressのディレクトリパス)"
Private Const DBName = "(データベース名)"
Private Const DBUserName = "(データベースのユーザー名)"
Private Const DBPassWord = "(データベースのパスワード)"
Private Const DBHostName = "(データベースのホスト名)"
Private Const FtpHostName = "(FTPサーバーのホスト名)"
Private Const FtpUserName = "(FTPサーバーのユーザー名)"
Private Const FtpPassWord = "(FTPサーバーのパスワード)"
Private Const BackupDirName = "(バックアップファイルを作成するサーバー上のディレクトリ名)"
Private Const DownloadFolderPath = "(バックアップファイルのダウンロード先フォルダのパス)"
'********************************

Private LocalPHPFilePath
Private RemotePHPFilePath

'PHPファイル作成・アップロード
WScript.Echo "1. PHPファイル作成・アップロード"
LocalPHPFilePath = DownloadFolderPath & ChrW(92) & PHPFileName
CreatePHPFile LocalPHPFilePath, WordPressDir, DBName, DBUserName, DBPassWord, DBHostName
UploadFile FtpHostName, FtpUserName, FtpPassWord, "/" & BackupDirName, LocalPHPFilePath

'バックアップ処理実行
WScript.Echo "2. バックアップ処理実行"
RemotePHPFilePath = Url & BackupDirName & "/" & PHPFileName
On Error Resume Next
With CreateObject("MSXML2.XMLHTTP")
  .Open "GET", RemotePHPFilePath, False
  .setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT" 'キャッシュ対策(日付は適当)
  .Send
  If .Status <> 200 Then
    WScript.Echo "バックアップ処理が失敗しました。"
    WScript.Quit()
  End If
End With
On Error GoTo 0

'バックアップファイルダウンロード
WScript.Echo "3. バックアップファイルダウンロード"
DownloadFiles FtpHostName, FtpUserName, FtpPassWord, DownloadFolderPath, "/" & BackupDirName

'PHP,バックアップファイル削除
WScript.Echo "4. PHP,バックアップファイル削除"
DeleteFiles FtpHostName, FtpUserName, FtpPassWord, "/" & BackupDirName

WScript.Echo "処理が終了しました。"

Private Sub CreatePHPFile(ByVal PHPFilePath, _
                          ByVal WPDir, _
                          ByVal DBName, _
                          ByVal UserName, _
                          ByVal PassWord, _
                          ByVal HostName)
'PHPファイル作成
  Dim Code
  
  '------------------------------------------------------------
  'PHPスクリプト設定
  '------------------------------------------------------------
  Code = "<?php" & vbCrLf
  Code = Code & "    $yyyymmdd = date('Ymd');" & vbCrLf
  Code = Code & "    $filename_dat = $yyyymmdd . '-bk_blog_dat.tar.gz';" & vbCrLf
  Code = Code & "    $filename_sql = $yyyymmdd . '-bk_blog_db.sql.gz';" & vbCrLf
  Code = Code & "    $cmd = ""tar -cvzf $filename_dat --ignore-failed-read " & WPDir & """;" & vbCrLf
  Code = Code & "    exec($cmd, $output, $return_code);" & vbCrLf
  Code = Code & "    if($return_code != 0){" & vbCrLf
  Code = Code & "        header('HTTP', true, 500);" & vbCrLf
  Code = Code & "        exit();" & vbCrLf
  Code = Code & "    }" & vbCrLf
  Code = Code & "    $cmd = ""mysqldump " & DBName & " --user=" & UserName & " --password=" & PassWord & " --host=" & HostName & " --opt | gzip > $filename_sql"";" & vbCrLf
  Code = Code & "    exec($cmd, $output, $return_code);" & vbCrLf
  Code = Code & "    if($return_code != 0){" & vbCrLf
  Code = Code & "        header('HTTP', true, 500);" & vbCrLf
  Code = Code & "        exit();" & vbCrLf
  Code = Code & "    }" & vbCrLf
  Code = Code & "?>"
  '------------------------------------------------------------
  
  With CreateObject("Scripting.FileSystemObject").CreateTextFile(PHPFilePath, True, False)
    .Write Code
    .Close
  End With
End Sub

Private Sub UploadFile(ByVal HostName, _
                       ByVal UserName, _
                       ByVal PassWord, _
                       ByVal DestFileDir, _
                       ByVal SourFilePath)
'ファイルアップロード処理
  Dim TmpFolderPath
  Dim ScrFilePath
  Dim Code
  Const ScrFileName = "FtpScript.ftp"
  
  '------------------------------------------------------------
  'FTPスクリプト設定
  '------------------------------------------------------------
  Code = "open " & HostName & vbCrLf
  Code = Code & "user " & UserName & " " & PassWord & vbCrLf
  Code = Code & "cd " & DestFileDir & vbCrLf
  Code = Code & "binary" & vbCrLf
  Code = Code & "put """ & SourFilePath & """" & vbCrLf
  Code = Code & "quit"
  '------------------------------------------------------------
  
  With CreateObject("Scripting.FileSystemObject")
    TmpFolderPath = .GetSpecialFolder(2).Path
    If Right(TmpFolderPath, 1) <> ChrW(92) Then TmpFolderPath = TmpFolderPath & ChrW(92)
    ScrFilePath = TmpFolderPath & ScrFileName
    With .CreateTextFile(ScrFilePath, True, False)
      .Write Code
      .Close
    End With
    CreateObject("WScript.Shell").Run "ftp -n -s:""" & ScrFilePath & """", 1, True 'スクリプトファイル実行(ウィンドウ表示)
    .DeleteFile ScrFilePath, True 'スクリプトファイル削除
  End With
End Sub

Private Sub DownloadFiles(ByVal HostName, _
                          ByVal UserName, _
                          ByVal PassWord, _
                          ByVal DestFolderPath, _
                          ByVal SourFileDir)
'ファイルダウンロード処理
  Dim TmpFolderPath
  Dim ScrFilePath
  Dim Code
  Const ScrFileName = "FtpScript.ftp"
  
  '------------------------------------------------------------
  'FTPスクリプト設定
  '------------------------------------------------------------
  Code = "open " & HostName & vbCrLf
  Code = Code & "user " & UserName & " " & PassWord & vbCrLf
  Code = Code & "lcd """ & DestFolderPath & """" & vbCrLf
  Code = Code & "binary" & vbCrLf
  Code = Code & "mget " & SourFileDir & "/*.gz" & vbCrLf
  Code = Code & "quit"
  '------------------------------------------------------------
  
  With CreateObject("Scripting.FileSystemObject")
    TmpFolderPath = .GetSpecialFolder(2).Path
    If Right(TmpFolderPath, 1) <> ChrW(92) Then TmpFolderPath = TmpFolderPath & ChrW(92)
    ScrFilePath = TmpFolderPath & ScrFileName
    With .CreateTextFile(ScrFilePath, True, False)
      .Write Code
      .Close
    End With
    CreateObject("WScript.Shell").Run "ftp -i -n -s:""" & ScrFilePath & """", 1, True 'スクリプトファイル実行(ウィンドウ表示)
    .DeleteFile ScrFilePath, True 'スクリプトファイル削除
  End With
End Sub

Private Sub DeleteFiles(ByVal HostName, _
                        ByVal UserName, _
                        ByVal PassWord, _
                        ByVal SourFileDir)
'ファイル削除処理
  Dim TmpFolderPath
  Dim ScrFilePath
  Dim Code
  Const ScrFileName = "FtpScript.ftp"
  
  '------------------------------------------------------------
  'FTPスクリプト設定
  '------------------------------------------------------------
  Code = "open " & HostName & vbCrLf
  Code = Code & "user " & UserName & " " & PassWord & vbCrLf
  Code = Code & "binary" & vbCrLf
  Code = Code & "mdelete " & SourFileDir & "/*.gz" & vbCrLf
  Code = Code & "mdelete " & SourFileDir & "/*.php" & vbCrLf
  Code = Code & "quit"
  '------------------------------------------------------------
  
  With CreateObject("Scripting.FileSystemObject")
    TmpFolderPath = .GetSpecialFolder(2).Path
    If Right(TmpFolderPath, 1) <> ChrW(92) Then TmpFolderPath = TmpFolderPath & ChrW(92)
    ScrFilePath = TmpFolderPath & ScrFileName
    With .CreateTextFile(ScrFilePath, True, False)
      .Write Code
      .Close
    End With
    CreateObject("WScript.Shell").Run "ftp -i -n -s:""" & ScrFilePath & """", 1, True 'スクリプトファイル実行(ウィンドウ表示)
    .DeleteFile ScrFilePath, True 'スクリプトファイル削除
  End With
End Sub

コマンドプロンプトから上記スクリプトを実行すると、特にエラーが発生することも無く、指定したフォルダにバックアップファイルがダウンロードされました。

WordPress_03_01

WordPress_03_02

WordPress_03_03

バックアップファイルを作成するサーバー上のディレクトリを見ても、ちゃんとファイルが削除されていることが確認できました。

WordPress_03_04

これでWordPressのバックアップ作業の自動化は終了です。
定期的にバックアップを実行する場合は、上記スクリプトをタスク・スケジューラで動作するように設定すればOKです。

【編集後記】

バックアップ処理の自動化には、使い慣れたVBSを使ってみました。
エラー処理はしていないので実用的かどうかは微妙なところですが、とりあえずはバックアップを作成できるので、これで良しとします。

関連記事

  1. Windows 10

    AppUserModelId(AUMID)を列挙するVBScript

    「「ファイル名を指定して実行」からMicrosoft Edgeを起動す…

  2. VBScript

    画像の一部にぼかしを入れるバッチ処理

    Paint.NETなどの画像処理ソフトを使うと、簡単に画像にぼかしを入…

  3. WordPress関連

    WordPressのバックアップを取ってローカル環境で動かす方法(1)

    当ブログでも利用している「WordPress」はとても便利なブログソフ…

  4. VBScript

    指定したフォルダ内で最も更新日時の新しいファイルのパスを取得するVBScript

    大量のログファイルから最新のファイルのみを取得する必要があったので、簡…

  5. VBScript

    指定したフォルダ内のemlファイルの情報をリスト化するVBScript

    emlファイルから件名や本文、宛先や送信日時といった各種情報を取得して…

  6. Office関連

    ドラッグ&ドロップしたOfficeファイルをPDFに変換するVBScript

    複数のExcelファイルをPDFに一括変換する必要があったので、簡単な…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP