データベースをPostgreSQLからMySQLへ移行

  • 投稿日:
  • by

このブログを立ち上げているサーバーのデータベースエンジンを、
PostgreSQLからMySQLへ移行しました。

なぜかというと、、、

PostgreSQLの方が高機能?であるのはわかっていたので、
最初はそちらで運用していましたが、

などの、いろいろなMTのカスタマイズを見ていくたびに、
MySQLの方がいろいろな面で良さそうだな、と。。。。


単純にそれだけです(^^;)


それでは、以下の多数の参考URLを元に、
移行作業手順をかいつまみではありますが、
記しておきたいと思います。。(私の備忘録という意味もありますが(^^;))


まず、今のブログはPostgreSQLで稼働しっぱなしにしておいて、
元から入っていたRPMパッケージのMySQLを削除します。

# rpm -qa | grep mysql mod_auth_mysql-1.11-12 mysql-3.23.58-1.90.5.legacy mysql-server-3.23.58-1.90.5.legacy

# rpm -e mod_auth_mysql-1.11-12
# rpm -e mysql-3.23.58-1.90.5.legacy
# rpm -e mysql-server-3.23.58-1.90.5.legacy
# rpm -e perl-DBD-MySQL-2.1021-3 mysql-3.23.58-1.90.5.legacy


続いて、ソースからのMySQLのインストールです。


MySQL ABのホームページ

より、ソースをダウンロードしてきます。

まぁ、私もよくわかりませんが、上記サイトの、

Linux (x86, glibc-2.2, static (Standard only), gcc)

をダウンロードしました。


ダウンロードしたファイルを、「/usr/local」にアップロードし、展開します。

# su - root Password: # cd /usr/local # tar vzxf mysql-mysql-standard-4.1.15-pc-linux-gnu-i686.tar.gz


のちのMySQLのアップグレードに備え、パスをシンボリックリンクでごまかして?おきます。

# ln -s ./mysql-mysql-standard-4.1.15-pc-linux-gnu-i686 ./mysql


次に、MySQLの初期設定(DB管理テーブル等の生成)を行います。

# cd ./mysql # chmod u+rx ./scripts/mysql_install_db # ./scripts/mysql_install_db

MySQL Server(デーモン)の動作グループ(mysql)/ユーザー(mysql)の設定を行います。
グループ/ユーザーを作成し、各ディレクトリ/ファイルの所属を変更します。

# groupadd mysql # useradd -M -g mysql mysql # chown -R root.root ../mysql # chown -R mysql ./data # chgrp -R mysql .


続いて、設定ファイル(my.cnf)を編集します。

あらかじめ設定ファイルのサンプルはソースファイル群の中にありますので、
それをコピーします。

# cp ./support-files/my-medium.cnf /etc/my.cnf # vi /etc/my.cnf

私のブログは文字コードがUTF-8ですし、他にMySQLを使うあてもありませんので、
MySQLのデフォルトの文字コードをUTF-8にします。

my.cnf青文字の部分を追加します。

[mysql] #safe-updates default-character-set = utf8

[mysqldump]
default-character-set = utf8

