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を使ってみました。
エラー処理はしていないので実用的かどうかは微妙なところですが、とりあえずはバックアップを作成できるので、これで良しとします。

[ポケモンXY]ひかるおまもりをゲットしました!前のページ

[クライアント管理]WMI Explorerの紹介次のページ

関連記事

  1. VBScript

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

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

  2. Office関連

    Wordのテンプレートをインストールするスクリプト

    Wordマクロをテンプレートにして使用する場合、通常そのテンプレートフ…

  3. Office関連

    ヘッドレス ChromeとSeleniumBasicでWebページ全体のスクリーンショットを撮る方法…

    先日、ヘッドレス ChromeでWebページ全体のスクリーンショットを…

  4. VBScript

    Office付属のVBEでVBScriptコードを書くのを助けるVBScript

    VBScriptのコードを書くとき、メモ帳等のテキストエディタではイン…

  5. VBScript

    ショートカットファイルを作成するVBScript

    ショートカットファイル(拡張子:lnk)を作成するVBScriptです…

  6. VBScript

    【Illustrator】指定したPDFプリセットでAIファイルをPDFに一括変換するVBScrip…

    前回の記事で、Illustratorに登録されたPDFプリセットを列挙…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP