Home > コラム > Wikipediaをローカルデータベース(MySQL)として扱う for Vine Linux まとめ

Wikipediaをローカルデータベース(MySQL)として扱う for Vine Linux まとめ

  • Posted by: hesuko
  • 2009年6月17日 10:38
  • コラム
  •  

それでは纏まりましたのでLinuxで日本語wikipediaのインポート方法を
公開して行きたいと思います。
先ず個人的に何故Linuxを使うのかと言う面ですが

・Windowsだと何かMySQLとの連結が上手く行かなかったから
・先人のTipsがLinux環境が多いから
・ついでだし後学の為にLinuxを再勉強しよう

こんな感じ。

まぁそういう訳で、やって行きます。
・インターネット接続環境を前提で書きます
・MySQL5.0系じゃないと文字コード(utf8)の挙動がおかしいらしいのでついでにインストールも指南
・ある程度触ってた自分でも1個のトラブルにつき
5~6時間悩まされる局面もあった
 
非常に濃い内容の部分にも触れるので、自己責任でお願いします。
 特にLinuxのアップデートはこの方法は本家でもサポートを行ってない手法です
 初心者はデータバックアップを行い、CD等からのインストールを行った方が無難です

その1:Vine Linuxのアップデート
私の環境では問題が起きませんでしたが、ブートローダの設定をきちんとしないと
起動できなくなる可能性が高いです、必ずバックアップをしてから以下の処理を行ってください

何回かVineLinuxを起動していくにつれてぶっ壊れました。
必ずgrubへのカーネルアップデート情報書き出し処理は行ってください

私の環境はVineLinux3.2だったので、これを4.2までアップデートします。
一先ずVine3.2の最新版までアップデート

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade

これで一先ずVineLinux3.2の最新版が入ってる事になります。
次にVineLinuxを4.2まで引き上げます。

# emacs /etc/apt/sources.list

中に色々書いてありますが全部消して、
VineLinux公式のサンプルコードをそのまんま上書きしてしまって構いません。

# apt-get update
# apt-get install apt
~中略~
以下の追加パッケージがインストールされます:(略)
以下のパッケージがアップグレードされます:(略)
以下のパッケージが削除されます:(略)
以下のパッケージが新たにインストールされます:(略)

無難に全部メモっておきます。メモッたら「Y[enter]」でインストール。
終わったらディストリビューションのインストール

# apt-get dist-upgrade

ここでも上の注意書きが出ますんで再びメモ。
終わったらここらで削除されてしまったパッケージを全て再インストール

# apt-get ~ ~ ~ ~......

パッケージによっては4.0になって削除されてしまったり、アップグレードされてなかったりで
インストールできないものがあるかと思うのですが、まぁそこは代用アプリを探して下さい。
かく言う自分もVLCがインストールできなくてxmmsにしました。
一度再起動しないとインストールできない可能性がありますが、後々の事を考えて
一度ここでもアップデートしてください。

# shutdown -r now

このサイトを参考にカーネルのインストールとgrubの書き込みをします。
VineLinux4.x以降はカーネルのバージョン2.4xが対応しておらず、2.6xが準拠とります。
もしかしたら上記のインストールの工程で2.6がインストールされているかもしれませんが
その際でも、grubのファイルは書き出しされていないので、必ず記述して下さい。
これをしないと再起動後からGNOME等のGUI関係の挙動がおかしくなり
GNOME端末が起動しなくなったり、落ちたり、KDE等も動かなくなったり
最悪起動できなくなります。

ここまで出来たら一度再起動。GUI等が新しくなってるのが解ると思います。

その2:MySQLのアンインストール
この処理はMySQL4.x系統とかを以前利用してて今回アップデートしたり、なんらかの原因で
下記のエラーが起こってしまうユーザーに向けて先に記述しているものです。
以前までのデータを全て消す処理が記述されてますので注意して下さい

さて、どこか違うページのHowToを見て、先にインストールしてしまった方とか
何かインストールできない、MySQLが起動出来ない方へ向けて先に書きますね。

先ず、MySQLを起動しようとしてこんなメッセージが出ませんか?

# service mysql restart [失敗]
# service mysql start [失敗]

# mysql
can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock'

原因は何件か思いつきます
・以前MySQLをインストールしていて、以前の設定ファイルが悪影響を及ぼしている
・ソケット通信が出来ていない
・ハードディスクが一杯になっている(後述する:【メンテナンス】を参照してください)
何にせよ、一度MySQL関連を削除してしまうのが手っ取り早いです。
データベースが残っている人はバックアップ取っておいて下さい
(救出の保障性は致しかねます)

# apt-get remove mysql mysql~ mysql~
(依存関係にある様な物も一度消した方が良いかと)
([apt-get --purge remove]については確認していないので確証がありません)

# apt-get clean
# rm /etc/my.cnf
# rm -rf /var/lib/mysql

ついでにキャッシュも消しました。
私は消してないのですが、もしかしたら「/usr/share/mysql」以降も消した方が良いのかもしれません。

アンインストールが出来たら下のインストールの項へ進んで下さい。

その3:MySQLインストール
どうやらapt-get単体ではMySQLは4.0系統しか入ってない様で
5.0を引っ張るには公式サイトかSynaptic経由じゃないと無理みたいです。

端末にて

# synaptic

と入力して、Synapticを起動します。
そしてウインドウ上の「再読込」「検索」ボタンを押し、入力欄に「MySQL」と入力。
リストに「MySQL-Max」「MySQL-client」「MySQL-server」「MySQL-shared」が出たと思うのですが
「最新バージョン」が5.0以降の事を確認してください。

