「WordPressのバックアップを取ってローカル環境で動かす方法(1)」と「WordPressのバックアップを取ってローカル環境で動かす方法(2)」で、PHPを利用してWordPressのバックアップを取る方法と、取ったバックアップをXAMPPを使ってローカル環境で動かす方法について説明しました。
今回はWordPressのバックアップ処理の自動化を考えてみます。
「WordPressのバックアップを取ってローカル環境で動かす方法(1)」に書いてある方法は、下記の流れになります。
これを見ると、必要な作業はPHPファイルの作成とサーバー上のファイル操作だけなので、FTPコマンドを使えば簡単に処理を自動化できそうです。
- バックアップを取るためのスクリプト(PHP)を用意する。
- 1. のファイルをサーバー上にアップロードする。
- アップロードした2. のファイルをブラウザーで開き、バックアップ処理を実行する。
- 3. で作成されたバックアップファイルをローカル環境にダウンロードする。
- 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のバックアップ作業の自動化は終了です。
定期的にバックアップを実行する場合は、上記スクリプトをタスク・スケジューラで動作するように設定すればOKです。
【編集後記】
バックアップ処理の自動化には、使い慣れたVBSを使ってみました。
エラー処理はしていないので実用的かどうかは微妙なところですが、とりあえずはバックアップを作成できるので、これで良しとします。




















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