「MySQLMigrationToolkit」のようなツールを使用せずに、コードを使用してこれを実行したいと思います。私が知っている最も簡単な方法は、(MySQLコネクタを使用して)DB1への接続を開き、そのデータを読み取ることです。DB2への接続を開き、データを書き込みます。より良い/最も簡単な方法はありますか?
5 に答える
まず、データ/ディレクトリをコピーするだけの立場にないことを前提としています。既存のスナップショット/バックアップ/復元を使用する場合は、おそらく十分です(そして、バックアップ/復元手順を掘り出し物にテストします)。 。
この場合、2つのテーブルの構造が一般的に最も速く、皮肉なことに最も簡単な方法は、一方の端でSELECT ... INTO OUTFILE ...を使用し、もう一方の端でLOAD DATAINFILE...を使用することです。
詳細については、 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
and mysql
(コマンドラインクライアント)を使用できます。これらはコマンドラインツールであり、あなたが書いた質問ではそれらを使用したくありませんが、それでも(コードから実行する場合でも)それらを使用するのが最も簡単な方法です。mysqldump
多くの問題を解決します。
select
あるデータベースから別のデータベースにsを作成できますがinsert
、これは非常に簡単です。ただし、データベーススキーマ(sなど)も転送する必要がある場合はcreate table
、少し複雑になります。これが、私がお勧めする理由ですmysqldump
。しかし、多くのPHP-MySQL-adminツールもこれを実行するため、それらを使用したり、コードを確認したりできます。
または、MySQLレプリケーションを使用できます。
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番目のサーバーのレプリケーションを設定できます