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. Office関連

    Officeファイルから作成者などのプロパティを取得するVBScript

    下記記事でも書いていますが、xlsxやdocxといった、OOXML形式…

  2. Windows 10

    Microsoft Edgeを操作するVBScript

    「Microsoft Edgeを操作するVBAマクロ(WebDrive…

  3. WordPress関連

    記事のコピーを通知してくれるWordPressプラグイン「Check Copy Contents(C…

    着ぐるみ追い剥ぎペンギン管理人のナカシマ氏が公開されているWordPr…

  4. VBScript

    ファイル選択ダイアログ

    ファイル選択ダイアログを表示するVBScriptをまとめてみま…

  5. VBScript

    Expression WebでVBScriptのコードを書いてみる。

    今日たまたま下記の記事を見つけました。10年近く前の古い記事です。…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP