QA@IT

mediawikiのデータベース情報移行について

5725 PV

mediawikiについて
sqliteを使用しmediawikiを更新しておりましたが
重たい為、memcached等も利用しております。
ですがそれでも読み込みに時間が少しかかるので
mysqlに変更する為、phpの方をconfigオプションでmysql追加しました。

今回sqliteのデータをmysql側へ流し込みしたいのですが
以下エラーが出た為、dumpファイル内の以下1行目削除し
再度やっても同様にエラーが発生した為
2行目も削除しました。

それでもエラーがとまりません。
sqliteからmysqlへの移行はできないのでしょうか。

お手数ですが御教示頂けますでしょうか。

# mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2064
Server version: 5.5.42-MariaDB MariaDB Server

sqlite3 mediawiki.sqlite .dump > mediawiki.sql

# mysql -utest -p mediawiki2 < mediawiki.sql.bak 
Enter password: 
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'PRAGMA foreign_keys=OFF' at line 1


# vi mediawiki.sql
PRAGMA foreign_keys=OFF;   #削除行
BEGIN TRANSACTION;         #削除行
CREATE TABLE user (
 user_id INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
 user_name TEXT  NOT NULL default '',
 user_real_name TEXT  NOT NULL default '',
 user_password BLOB NOT NULL,
 user_newpassword BLOB NOT NULL,
 user_newpass_time BLOB,
 user_email TEXT NOT NULL,
 user_touched BLOB NOT NULL default '',
 user_token BLOB NOT NULL default '',
 user_email_authenticated BLOB,
 user_email_token BLOB,
 user_email_token_expires BLOB,
 user_registration BLOB,
 user_editcount INTEGER,
 user_password_expires BLOB DEFAULT NULL
 );

回答

コマンドがいろいろ欠けているようではありますが(mediawiki.sqlにダンプしたのに mediawiki.sql.bak とか、ユーザーが rootなのかtestなのかとか、そもそもMariaDB(MySQL互換DB)なんですかね?)、抜出しのミスだと思いますのでそれは無視します。

.dumpコマンドは sqlite用のバックアップスクリプトが作成されるだけですので そのまま別のデータベースエンジンに取り込めると思うのは良くないと思います。
(特にエラーが出て、消してみて動いてラッキーというやり方でしたら危険です。今回はMySQL DBは作ったばかりでMySQLが壊れても問題ないからというのがあったからだとは思いますが念のため。)

通常はsqliteから MySQLへのマイグレートやコンバーターを作る/探すなどする事になるかと思います。

pythonスクリプトでコンバートするものや、かなり古い情報ですけどコンバータの情報もありますね。
http://stackoverflow.com/questions/18671/quick-easy-way-to-migrate-sqlite3-to-mysql
http://www.sqlite.org/cvstrac/wiki?p=ConverterTools

有料の物もあるみたいです。
これらは汎用的なコンバートを考えているので、これで上手くいけばそれで問題ないですが、上手くいかない場合は MediaWikiのバックアップ機能を使う方法が取れるかもしれません。

MediaWikiのバックアップ機能を利用する

試す時間がなくて実際には試してないのですが、逆の方法(MySQLからSQLiteへ。且つMediaWiki自体別のサーバーに移すケース。)はブログで紹介している人はいました。
http://technology.mattrude.com/2010/01/converting-a-mediawiki-database-from-mysql-to-sqlite/

今回は同じサーバーですが、MySQLでインポートできる状態にしてあげさえすれば同じことになるんじゃないかと思います。

以下に手順を簡単に書きますが、私自身で試せていないので上手くいくかはわかりません。
試してみる場合はしっかりとバックアップを取ったうえで作業願います。

mediawikiのルートディレクトリで

php maintenance/dumpBackup.php --full --uploads > wiki-backup.xml
tar -czf wiki-images.tgz images/

を実行してバックアップを作成します。
(画像の方は不要かなとも思うのですが、メンテナンスコマンドがあるようなので一応)

次にMySQLにデータベースを用意します。
MediaWikiのインストール時にインストールスクリプトが勝手にやってくれる場合もありますが、今回はMediaWikiはもう入っているので、MySQLの準備を手動でしてあげる必要があります。

http://www.mediawiki.org/wiki/Manual:Installing_MediaWiki/ja#.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9.E3.81.AE.E4.BD.9C.E6.88.90

MySQL

  • MediaWikiをインストールする前にMySQLデータベースとユーザーを作成する必要があります。多くの共有サーバーで利用できる[[:ja:phpMyAdmin|PhpMyAdmin]]といった様々なコントロールパネルを使ってこの作業を行うことが出来ます。もしくはSSHを使用してホストにログインをしてMySQLプロンプトにコマンドを入力します。該当するドキュメントをご覧ください。他の方法では、あなたのアカウントを作るようにホストプロバイダーに連絡をしてください。

Unix/Linux でのインストール

  • Download and install [http://dev.mysql.com/downloads/mysql MySQL] - MediaWiki supports version 5.0.2 or later. MySQL typically installs in /usr/local/mysql. (If you use your Linux distribution's package manager to install MySQL, the following commands may be in some other directory; try typing them without the path prefix /usr/local/mysql/bin/ .)
  • Check and see if the database server is running; for example, run /usr/local/mysql/bin/mysqladmin status. If it is not, run mysqld_safe to start it: sudo /usr/local/mysql/bin/mysqld_safe &.
    • Another way to initially start the MySQL server is to run the ''configure'' script available at the root of the installation. It creates the initial tables and automatically starts the mysql daemon
  • Set a password for the "root" account on your database server. /usr/local/mysql/bin/mysqladmin -u root password ''yourpassword''
  • Run the MySQL command-line client: /usr/local/mysql/bin/mysql -u root -p
  • This will prompt for the "root" database password you just set, then connect to the MySQL server. Now, continue with the SQL commands below.

Windows でのインストール

  • Download MySQL msi (mysql-5.5.22-winx64.msi for example)
  • Run msi file and accept all defaults. When creating the root account, use a password that you will remember.
  • Run Start->All Programs->MySQL->MySQL Server->MySQL Command Line Client
  • Enter the root password you just created
  • Now continue with the instructions below

Installation continued

create database wikidb;

  grant index, create, select, insert, update, delete, alter, lock tables on wikidb.* to 'wikiuser'@'localhost' identified by 'password';

データベースサーバーとウェブサーバーが異なる場合、適切なウェブサーバーのホスト名を入力します -- 例えば、mediawiki.example.comであるなら -- 次の通りです:

  grant index, create, select, insert, update, delete, alter, lock tables on wikidb.* to
  'wikiuser'@'mediawiki.example.com' identified by 'password';

MySQL用の各種セットアップ(MediaWikiのDB設定)を行って下さい。

最後にMediaWikiのルートディレクトリでインポートします。

php maintenance/importDump.php wiki-backup.xml

画像のインポートは以下の様に行うようですが、同一サーバーなので不要なのかもしれません。
(ただ、それだとすると importImagesコマンドを実行する必要が無い気がするので一応載せてあります)

解凍して

mkdir temporary
cp wiki-images.tgz temporary
cd temporary/
tar -xzf wiki-images.tgz
cd ../
mkdir tempimages
cp temporary/images/*/*/* tempimages

インポートを行います。images/ ディレクトリの中身は消しておいた方がいいのかもしれません。

php maintenance/importImages.php tempimages/

不確定な情報ですみませんが、以上です。

編集 履歴 (0)
  • 御連絡頂きありがとうございます。
    時間が掛かると思われますが内容確認させて頂き試してみたいと思います。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。