WordPress用のデータベースのバックアップと世代管理を行うBashスクリプトの作成例です。cronに登録し、自動で定時実行させています。個人用途なのでエラー処理については厳密に考慮していません。
※目次をクリックすると目次の下部にコンテンツが表示されます。
②バックアップが成功した場合、バックアップファイルの世代管理を行う。7世代分のバックアップファイルを保持。
③ログファイルにログ記録、エラー時にはメール送信。
④上記①~③を関数として定義し、データベース単位に実行。
set -o pipefail mysqldump --add-drop-table -h localhost -u $dbuser -p$dbpswd $dbname 2>> $tmp_log | bzip2 -c > $bk_path if [ $? -eq 0 ] ; then : 世代管理処理 :
・mysqldumpコマンドでデータベースをバックアップ。
・エラー出力をログファイルに記録。
・pipefailオプションを使ってエラー判定。
●パイプのexitステータスコードとpipefailオプション
通常は、パイプで指定した複数のコマンドの最後のコマンドのexitステータスコードが表示されます。
mysqldumpによるバックアップと圧縮の処理ではパイプを使っているので、バックアップがエラー終了しても圧縮コマンドが成功するとexitステータスが0となってしまいます。
すべてのコマンドが0の場合のみ0が返るように挙動を変更する場合には、pipefailオプションを設定します。
●mysqldumpコマンドのエラーをログに記録
mysqldumpのエラーは標準エラー出力に出力されるので、2>> $tmp_logで標準エラー出力をログファイルに出力し、標準出力はパイプでbzip2コマンドに渡します。
2)ログ出力
●タイムスタンプをログに出力
・dateコマンドのフォーマットを指定
date +”%Y/%m/%d %k:%M:%S”
出力例)
2014/11/05 16:08:52
・タイムスタンプと開始、終了のコメントをログに記録
“でdateコマンドを挟んで、コマンド実行結果をechoの出力に埋め込みます。
echo “`date +”%Y/%m/%d %k:%M:%S”` MySQLダンプバックアップスクリプト開始” >> $log
3)バックアップファイルの世代管理
if [ $? -eq 0 ] ; then for i in 7 6 5 4 3 2 1 ; do let j=i+1 new_name="${base}${j}_${bk_name}" old_name="${base}${i}_${bk_name}" mv $old_name $new_name done new_name="${base}1_${bk_name}" mv $bk_path $new_name del_name="${base}8_${bk_name}" rm $del_name
・mysqldumpコマンドによるバックアップが成功した場合のみ世代管理処理を行います。
・既存のバックアップファイル(添え字が1~7)をリネーム(添え字を2~8)します。
・新規バックアップファイル(添え字が0)を添え字1にリネームし、一番古いバックアップファイル(添え字8)を削除。
4)エラー時にメール通知
echo “From: root@mail.sample.com” > $msg
echo “To: admin@mail.myhome.com” >> $msg
echo “Subject: MySQL Dump BackUp($dbname) Error!” >> $msg
echo “” >> $msg
cat $tmp_log >> $msg
/usr/sbin/sendmail -t < $msg
5)関数を定義して、データベース単位に実行
bkup () { dbuser=$1 dbpswd=$2 dbname=$3 bk_name="wp_db_${dbname}.bz2" bk_path="${base}0_${bk_name}" : mysqldump --add-drop-table -h localhost -u $dbuser -p$dbpswd $dbname 2>> $tmp_log | bzip2 -c > $bk_path if [ $? -eq 0 ] ; then 世代管理処理 else エラー時のメール通知処理 fi } bkup ユーザー名1 パスワード1 データベース名1 bkup ユーザー名2 パスワード2 データベース名2 bkup ユーザー名3 パスワード3 データベース名3
6)cronに登録して定期実行
$ crontab -e
01 4 * * * /home/user/bkup/wpbackup.sh
#!/bin/bash base="/home/user/bkup/" log="${base}wpbkup.log" tmp_log="${base}tmp_wpbkup.log" msg="${base}mailmsg" set -o pipefail echo "`date +"%Y/%m/%d %k:%M:%S"` MySQLダンプバックアップスクリプト開始" >> $log bkup () { dbuser=$1 dbpswd=$2 dbname=$3 bk_name="wp_db_${dbname}.bz2" bk_path="${base}0_${bk_name}" echo "`date +"%Y/%m/%d %k:%M:%S"` $dbnameのバックアップ開始" > $tmp_log mysqldump --add-drop-table -h localhost -u $dbuser -p$dbpswd $dbname 2>> $tmp_log | bzip2 -c > $bk_path if [ $? -eq 0 ] ; then for i in 7 6 5 4 3 2 1 ; do let j=i+1 new_name="${base}${j}_${bk_name}" old_name="${base}${i}_${bk_name}" mv $old_name $new_name done new_name="${base}1_${bk_name}" mv $bk_path $new_name del_name="${base}8_${bk_name}" rm $del_name echo "`date +"%Y/%m/%d %k:%M:%S"` $dbnameのバックアップ正常終了" >> $log else cat $tmp_log >> $log echo "From: root@mail.sample.com" > $msg echo "To: admin@mail.myhome.com" >> $msg echo "Subject: MySQL Dump BackUp($dbname) Error!" >> $msg echo "" >> $msg cat $tmp_log >> $msg /usr/sbin/sendmail -t < $msg echo "`date +"%Y/%m/%d %k:%M:%S"` $dbnameのバックアップエラー終了" >> $log fi } bkup ユーザー名1 パスワード1 データベース名1 bkup ユーザー名2 パスワード2 データベース名2 bkup ユーザー名3 パスワード3 データベース名3
- VPSサーバーでスナップショットを取得
- ~障害に備え、リカバリーポイントを作成。
- VPSサーバーにログインして、設定内容を確認
- ~グローバルIPアドレス確認、SSHキーを作成。
- VPSサーバーにSSHでログイン
- ~Tera Term、SSH、公開鍵認証方式
- yumコマンドで最新のパッケージにアップデート
- ~全パッケージを最新にアップデート
- Apacheのインストール
- ~yumコマンドでApacheインストール、iptablesでファイアウォールの設定
- PHPとMySQLをインストール
- ~yumコマンドでPHP、MySQLインストール
- WinSCPを使ってWordPressをアップロード
- ~WinSCPをクライアントPCにインストール、ファイルアップロード方法
- WordPressをインストール
- ~MySQLでWordPress用データベース作成、wp-config.phpファイルの設定
- CentOSのファイアウォール設定
- ~iptablesを使ってネットワークフィルタリング設定を一から行う
- OpenSSHの設定をよりセキュアに
- ~ログイン制限、ポート変更、認証方式
- ApacheでTCPのTraceメソッドを無効にする
- ~Apacheの設定変更、Telnetで動作確認
- ヘッダーにApacheバージョンが表示されないようにする
- ~Apacheの設定変更、Telnetで動作確認
- Apacheでディレクトリ内一覧表示を無効にする
- ~autoindex_moduleのロードを無効にする
- セキュリティを考慮し、MySQLの匿名ユーザーにパスワードを設定、または削除
- ~MySQLの匿名ユーザーにパスワードを設定、または削除
- PHPのバージョンが表示されないようにする
- ~php.iniの設定変更
- WordPressディレクトリのパーミッションをセキュアに
- ~WordPress用ディレクトリの所有グループ、ユーザー、パーミッション設定
- パーマリンク設定時のApache設定
- ~WordPressパーマリンクの設定、Apache .htaccessの設定
- WordPressテーマの選定
- ~テーマ追加の特徴フィルターの項目、テンプレートキング
- WordPressで画像のアップロード、サイズ調整、リンクを設定
- ~アップロード画像の画像サイズ、サムネイル、画像編集、リンク設定
- 更新可能なRPMパッケージのリストをメールで送信する
- ~yumコマンド、Bashスクリプト、Cron
- Linuxでディスク使用量が多いディレクトリを調べる方法(1)
- ~du --max-depth
- Linuxでディスク使用量が多いディレクトリを調べる方法(2)
- ~duコマンド、sortコマンド
- WordPressデータベースのバックアップとリストア
- ~コマンドラインでバックアップ、リストア
- WordPressのバージョンアップと旧バージョンへの戻し
- ~データベースとディレクトリのバックアップ、リストア
- BashスクリプトでWordPressデータベースを自動バックアップ
- ~MySQLデータベースをBash、Cronを使って自動バックアップ、メール通知
- BashスクリプトでDos攻撃など大量アクセスのログを検知
- ~Apacheアクセスログ、Dos、Cron、メール通知
- ブートストラップ3を使って自作テーマ作成
- (1)全体概要
- (2)ブートストラップのサンプルを使ってindex.phpを作成
- (3)header.php、sidebar.php、footer.php、index.phpのテンプレートファイル作成
- (4)JavaScriptインクルードの設定
- (5)投稿本文表示用のテンプレートファイルを作成
- (6)単一投稿用(single.php)のテンプレートファイル作成
- (7)固定ページ用(page.php)のテンプレートファイル作成
- (8)検索結果表示用(search.php)のテンプレートファイル作成
- (9)アーカイブ表示用(archive.php)のテンプレートファイル作成
- (10)カテゴリー表示用(category.php)のテンプレートファイル作成
- (11)WordPressのメニュー画面でナビゲーションメニューを設定
- (12)サイトタイトル、キャッチフレーズを表示できるようにheader.phpを修正
- (13)カスタムヘッダー画像を使えるようにheader.phpを修正
- (14)404.phpテンプレートファイルを作成
- (15)記事タイトル部分のCSS設定
- (16)記事メタデータ部分のCSS設定
- (17)記事本文部分のCSS設定
- (18)前後のページへのリンクのCSS設定
- (19)前後の投稿へのリンクのCSS設定
- (20)コメント投稿フォーム、コメント表示部のCSS設定
- (21)ウィジェット部のCSS設定
- (22)アーカイブページのCSS設定
- (23)画面を左右にスライドさせるボタンのCSS設定
- ~Bootstrap3、自作テーマ作成、TwentyFourteen
- Bootstrapのフリーのテーマを使ってデザインを簡単にカスタマイズ
- ~Bootstrap3のスタイルをカスタマイズ
- 簡単なショートコードを作ってみる
- ~ショートコードの作り方
- ショートコードを使って関連記事のリンクを自動で挿入
- ~ショートコードの簡単なサンプル
- ショートコードを使ってディレクトリ内のファイル名を取得し、投稿内にリンクを挿入
- ~カスタムフィールド利用、PHPで日本語文字列検索などのコーディング
- WordPress投稿内でAngularJSを使用
- ~AngularJS、Bootstrap、アコーディオン
- Bootstrap3で作成したナビゲーションメニューをAngularJSに変更
- ~AngularJS、Bootstrap、自作テーマheder.php
- WordPressでAngularJSを使ったGoogleマップを使えるようにする
- ~AngularJSを使って投稿内にGoogleマップ
WordPresssショートコード
AJAX、AngularJSなどその他応用
- Ruby on Rails(他サイト)
- ~構築、CMS、Bootstrap、AngularJS
- bashのシェルスクリプト実行方法
- bashのシェルスクリプト プログラミング方法メモ
- bashのパイプの使い方
- bashのlist、サブシェル、コマンドブロック
- bashでの式の評価と算術演算
- bashでパターンマッチを使って条件評価
- bashのfor文で配列やセパレータ付き文字列から各要素を取り出す
- bashのfor文を使ってディレクトリ内のファイル一覧とディレクトリ一覧を出力
- bashのselect制御構造
- bashのパターンマッチ演算子の使い方
- ファイルの中身を一行ずつ読んで文字列を置換するbashスクリプト
- ディスク使用量が多いディレクトリを抽出するbashスクリプト
- ディレクトリ内の複数のファイルに対しファイル内の文字列を置換するbashスクリプト
- Bashスクリプトでmysqldumpバックアップと世代管理
- Dos攻撃など大量アクセスのログを検知するBashスクリプトを作成
-
インストール、基本設定、文字コード、仕組み
- MySQLのインストール
- CentOS6でMySQL5.1からMySQL5.7へアップデートする手順、注意点
- CentOS6.10でMySQL5.7からMySQL8へアップデートする手順、注意点
- MySQLサーバーの起動スクリプト(v5.1)
- MySQLのファイルシステムとストレージエンジンの概要
- MySQLのデータ型の概要
- MySQLのサーバー、データベース、テーブル、カラムの文字コード設定とクライアントからのサーバー接続時の文字コード設定
- MySQLの”LOAD DATA INFILE”などでCSVファイル入出力時の文字コード、権限などの注意点
- セキュリティを考慮し、MySQLの匿名ユーザーにパスワードを設定、または削除
- CentOS6にphpMyAdminを導入
- MySQLのbツリーインデックスの概要とマルチカラムインデックス
- MySQLのプレフィックスインデックス、FULLTEXTインデックスの概要
- MySQLのEXPLAINの実行例
- MySQLのインデックス結合の概要
- MySQLのSelect文でインデックスのカラムのみ取得する場合のメリット
- MySQLのORDER BY句でインデックスを使用
- MySQLのPACK_KEYSオプション
- MySQLのインデックス統計更新の概要
- MySQL初期設定確認
- mysqladminコマンドでMySQLサーバーの状態確認
- mysqlshowコマンドで簡単にデータベース、テーブル定義の確認
- awkを使ってmysqlshowの必要な列のみ表示
- MySQLのスロークエリログの概要と表示方法
- show profileでクエリーの内部処理時間を調査
- MySQL Benchmark Suiteによるパフォーマンス測定
- MySQLの診断、監視に利用できる外部ツール
- WordPressデータベースのバックアップとリストア
- Bashスクリプトでmysqldumpバックアップと世代管理
- MySQLの壊れたテーブルのチェック、修復方法
- MySQLのインデックス統計更新の概要
- MySQLのフラグメンテーションの概要と改善方法
- MySQLのスレッド、コネクションに関する設定値、チューニング
- MySQLのセッション単位に設定するバッファーサイズ
- MySQLのクエリキャッシュの設定値、パフォーマンス
- MySQLのテーブルオープン、クローズとテーブルキャッシュのチューニング
- MyISAMキーキャッシュの概要とチューニング
- MySQLのソートに関する設定値とステータス
- MySQL innoDBの性能関連の設定値とステータス確認
- MySQL MyISAMの性能関連の設定値とステータス確認
インデックス
状態確認、調査
バックアップ、リストア、メンテナンス
パフォーマンス、チューニング
-
WordPress設定
- WordPressリファレンス、メモ
- パーマリンク設定時のApache設定
- WordPressテーマの選定
- WordPressで画像のアップロード、サイズ調整、リンクを設定
- マルチサイト化に伴う制約、デメリット
- WordPressのwp-config.phpでテーブルプレフィックスを変更
- WordPress投稿のリビジョン管理と自動保存
- WordPressディレクトリのパーミッションをセキュアに
- WordPressの認証用ユニークキーをセキュアに
- WordPressのバージョン情報を表示しないようにする
- WordPressでGoogleの2段階認証プロセスを使用する手順
- WordPressの更新情報・要件、各バージョンの新機能
- WordPressデータベースのバックアップとリストア
- WordPress用データベースバックアップをbashスクリプトとcronで定期実行
- WordPressのバージョンアップと旧バージョンへの戻し
- WordPressの記事をサイト間でコピーする方法
- WordPressのアップデート方法の種類、注意点
- WordPressのメンテナンスモード、カスタムメンテナンスページ
- WordPressでデバッグを有効にする方法
- WordPressの投稿内でJavaScriptを使う方法
- WordPressでJavaScriptを使って折りたたみリンクメニューを作成
- 自ブログ動作確認時にGoogleアドセンスの広告を表示しない
- WordPressでAngularJSを使ったGoogleマップを使えるようにする
- WordPressの投稿にAngularJSのディレクティブを記述する方法
セキュリティ
メンテナンス
その他、応用