« | Home | »

2006.01.03

Berkeley DBからMySQLへ移行(アップデートしました)

以前から、やろうと思っていたBerkeley DBからMySQLへの移行を行いました。
私のところではDBの容量が約6MBであったのが2MBになり、実行速度もだいぶ向上しました。
MySQLはFreeBSDのpackageから入れることを試みたのですが、インストール条件などが指定できないので、portsから入れ直しました。
MySQLのPortsは/usr/ports/databasesにありますが、mysql323, mysql40, mysql50の3つの版数のものが入っています。 Webで調べるとmysql50はまだ問題を抱えているような記述がありましたのでmysql40を入れることにしました。
一度packageで入れると、packageを削除しても完全には消されていなくて、矛盾を生じるので、入れる前にmake deinstallする必要がありました。
それと、DBの作成先はDefaultでは/var/db/mysqlですが、容量の残りがたっぷりの/usr/db/mysqlとすることにしました。 また、文字コードはeucにしたかったので ujisとしました。 最初文字コードをeucと書いたらエラーになりましたが、調べるとeucの指定はujisだと分かりました。
eucなら日本語以外のも中国語のeucもあるし、eucjpでは長いのでujisとしたのだそうです。
なんだか、言い訳じみています。

# mkdir /usr/db
# cd /usr/ports/databases/mysql40-client
# make deinstall
# make WITH_CHARSET=ujis WITH_XCHARSET=all
DB_DIR=/usr/db install clean

だいぶ時間がかかりましたが無事終了して、次にmysql40-serverのインストールです。

# cd ../mysql40-server
# make deinstall
# make WITH_CHARSET=ujis WITH_XCHARSET=all
DB_DIR=/usr/db install clean

インストールオプションはclientと同じですが、同じでないと具合が悪いようです。
次にMovabletypeから使えるように、p5-DBD-mysql40とp5-Class-DBI-mysqlも入れます。
この順序でないと、エラーがでます。 

# cd ../p5-DBD-mysql40
# make install clean
# cd ../p5-Class-DBI-mysql
# make install clean

ここまで、うまく行ったら、Movabletypeのmt.cgiがインストールされているディレクトリーにあるmt-check.cgiをBrowserから起動してDBIとDBDがインストールされていることを確認します。
この確認も取れたら、いよいよDBの作成です。
以下の作業をします。
(1) /usr/local/share/mysql内にあるmy-medium.cnfをmy.cnfの名前で /etcにコピーします。

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

(2) /etc/my.cnf に datadir = /usr/db/mysql の1行を追加

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
datadir = /usr/db/mysql ・・・この行を追加
key_buffer = 16M

(3) /usr/local/binにあるmysql_install_dbを使ってdbを設定します。

# mysql_install_db

(4) /usr/local/etc/rc.d内にあるmysql-server.sh は複雑でうまく動かなかったので、/usr/local/shre/mysql内にある mysql.server を/usr/local/etc/rc.dにコピーしmysql-server.shに名前を変えます。

# cd /usr/local/etc/rc.d
# mv mysql-server.sh mysql-server.org
# cp /usr/local/share/mysql.server ./mysql-server.sh

そして起動

# ./mysql-server.sh start

いよいよ、管理者のパスワードを設定です。

# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 6 to server version: 4.0.17
mysql> set password for root=password('設定するパスワード');
mysql> flush privileges;
mysql> exit
Bye

次にmysqlを再起動し、匿名ユーザーを削除します。
インストール直後、自動で作られていますのでセキュリティの点からも削除します。

# mysql -u root -p
Enter password: 設定したパスワード
mysql> use mysql;
mysql> delete from user where password=' ';
mysql> flush privileges;
mysql> exit
Bye

いよいよ、mysqlを起動してDBを作ります。 DBの名前はmtdbとしました。

# mysql -u root -p
Enter password: パスワード
mysql> create database mtdb;
Query OK, 1 row affected (0.00 sec)
mysql>

続いて、MovableType用のデータベースユーザーを作ります。
ユーザー名を mtuser としましたが、作ったデータベース mtdb に対してのすべての権限を与えます。
パスワードはMovabletypeが使うもので新しく決めて、後ほどmt-config-cgiにも書き込みます。

mysql> use mysql;
mysql> grant all privileges on mtdb.*
to mtuser@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.13 sec)
mysql> flush privileges;
mysql> exit
Bye

以上で完了です。
データベース上のテーブルは、MovableTypeが自動で作ります。
mysqlのコマンドは語句にスペルミスがあったりするとエラーになりますので、文末の”;”まで含めて正確に入れるのが要注意点です。
さて、いよいよDBの移行作業です。
mt.cgiのあるディレクトリーにあるmt-config.cgiのコメントアウトされている下記の部分を編集します。
パスワードはDBの作成でmtuserに与えたパスワードです。

ObjectDriver DBI::mysql
Database mtdb
DBUser mtuser
DBPassword パスワード
DBHost localhost

このとき DataSource ./db の設定はそのまま残しておきます。
そして、Brawserから mt-db2sql.cgi を起動します。
設定が正しければ、画面に延々と数字らしきものが表示され、かなりの時間の経過後に All well doneだったと思うが、うまく行ったメッセージが出て終了します。
ここで、先のmt-config.cgiのDataSource ./dbをコメントアウトする。
実際のdbディレクトリは消してもかまわないが、移行したものが正しく動作することが確認されるまでは、取っておくか、名前を変えて温存した方が無難でしょう。
結構、こまかい作業だが、順を追ってやって行けば移行作業は完了します。

コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)