2006.01.03
Berkeley DBからMySQLへ移行(アップデートしました)・・・(Movabletype)
以前から、やろうと思っていた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ディレクトリは消してもかまわないが、移行したものが正しく動作することが確認されるまでは、取っておくか、名前を変えて温存した方が無難でしょう。
結構、こまかい作業だが、順を追ってやって行けば移行作業は完了します。
コメント
コメントフィードを購読する
コメント投稿