novaの日記: MySQL のデータ移行
MySQL 3 (3.23.41-1) のデータを MySQL 5 (5.0.45-6) に移すコトになった。
mysqldump コマンドで dump 取って、mysql コマンドで流し込めば OK のハズ。
一応、MySQL 3 の config 見とこうと思って /etc/my.cnf 見てみたら……文字コードは sjis か。
Windows のアプリから突っつくのが前提の DB なのかねぇ。
ま、「そっくり移してクレ」って言われてるから、sjis で設定するコトにします。
MySQL 5 をインストールしたサーバの /etc/my.cnf を以下の様に設定。
[client]
default-character-set=sjis
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=sjis
character-set-server=sjis
[mysql]
default-character-set=sjis
[mysql.server]
default-character-set=sjis
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=sjis
[mysqldump]
default-character-set=sjis
MySQL を再起動。んで mysql コンソールから設定を確認してみる。
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | sjis |
| character_set_connection | sjis |
| character_set_database | sjis |
| character_set_filesystem | binary |
| character_set_results | sjis |
| character_set_server | sjis |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql> show variables like 'collation%';
+----------------------+------------------+
| Variable_name | Value |
+----------------------+------------------+
| collation_connection | sjis_japanese_ci |
| collation_database | sjis_japanese_ci |
| collation_server | sjis_japanese_ci |
+----------------------+------------------+
3 rows in set (0.00 sec)
うむ、問題無さそう。sjis に染まってるネ。
受け皿が出来たので、データ移行作業に移る。まず、MySQL 3 から dump を取りマス。
管理者 fake (password: decoy) が dummy って名前の database を抜く場合を想定する。
mysqldump --user=fake --password=decoy dummy > dummy.dmp
コレで、dummy database の dump (dummy.dmp) が取れました。
もし、抜き出した dump が文字化けしちゃう場合は、
--default-character-set オプションを付ける。こんな感じ。
mysqldump --user=fake --password=decoy --default-character-set=sjis dummy > dummy.dmp
上記のコマンドは MySQL に管理者アカウントが無いユーザが行う場合です。
MySQL の管理者アカウントで行うなら、--user, --password オプションは不要です。
続いて流し込み。もし、テストか何かで既に dummy DB が存在するなら消しておきます。
mysqladmin drop dummy
投入する DB を作成します。
mysqladmin --default-character-set=sjis create dummy
設定済みなので --default-character-set は無くても問題ないと思われますが、念の為。
dump を流し込みます。
mysql --default-character-set=sjis dummy < dummy.dmp
コレで完了。
MySQL のデータ移行 More ログイン