【プロジェクト管理ツール】 MediaWiki のバックアップおよびリストアを考える

■ はじめに

https://blogs.yahoo.co.jp/dk521123/37624467.html
で扱った MediaWiki のバックアップとリストアについて扱う。

■ 前提知識 : MediaWikiデータ種類

https://www.mediawiki.org/wiki/Manual:Backing_up_a_wiki/ja
より抜粋
~~~~~~~~~~~
MediaWiki は、重要なデータを 2 箇所に保持しています:

 * データベース 
   => ページとその内容、利用者とその個人設定、メタデータ、検索のインデックス情報など。

 * ファイルシステム 
   => ソフトウェア構成ファイル、カスタム外装、拡張機能、画像 (削除されたものを含む) など。
~~~~~~~~~~~

■ バックアップ方法

【1】 DB のダンプ機能使用 + ファイル群のバックアップ
 => MySQLなら、mysqldump機能。
【2】 XML 形式でダンプ (dumpBackup.php の使用) + ファイル群のバックアップ
 => エクスポートは、「【mediawiki HOME】/maintenance/dumpBackup.php」を実行し、
    インポートには、「【mediawiki HOME】/maintenance/importDump.php」を実行し実現する。
 => インポートには、「【mediawiki HOME】/maintenance/importImages.php」を実行し
    画像やその他のアップロードされたファイルをインポートする

採用したバックアップ方法について

 * 色々試したが、以下の方法をとる
データベース
 => DB のダンプ機能を利用
 => MySQLの mysqldumpについては、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/36680883.html

ファイルシステム
 => インストールした mediaWikiディレクトリを 設定ファイル「LocalSettings.php」ごとコピーし解凍
 => 解凍・圧縮については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/34102411.html

■ 実行環境

 * OS   : CentOS7
 * DB   : MySQL5.7
 * Wiki : MediaWiki v1.31.0
※ バックアップは、以下の関連記事の方法で、インストールされている環境の MediaWiki とする
https://blogs.yahoo.co.jp/dk521123/37624467.html

■ 手動によるバックアップ・リストア

バックアップ(ダンプ)

データベース
# mysqldump -u【DB名】 -p【DBパスワード】 --single-transaction --routines --events --hex-blob -r 【バックアップファイル】 【DB名】
mysqldump -uroot -ppassword --single-transaction --routines --events --hex-blob -r wiki-db-backup.sql mediawiki
ファイルシステム
# tar -zcvf 【バックアップファイル】 -C 【MediaWikiのパス】 【MediaWikiディレクトリ名】
tar -zcvf wiki-file-backup.tar.gz -C /var/www/html mediawiki

復元(リストア)

データベース
# mysql -u【DB名】 -p【DBパスワード】 【DB名】 < 【バックアップファイル】
mysql -uroot -ppassword mediawiki < wiki-db-backup.sql
ファイルシステム
# tar xvzf 【バックアップファイル】 -C 【MediaWikiのパス】
tar xvzf wiki-file-backup.tar.gz -C /var/www/html

# 環境に合うように LocalSettings.php を変更する
sudo vi /var/www/html/mediawiki/LocalSettings.php

シェルスクリプト

 * 定期的にバックアップを実行するためのスクリプトを作成する

バックアップ

backup_mediawiki.sh
#!/bin/bash

if [ $# -ne 1 ]; then
   echo "$(basename $0) </path/to/dump/dir>"
   exit 1
fi

out_dump_dir=$1
mkdir -p ${out_dump_dir}

. ./.db_info

mediawiki_dir="/var/www/html"
mediawiki_dir_name="mediawiki"
mediawiki_home="${mediawiki_dir}/${mediawiki_dir_name}"
mediawiki_db_name="mediawiki"

tmp_path="/tmp"
target_name="mediawiki_$(date '+%Y%m%d%H%M%S')"
work_path="${tmp_path}/${target_name}"
mkdir -p ${work_path}

# [1] Export Wiki pages from DB.
echo "[INFO] [1] Export Wiki pages from DB. [${work_path}] [${mediawiki_db_name}]"
export MYSQL_PWD=${MYSQL_PASSWORD};
mysqldump -u${MYSQL_USER} --single-transaction --routines --events --hex-blob -r "${work_path}/wiki-db-backup.sql" ${mediawiki_db_name}

# [2] Copy MediaWiki directory
echo "[INFO] [2] Copy MediaWiki directory"
tar -zcvf "${work_path}/wiki-file-backup.tar.gz" -C ${mediawiki_dir} ${mediawiki_dir_name}

# [3] Zip backup files
echo "[INFO] [3] Zip backup files"
tar -zcvf "${out_dump_dir}/${target_name}.tar.gz" -C ${tmp_path} ${target_name}

rm -r ${work_path}

echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
DB情報が格納されている外部ファイル「.db_info」
MYSQL_USER=root
MYSQL_PASSWORD=password

定期実行

デプロイ
sudo mkdir -p /etc/backups
sudo mv backup_mediawiki.sh /etc/backups/.
sudo chown root:root /etc/backups/backup_mediawiki.sh
sudo chmod +x /etc/backups/backup_mediawiki.sh
定期実行するための cron
sudo crontab -e
~~~~~~~~~~~
# MediaWiki Backup / Weekday 23:30
30 23 * * mon-fri /etc/backups/backup_mediawiki.sh /home/admin/backups
~~~~~~~~~~~

リストア

前提条件
 * 以下の関連記事の「【1】 Webサーバの設定」~「【4】 MediaWikiの設定
 (ただし、「【4-1】MediaWikiのインストール 」「【4-4】MediaWikiの初期設定を行う 」は行わないこと)」
 を設定しておくこと
https://blogs.yahoo.co.jp/dk521123/37624467.html

手順
tar xvzf mediawiki_20180823_233000.tar.gz

cd mediawiki_20180823_233000

# データベースのダンプをインポートする
mysql -uroot -ppassword mediawiki < wiki-db-backup.sql

# MediaWiki を展開する
tar xvzf wiki-file-backup.tar.gz -C /var/www/html

# 環境に合うように LocalSettings.php を変更する
sudo vi /var/www/html/mediawiki/LocalSettings.php
~~~~
# リストア先に書き換える(他に2か所ある)
$wgServer = "http://192.168.XX.YYY";
~~~~

# Apache の再起動
sudo systemctl restart httpd

# ブラウザで「http://192.168.XX.YYY/mediawiki」にアクセスする


関連記事

MediaWiki

https://blogs.yahoo.co.jp/dk521123/37624467.html

バックアップ / リストア に関するあれこれ

https://blogs.yahoo.co.jp/dk521123/37690582.html