パスワードを忘れた? アカウント作成
472827 journal

novaの日記: MySQL のデータ移行

日記 by nova

 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

 コレで完了。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...