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