確認できたらパッケージをShifキーを押しながらクリック、この4つを全て選択して右クリック
「インストール指定」をします、そして「適用」ボタンを押してインストール開始。

途中で変なメッセージが出ます

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
(以下略)

無視して結構です、それより常時起動の設定をしましょう

# chkconfig mysql on
# chkconfig mysql --list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off

大体こんな感じですかね。

その4:MySQLの設定
キャッシュを残さない形の手法を記述したり、文字コードとか。
datadirはバグり易いので以降でもっと良いやりかたを提示します。

# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
# emacs /etc/my.cnf

って感じでコピーをし、コピー先の内容を書き換えます。
下の方へ行くと[mysqld]と言う項目があるので

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

~中略~

# log-bin=mysql-bin

[mysqld]以降、ちょっとしたの方に「log-bin」と言うのが記述されていると思いますが
個人環境で使うならコメントアウトして下さい、おわったら「ctrl+x → ctrl+s」でセーブ
「ctrl+x → ctrl+c」で終了してください。
これは要するにエラーとか起こった時に便利なログファイルの出力なんですが
今からやる処理をかますと平気でギガ単位を占有するのでオススメできません
もし利用するなら後述する:【メンテナンス】を適宜参照してください

最後に

# /etc/init.d/mysql restart

これで[成功]と表示されれば完了です。

その5:ユーザー管理とWikipediaデータベースの作成

先ずMySQLに入りパスワードを設定してしまいます。
※ウチの環境ではホストに「notepc」と記述されてますが、環境で異なります。
※別のハードディスク内、パーティション内にデータベースを構築したい場合は
シンボリックリンクと言う手法を使うと可能です、その場合は
create database wikipedia は行わずに【メンテナンス項】の
シンボリックリンクに関する事項を行ってください。

# mysql -u root

mysql> select user,host,password from mysql.user;

+------+-----------+------------------------------+
| user | host      | password                     |
+------+-----------+------------------------------+
| root | localhost |                              |
|      | localhost |                              |
| root | notepc    |                              |
|      | notepc    |                              |
+------+-----------+------------------------------+

4 rows in set (0.01 sec)

mysql> set password for root@localhost=password('ここにパスワードを入力');
mysql> set password for root@notepc=password('ここにパスワードを入力');

mysql> create database wikipedia;
Query OK, 1 row affected (0.01 sec)

mysq>exit

ここまでで一先ずSQL内部からの処理は終了、次はデータベース生成です。
先ずダウンロード解説ページで規約等々を熟読してください。
終わったらこちらのページでデータベースをダウンロード。

今回は最新のデータだけ欲しいので
/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 をダウンロードします。
ダウンロード先は、ここでは「/root/Desktop」としておきます。

後はMediaWikiのページからXML2SQL(xml2sql-0.5.tar.gz)
Expatパーサも必要なのでダウンロード。
それとここに記述されてるリンク(tables.sql)を直接保存して下さい。
終わったらインストールと一部のソースを変更します。

# cd /root/Desktop/
# tar -zxvf expat-2.0.1.tar.gz
# cd expat-2.0.1
# ./configure
# make
# make install
# ln -sf libexpat.so.0 /usr/lib/libexpat.so.1
# ldconfig

# cd ../
# tar -xzvf xml2sql-0.5.tar.gz
# cd xml2sql-0.5
# emacs xml2sql.c

741行目のコードに注目

putcolumnf(&rev_tbl, "%d", revision.minor);
/* rev_deleted */
putcolumn(&rev_tbl, "0", 0);
finrecord(&rev_tbl);
    if(page.lastts == 0 || strcmp(page.lastts, revision.timestamp) < 0) {

こんな感じの部分を

putcolumnf(&rev_tbl, "%d", revision.minor);
/* rev_deleted */
putcolumn(&rev_tbl, "0", 0);
putcolumn(&rev_tbl, "NULL", 0); //追加箇所
putcolumn(&rev_tbl, "NULL", 0); //追加箇所

finrecord(&rev_tbl);
    if(page.lastts == 0 || strcmp(page.lastts, revision.timestamp) < 0) {

こう修正。保存して終了します。

# ./configure --with-expat=/usr/local/lib
# make
# bunzip2 -c jawiki-latest-pages-meta-current.xml.bz2 | xml2sql

これで/root/Desktop/xml2sql-0.5/の中にテキストデータが作成されました。
・page.txt
・revision.txt
・text.txt

いよいよ導入です

# mysql -u root -p -D wikipedia < /root/Desktop/tables.sql
# mysqlimport -u root -p -d -L wikipedia /root/Desktop/xml2sql-0.5/page.txt
# mysqlimport -u root -p -d -L wikipedia /root/Desktop/xml2sql-0.5/revision.txt
# mysqlimport -u root -p -d -L wikipedia /root/Desktop/xml2sql-0.5/text.txt

このとき、revisionの出力結果として大量のWorningsが出力されますが
問題無いみたいです。後でMySQL側でSHOW TABLE STATUSを行い
Rowsが全て一致する事を確認して下さい。

以上で終了です!「素敵なWikipediaハックライフをお楽しみ下さい!」(笑)


メンテナンス項目は執筆中です...

# df
# mysql

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://sm.2-d.jp/mt/mt-tb.cgi/279
Listed below are links to weblogs that reference
Wikipediaをローカルデータベース(MySQL)として扱う for Vine Linux まとめ from SiteModifyBlog

Home > コラム > Wikipediaをローカルデータベース(MySQL)として扱う for Vine Linux まとめ

Return to page top