「MediaWikiの設定 - 移行」の版間の差分
(→前準備) |
|||
15行目: | 15行目: | ||
<br> | <br> | ||
次に、imagesディレクトリに存在する.htaccessファイルを以下のように編集する。<br> | 次に、imagesディレクトリに存在する.htaccessファイルを以下のように編集する。<br> | ||
<syntaxhighlight lang="apache"> | |||
# 修正前 | # 修正前 | ||
<IfModule rewrite_module> | <IfModule rewrite_module> | ||
34行目: | 35行目: | ||
# Options +FollowSymLinks | # Options +FollowSymLinks | ||
</IfModule> | </IfModule> | ||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
2024年8月12日 (月) 03:52時点における版
MochiuWikiの移行
MochiuWiki(MediaWiki)のデータ移行をここに記載する。
前準備
MediaWikiディレクトリにあるimagesディレクトリのパーミッションと所有者および所有グループを以下のように変更する。
sudo chmod 777 images images/temp images/thumb images/archive sudo chown -R <ユーザ名>:<ユーザグループ名> images/ または sudo chmod 777 images images/temp images/thumb images/archive sudo usermod -aG www-data "$USER" sudo chown -R <ユーザ名>:www-data images/
次に、imagesディレクトリに存在する.htaccessファイルを以下のように編集する。
# 修正前
<IfModule rewrite_module>
RewriteEngine On
RewriteOptions inherit
RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase]
RewriteRule . - [forbidden]
# Fix for bug T64289
Options +FollowSymLinks
</IfModule>
# 修正後
<IfModule rewrite_module>
RewriteEngine On
RewriteOptions inherit
RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase]
RewriteRule . - [forbidden]
# Fix for bug T64289
# Options +FollowSymLinks
</IfModule>
MySQLのmysqldumpコマンドでバックアップする方法
バックアップの取得
MySQLが同じバージョンかつ文字コード等が同じ設定のMySQLのみ復元できる可能性がある。
また、違うバージョンのMediaWikiでは復元できない可能性がある。
コマンドラインからmysqldumpコマンドを使い手動でバックアップする。
特殊な文字が存在する場合の欠落を防ぐため、--hex-blobオプションでバイナリデータを16進数表記文字列に変換して出力する。
mysqldump -Q --host=$MYSQL_SERVER --user=$MYSQL_USER --password=$MYSQL_PASSWD --default-character-set=binary --hex-blob $MYSQL_DB_NAME > MochiuWiki_DB_backup_20200101.sql または mysqldump --host=$MYSQL_SERVER --user=$MYSQL_USER -p --default-character-set=utf8mb4 $MYSQL_DB_NAME > MochiuWiki_DB_backup_20200101.sql
もし、cronを使用して定期的にバックアップを取る場合、以下のように設定する。
crontab -e # sudoは不要 # 毎月1日0時にバックアップを取得する 0 0 1 * * mysqldump -Q --host=$MYSQL_SERVER --user=$MYSQL_USER --password=$MYSQL_PASSWD --default-character-set=binary --hex-blob $MYSQL_DB_NAME > MochiuWiki_DB_backup_20200101.sql
バックアップのインポート
上記でバックアップしたデータベースを、既存のMySQLに復元する。
mysql --host=$MYSQL_SERVER --user=$MYSQL_USER --password=$MYSQL_PASSWD $MYSQL_DB_NAME < MochiuWiki_DB_backup_20200101.sql または mysql --host=$MYSQL_SERVER --user=$MYSQL_USER -p $MYSQL_DB_NAME < MochiuWiki_DB_backup_20200101.sql
インポートにおいて、以下に示すようなエラーが発生する場合がある。
ERROR at line 1: Unknown command '\-'.
まず、SQLファイルの先頭部分を確認する。
head -n 5 <SQLファイル名>.sql # 出力例: /*!999999\- enable the sandbox mode */ -- MariaDB dump 10.19 Distrib 10.6.18-MariaDB, for Linux (x86_64) -- -- Host: <Webサーバのホスト名> Database: <データベース名> -- ------------------------------------------------------
\-の部分は、バックスラッシュとハイフンの組み合わせであり、これがUnknown commandエラーの原因である。
そのため、先頭行に不要なコメントをスキップ、または、削除することにより、SQLファイルのインポートが可能となる。
sed
コマンドを使用して、問題の先頭行をスキップしてインポートする方法sed '1d' <SQLファイル名>.sql | mysql --host=<Webサーバのホスト名> --user=<データベースユーザ名> -p <データベース名>
- 問題の先頭行を削除してインポートする方法
sed '1d' <SQLファイル名>.sql > <先頭行を削除したSQLファイル名>.sql
mysql --host=<Webサーバのホスト名> --user=<データベースユーザ名> -p <データベース名> < <先頭行を削除したSQLファイル名>.sql
dumpBackup.phpツールでバックアップする方法
バックアップの取得
maintenanceディレクトリで以下のコマンドを実行する。
履歴も含めてすべてのページをxmlで取得できる。
php maintenance/dumpBackup.php --full --uploads > MochiuWiki_backup_20200101.xml // ページのエクスポート または php dumpBackup.php --current > MochiuWiki_backup_20200101.xml // ページのエクスポート
バックアップのインポート
新しいサーバ側で作業する。
maintenanceディレクトリで以下のコマンドを実行する。
すべてのページをインポートできる。
php maintenance/importDump.php < MochiuWiki_backup_20200101.xml
画像をバックアップする方法
バックアップの取得
imagesディレクトリを圧縮するだけでよい。
tar -zcf /<出力するディレクトリ名>/MochiuWiki_images_backup_20200101.tar.gz /<MediaWikiのディレクトリ名>/images // 添付ファイルのアーカイブ
バックアップのインポート
画像やその他のアップロードされたファイルを復元する。
なお、PHPがセーフモードの場合、importImages.phpが実行できないので注意する。
cd /var/www/html/mediawiki mkdir tmp mv MochiuWiki_images_backup_20200101.tar.gz tmp cd tmp tar -zxf MochiuWiki_images_backup_20200101.tar.gz
imagesディレクトリ下にあるファイルを単一のディレクトリにコピーする。
cd ../ mkdir tmpimages cp tmp/images/*/*/* tmpimages
画像やその他のアップロードされたファイルをインポートする。
php maintenance/importImages.php --overwrite tmpimages/
レンタルサーバであるバリューサーバでは、以下のコマンドを実行する。
phpcli maintenance/importImages.php --overwrite tmpimages/
サーバの移行でない(ディレクトリの移行)であれば、以下のコマンドを実行すれば画像をインポートできる。
php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/0 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/1 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/2 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/3 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/4 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/5 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/6 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/7 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/8 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/9 php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/a php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/b php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/c php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/d php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/e php importImages.php --search-recursively --overwrite --user=<ユーザ名> /var/www/html/旧mediawikiのディレクトリ/images/f
文字列の置換
方法 1 (推奨)
まず、ReplaceTextの拡張ディレクトリに移動する。
cd /<Mediawikiのディレクトリ>/extensions/ReplaceText/maintenance
次に、replaceAll.phpファイルを実行する。
phpcli replaceAll.php "置換前の文字列" "置換後の文字列" --user <Wikiユーザ名>
# 試験実行することも可能
phpcli replaceAll.php "置換前の文字列" "置換後の文字列" --dry-run --user <Wikiユーザ名>
# --debug
オプションを付加して、実行時の詳細を表示することも可能
phpcli replaceAll.php "置換前の文字列" "置換後の文字列" --user <Wikiユーザ名> --debug
EmbedVideoの拡張が存在する場合、以下に示すような警告 / エラーが出力される場合がある。
PHP Deprecated: Premature access to service container
この時、以下に示すように修正する。
# ファイルのバックアップ mv /<Mediawikiのディレクトリ>/extensions/EmbedVideo/EmbedVideo.hooks.php \ /<Mediawikiのディレクトリ>/extensions/EmbedVideo/EmbedVideo.hooks_org.php
EmbedVideoのGitLabにアクセスして、修正済みのファイルをダウンロードする。
ダウンロードしたファイルをEmbedVideoの拡張ディレクトリにアップロードする。
mv EmbedVideo.hooks.php /<Mediawikiのディレクトリ>/extensions/EmbedVideo/
Replace Textの詳細を知りたい場合は、公式Webサイトを参照すること。
方法 2 (非推奨)
Mediawikiのトップページから、[特別ページ] - [文字列の置換]にアクセスして、文字列を置換する。
Replace Textは、MediaWikiのジョブとして構成されており、ユーザが同時に多くのアクションを実行する場合があるため、システムに負荷が掛からないようになっている。
これは、大規模な置換はすぐには行われず、完了までに数分、数時間、あるいはそれ以上掛かることを意味する。
ジョブはMediaWikiでページが閲覧されるたびに起動されるが、処理を速める(あるいは遅らせる)ために、ページが閲覧されたときに実行されるジョブの数を変更することができる。
したがって、優先順位の高い新しいジョブが無い場合、Replace Textは開始後すぐに停止する可能性がある。
全てのジョブをすぐに実行するには、maintenance/runJobs.phpファイルを実行する。
chmod u+x maintenance/runJobs.php php74cli maintenance/runJobs.php