2010-12-29

【MySQL】同一マシン上の異なるデータベース間でのテーブルコピーの方法

レンタルサーバーなどで複数のデータベースが作成できるMySQLを使用している場合、
 「データベース1つ作成ごとに課金」
という方式を取っている業者もあります(たとえばKagoyaとか)。

経済事情などでデータベースを1つに統合したいときもありますよね?
でもmysqldump等のMySQL附属ツールでは文字化けしてエクスポートが失敗することがよくあります(phpMyAdminでも失敗することがある)。
自分は携帯サイトを運営しているので、エクスポート時に「絵文字」やらが文字化けしてしまうことがものすごく多いです。

そういった方のために参考までに自分でやってうまくいった方法を紹介します。ただ他の環境でうまくいくかはよく分かりません。試せる環境がないので。

---
◆前提
1)同じサーバマシン内でデータベースを複数使用していること。
2)phpMyAdminを使用していること

◆手順
△テーブルの「構造のみ」をエクスポート
1)「phpMyAdmin」にログインして「移動したいテーブル」で「エクスポート」をクリック。
2)「構造」にチェックが入っているか確認する。
3)AUTO_INCREMENTを使用しているのであれば「AUTO_INCREMENT値を追加」もチェックする。
4)あわせて「データ」にチェックが入ってないかを確認する。
5)エクスポートを実行する。以下エクスポートした「構造SQL」を単に「構造」という。

△エクスポートした「構造」を「移動したいデータベース」で実行する
1)「phpMyAdmin」で移動したいデータベースに「SQL」または「インポート」で「構造」を実行する。
2)テーブルが作成されればOK。

△データを移動する
1)データを移動する方法は「SQL」でスクリプトを作る。
2)例としては

INSERT INTO dest_table1 SELECT * FROM src_db.src_table1;
INSERT INTO dest_table2 SELECT * FROM src_db.src_table2;
INSERT INTO dest_table3 SELECT * FROM src_db.src_table3;
INSERT INTO dest_table4 SELECT * FROM src_db.src_table4;
※destは移動先。srcは移動元

という風なSQLを「移動先データベース」で実行すればOKです。

---
データが文字化けせず移動されたか確認して終了です。
参考になれば幸いです。

ZenBack

WebMoney ぷちカンパ