[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-networking
user = mysql
default-character-set = utf8
tmpdir = /tmp/


それでは、いざ、バックグラウンドでMySQLで起動します

# /usr/local/mysql/bin/safe_mysqld --user=mysql &


初期アカウントの特権ユーザーrootに、最初はパスワードが設定されていないので、適当なパスワードを設定します。

# /usr/local/mysql/bin/mysqladmin -u root password 'パスワード'


その後、その特権ユーザーrootにて、MySQLへ接続します

# /usr/local/mysql/bin/mysql -u root -p Enter password: パスワード mysql>

それでは、MovableType用のデータベースを作成します。

データベース名は「mt」としました。

mysql> create database mt; Query OK, 1 row affected (0.00 sec)

mysql>


データベース「mt」に、MovableType用の接続アカウントを設定します。

そして、ユーザー名を「mysql」として、作ったデータベース「mt」に対しての
すべての権限を設定します。

mysql> use mysql;

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

mysql> flush privileges;
mysql> exit;
Bye


最後に、MySQLの起動スクリプトを作成し、自動起動できるようにしておきます。
これもすでにソースファイルの中にあります。

# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # chkconfig --add mysqld

これでMySQLの設定は終了です。


他に、MySQLを使うに当たり、Perlモジュールが必要であったため、
今回新たに導入しました。

CPANを使用します。


# perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::mysql


これでデータベース移行の準備は整いましたので、
いざ!移行!!


Ogawa::Memorandaさんのページに、

「mt-db-convert.cgi: MTデータベースの相互変換CGIスクリプト」

というのがありますので、そちらを使用させて頂きました。


「mt-db-convert.zip」をダウンロード後、解凍し、
mt-db-convert.cgi」をMTディレクトリにアップロードします。
  ※パーミッションを755にするのを忘れずに!


そして、ブラウザから「mt-db-convert.cgi」へアクセスします


左側にコンバート前、右側にコンバート後を設定し、「Convert」を押します。

すると、、、、


mt-db-convert.cgi($Rev: 141 $): Converting your MT data between DB engines (for MT 3.2)
Loading database schema...
**** WARNING: Subroutine Jcode::ucs2_euc redefined at /***/cgiroot/mt-cgi/extlib/Jcode/Unicode/NoXS.pm line 56.
**** WARNING: Subroutine Jcode::euc_ucs2 redefined at /***/cgiroot/mt-cgi/extlib/Jcode/Unicode/NoXS.pm line 71.
**** WARNING: Subroutine Jcode::euc_utf8 redefined at /***/cgiroot/mt-cgi/extlib/Jcode/Unicode/NoXS.pm line 87.
**** WARNING: Subroutine Jcode::utf8_euc redefined at /***/cgiroot/mt-cgi/extlib/Jcode/Unicode/NoXS.pm line 94.
**** WARNING: Subroutine Jcode::ucs2_utf8 redefined at /***/cgiroot/mt-cgi/extlib/Jcode/Unicode/NoXS.pm line 101.
**** WARNING: Subroutine Jcode::utf8_ucs2 redefined at /***/cgiroot/mt-cgi/extlib/Jcode/Unicode/NoXS.pm line 124.

Loading data...
MT::Author
...
(3 objects saved.)

MT::Blog
....
(4 objects saved.)

MT::Category
.......... .......... .......... .......... .......... .......... .......... .......... ......
(86 objects saved.)

MT::Comment
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .
(1151 objects saved.)

MT::Entry
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..
(1192 objects saved.)

MT::IPBanList

(0 objects saved.)

MT::Log
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
 (中略)
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
..
(17602 objects saved.)

MT::Notification

(0 objects saved.)

MT::Permission
......
(6 objects saved.)

MT::Placement
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... ..
(1312 objects saved.)

MT::Template
.......... .......... .......... .......... .......... .......... ......... Found duplicate template name 'Dynamic Pages Error Template'; renaming to 'Dynamic Pages Error Template 2'
. .......... .......... ..........
.......... .......... .........
(129 objects saved.)

MT::TemplateMap
.......... .........
(19 objects saved.)

MT::Trackback
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .......... .......... .......... .......... ....
(1194 objects saved.)

MT::TBPing
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... ..
(452 objects saved.)

MT::Session
.......... ......
(16 objects saved.)

MT::PluginData
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... ...
(1623 objects saved.)

MT::Config
.
(1 objects saved.)

MT::FileInfo
.......... .......... .......... .......... .......... .......... .......... .......... .......... ..........
.......... .......... .......... .......... .......... ....
(154 objects saved.)


Done copying data from DBI::postgres to DBI::mysql! All went well.

Your recommended setting
-------------------------------------
# ObjectDriver DBI::postgres
# Database mt
# DBUser postgres
# DBHost localhost
# DBPassword ******
ObjectDriver DBI::mysql
Database mt
DBUser mysql
DBHost localhost
DBPassword ******
-------------------------------------


いくつかエラーやワーニングは出たが、何とか移行できたようである。

上記ログで表示されているように、
「mt-config.cgi」のデータベースの記述部分を、移行後の物に書き換えます。

# ObjectDriver DBI::postgres # Database mt # DBUser postgres # DBHost localhost # DBPassword ****** ObjectDriver DBI::mysql Database mt DBUser mysql DBHost localhost DBPassword ******

以上、完了!!!