「MySQL Migration Toolkit」のようなツールを使用せずに、コードを使用してそれを実行したいと思います。私が知っている最も簡単な方法は、DB1への接続を(MySQLコネクタを使用して)開き、そのデータを読み取ることです。 DB2への接続を開き、データを書き込みます。より良い/最も簡単な方法はありますか?
最初に、あなたがdata /ディレクトリを単にコピーする立場にないことを想定します。これは、既存のスナップショット/バックアップ/復元を使用している場合はおそらく十分です(そして、バックアップ/復元手順を格安にテストします)。 。
その場合、2つのテーブルの構造が同じであれば、一般的に最も速く、皮肉にも最も簡単なアプローチは、一方の側でSELECT ... INTO OUTFILE ...を使用し、もう一方の側でLOAD DATA INFILE ...を使用することです。
決定的な詳細については、 http://dev.mysql.com/doc/refman/5.1/en/load-data.html および.../select.htmlを参照してください。
簡単なテーブルの場合、次のように機能します。
SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
LOAD DATA INFILE '/tmp/mytable.csv' INTO TABLE mytable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
また、FIFOを使用して、実際にディスクに書き込むオーバーヘッドを回避したり、何らかの理由でディスクに書き込む必要がある場合は、gzipを介してパイプ処理したりすることもできます。
すなわち。
mkfifo /tmp/myfifo
gzip -c /tmp/myfifo > /tmp/mytable.csv.gz &
... SEL
ECT... INTO OUTFILE '/tmp/myfifo' .....
wait
gunzip -c /tmp/mytable.csv.gz > /tmp/myfifo &
... LOAD DATA INFILE /tmp/myfifo .....
wait
基本的に、テーブルデータをFIFOに転送することができます。圧縮したり、変更したり、ネットワークを介してハートのコンテンツにトンネリングしたりできます。
FEDERATEDストレージエンジン?束の中で最速のものではありませんが、一時的、偶発的、または少量のデータで実行されます。これは、2つのサーバーについて話していることを前提としています。 1つの同じサーバー上に2つのデータベースがある場合は、次のようになります。
INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
mysqldump
およびmysql
(コマンドラインクライアント)を使用できます。これらはコマンドラインツールであり、作成した質問では使用したくないが、それでも(コードから実行した場合でも)使用するのが最も簡単な方法です。 mysqldump
は多くの問題を解決します。
1つのデータベースからselect
sを作成し、もう1つのデータベースからinsert
を作成することは非常に簡単です。ただし、データベーススキーマ(create table
sなど)、少し複雑になるので、mysqldump
をお勧めします。しかし、多くのPHP-MySQL-adminツールもこれを行うため、それらを使用したり、コードを確認したりできます。
または、MySQLレプリケーションを使用することもできます。
from http://dev.mysql.com/doc/refman/5.0/en/rename-table.html :
2つのデータベースが同じファイルシステム上にある限り、RENAME TABLEを使用して、あるデータベースから別のデータベースにテーブルを移動できます。
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
現在のサーバーでバイナリログを有効にしている場合(すべてのbinログがある場合)、2番目のサーバーのレプリケーションを設定できます。