ローカルにwikipediaのコピーサイト

を作ろうとおもったが時間がかかりそうなのでやり方だけメモ
mediawikiをインストールしてからの話

  1. データのダウンロード
    ここからjawiki-latest-pages-articles.xml.bz2をダウンロード
  2. mediawikiを使ってインポートする場合
    データがデカ過ぎるので、phpスクリプトを使う

    bunzip2 -c jawiki-latest-pages-articles.xml.bz2 | php $mediawiki_home/maintenance/importDump.php

  3. Xml2sqlを使ってインポートする場合
    2の方法だと、かなり時間がかかるので、SQL化されたものをダウンロードするか、Xml2sqlでSQL化するかして、mysqlへ直接インポートするしかないらしい。SQL化されたものをダウンロードするのはしんどいから、Xml2sqlを使うのがいいだろう。

    $ bunzip2 -c jawiki-latest-pages-articles.xml.bz2 | xml2sql
    $ mysqlimport -u root dbname `pwd`/{page,revision,text}.txt

追記:
700MBほどのダウンロードしたアーカイブをxml2sqlでtxtファイルに展開すると、約2.7GBになった。
上の3のmysqlimportではエラー、txtファイルがローカルにある場合は、データーベース名の前に-Lオプションを付けるらしい。あと、mysqlのrootにパスワードを設定していれば-pオプションをつけてないとだめだよな。

$ mysqlimport -u root -p *password* -L dbname `pwd`/{page,revision,text}.txt

こっちの場合でも1、2時間じゃ終わらないんだろうな。つい、コマンド叩いてしまった。CPUは喰ってないけど、若干swapしてるな。ま、しばらく放置しよ。

追記2:約7時間経過。page.txtが終了した時点のメッセージではデータ件数は、941,857件らしい。2番目のrevision.txtが終わったのが、13時ぐらい。ファイルサイズで比較すると、page、revisionが約900MBで、記事本体のtext.xtxがその約3倍ということで、あと3時間ぐらいで終わるのだろうか。2の方法だと、5日、6日かかったという例もあるし、そうはいかんか。
あと、revision.txtの終了時に、データ1件につき、Warningが2つぐらいでてたが、気にしないでおこう。mediawiki用でもデータベースに収まりさえすれば再利用できると思うんだが、どうなるのかな。わからん。
メインマシンからリモートでやるんじゃなかった。どうするか。

追記3:その後約1時間、計8時間ちょっとで終了。
で、mediawikiを呼び出すと、データは入ってるようなんだけど、ごくわずかの文章量が少ない記事を除いて、「Fatal error: Allowed memory size of ***・・・」というエラーがでる。php.ini でmemory_limitを増量すればいいはずなのだが、今回はダメだった。
MySQLも他のPHP+MySQLなCMSが6つほど使ってるが正常に動いてるし、エラーログも全く吐いていない。orz..

追記4:
mediawikiが内部で設定してるんじゃないか?と思って、LocalSettings.phpを開いてみると、memory_limitを設定してる。え、このファイルいじってもいいの?、いじったら即反映されるの?とか思いながらviで編集しみると、追記3のエラーが消えて、記事が全部表示できた。
しかし、一部、HTMLタグが本文に出てしまったり、tableタグ内の文字は文字化けしていたりで完璧ではない。
tableタグ外の文字化けはないので、よしとしよう。

コメント

タイトルとURLをコピーしました