24

「MySQLMigrationToolkit」のようなツールを使用せずに、コードを使用してこれを実行したいと思います。私が知っている最も簡単な方法は、(MySQLコネクタを使用して)DB1への接続を開き、そのデータを読み取ることです。DB2への接続を開き、データを書き込みます。より良い/最も簡単な方法はありますか?

4

5 に答える 5

22

まず、データ/ディレクトリをコピーするだけの立場にないことを前提としています。既存のスナップショット/バックアップ/復元を使用する場合は、おそらく十分です(そして、バックアップ/復元手順を掘り出し物にテストします)。 。

この場合、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に送信すると、データを圧縮したり、マンジしたり、ネットワークを介してハートコンテンツにトンネリングしたりできます。

于 2010-07-14T07:33:34.453 に答える
13

FEDERATEDストレージエンジン?束の中で最速のものではありませんが、一時的に、偶発的、または少量のデータが実行されます。これは、2台のサーバーについて話していることを前提としています。1つの同じサーバー上に2つのデータベースがある場合、次のようになります。

INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
于 2010-07-14T00:20:04.020 に答える
1

mysqldumpand mysql(コマンドラインクライアント)を使用できます。これらはコマンドラインツールであり、あなたが書いた質問ではそれらを使用したくありませんが、それでも(コードから実行する場合でも)それらを使用するのが最も簡単な方法です。mysqldump多くの問題を解決します。

selectあるデータベースから別のデータベースにsを作成できますがinsert、これは非常に簡単です。ただし、データベーススキーマ(sなど)も転送する必要がある場合はcreate table、少し複雑になります。これが、私がお勧めする理由ですmysqldump。しかし、多くのPHP-MySQL-adminツールもこれを実行するため、それらを使用したり、コードを確認したりできます。

または、MySQLレプリケーションを使用できます。

于 2010-07-14T00:30:26.727 に答える
1

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;
于 2013-09-02T02:49:42.483 に答える
0

現在のサーバーでバイナリログを有効にした場合(およびすべてのbinログがある場合)、2番目のサーバーのレプリケーションを設定できます

于 2010-07-14T02:30:32.573 に答える