189

データベースが異なるユーザーの下にある場合に、あるデータベースのテーブルから別のデータベースのテーブルにデータをコピーする最良の方法は何ですか?

私は使用できることを知っています

INSERT INTO database2.table2 SELECT * from database1.table1

しかし、ここでの問題は、 と の両方database1database2異なる MySQL ユーザーの下にあることです。したがって、user1アクセスdatabase1のみuser2可能で、アクセスのみ可能ですdatabase2。何か案が?

4

19 に答える 19

134

シェル アクセス権がある場合はmysqldump、 のコンテンツをダンプして にdatabase1.table1パイプするためmysqlに使用できますdatabase2。ここでの問題は、table1まだtable1.

mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2

別のクエリで名前を変更table1する必要があるかもしれません。table2逆に、sed を使用して、to パイプ間で table1 を table2 に変更することもできます。

mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2

table2 が既に存在する場合は、最初の mysqldump にパラメーターを追加して、テーブル作成を作成させないことがあります。

mysqldump --no-create-info --no-create-db --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2
于 2012-09-03T06:51:33.117 に答える
128

CREATE TABLE db1.table1 SELECT * FROM db2.table1

ここで、db1 は宛先、db2 はソースです。

于 2014-03-24T19:30:46.437 に答える
29

MySql Workbench : 強く推奨

MySql Workbench からのデータベース移行ツール

これにより、移行の問題を簡単に処理できます。選択したデータベースの選択したテーブルを MySql と SqlServer の間で移行できます。絶対に試してみるべきです。

于 2012-09-03T07:48:27.297 に答える
24

私はMySQLにNavicatを使用しています...

すべてのデータベース操作が簡単になります。

Navicat で両方のデータベースを選択して使用するだけです。

 INSERT INTO Database2.Table1 SELECT * from Database1.Table1
于 2014-01-26T17:28:10.590 に答える
8

MySql Workbench のエクスポートおよびインポート機能を使用します。手順:
1. 必要な値を選択します

E.g. select * from table1; 
  1. [エクスポート] ボタンをクリックして、CSV として保存します。
  2. 最初のテーブルと同様の列を使用して新しいテーブルを作成する

    E.g. create table table2 like table1; 
    
  3. 新しいテーブルからすべてを選択

    E.g. select * from table2;  
    
  4. [インポート] をクリックし、手順 2 でエクスポートした CSV ファイルを選択します。

MySql Workbench の [エクスポート] ボタンと [インポート] ボタンのサンプル

于 2015-04-01T15:59:06.860 に答える
4

試してみてくださいmysqldbcopy(ドキュメント)

または、ターゲット ホストに「連合テーブル」を作成することもできます。フェデレーション テーブルを使用すると、別のデータベース サーバーのテーブルをローカル サーバーのように表示できます。(ドキュメント)

連合テーブルを作成した後、通常の方法でデータをコピーできますinsert into TARGET select * from SOURCE

于 2012-09-03T08:18:32.340 に答える
3

最初にダンプを作成します。既に存在する--no-create-info --no-create-db場合はフラグを追加しました:table2

mysqldump -u user1 -p database1 table1 > dump.sql

次にuser1パスワードを入力します。それで:

sed -e 's/`table1`/`table2`/' dump.sql
mysql -u user2 -p database2 < dump.sql

次にuser2パスワードを入力します。

helmor の回答と同じですが、パスワードが生のテキストでコンソールに公開されないため (reverse-i-search、パスワード スニファーなど)、このアプローチはより安全です。アクセス許可に適切な制限が設定されたスクリプト ファイルから実行する場合は、他の方法でも問題ありません。

于 2020-05-12T08:00:51.513 に答える
2

これは定期的に行う必要があるものですか、それとも 1 回限りですか?

テーブルとその内容をテキスト ファイルにスクリプト化するエクスポート (例: phpMyAdmin などを使用) を実行し、それを他のデータベースに再インポートできます。

于 2012-09-03T06:09:07.990 に答える
1

以下の手順を使用して、あるデータベース テーブルから別のデータベース テーブルにいくつかの列をコピーして挿入します。

  1. CREATE TABLE tablename ( columnname データ型 (サイズ), columnname データ型 (サイズ));

2.INSERT INTO db2.tablename SELECT columnname1,columnname2 FROM db1.tablename;

于 2015-08-13T07:24:59.817 に答える