web-dev-qa-db-ja.com

あるmysqlデータベースから別のmysqlデータベースにテーブルをコピーする方法

あるデータベースから別のデータベースにテーブルをコピーする必要があります。これはcronjobになります。それを行う最良の方法はどれですか? PHPスクリプトまたはシェルスクリプト。PHPの問題は、両方のデータベースに異なるユーザー名とパスワードがあるため、このようにすることはできません。

CREATE TABLE db1.table1 SELECT * FROM db2.table1

最初のDBを接続してすべてのレコードを取得し、WHILEループを使用してすべてを新しいデータベースに挿入する必要がありますか、それとももっと良い方法がありますか?

PHPスクリプトではなく、シェルスクリプトを使用することをお勧めします。

ありがとう

25
Ergec

ダンプします。何よりもそれほど複雑ではないPHPベース。

mysqldump -u user1 -ppassword1 databasename > dump.sql
mysql -u user2 -ppassword2 databasename < dump.sql

MySQLリファレンス: 4.5.4。mysqldump —データベースバックアッププログラム

32
Pekka 웃

同じサーバーでテーブルをコピーする必要がある場合は、次のコードを使用できます。

USE db2;

CREATE TABLE table2 LIKE db1.table1;

INSERT INTO table2  
    SELECT * FROM db1.table1;

ここからコピーして貼り付けます: codingforums.com

それは私の解決策ではありませんが、役に立つと思います。

39
Radu Damian
mysqldump -u user1 -ppassword1 databasename TblName | mysql -u user2 -ppassword2 anotherDatabase

それはすべて単一のコマンドで実行できます。

29
shantanuo
$L1 = mysql_connect('localhost', 'user1', 'pass1');
$DB1 = mysql_select_db('database1', $L1);   

$L2 = mysql_connect('localhost', 'user2', 'pass2');
$DB2 = mysql_select_db('database2', $L2);   

$re=mysql_query("SELECT * FROM table1",$L1);
while($i=mysql_fetch_assoc($re))
{
    $u=array();
    foreach($i as $k=>$v) if($k!=$keyfield) $u[]="$k='$v'";
    mysql_query("INSERT INTO table2 (".implode(',',array_keys($i)).") VALUES ('".implode("','",$i)."') ON DUPLICATE KEY UPDATE ".implode(',',$u),$L2) or die(mysql_error());
}

user1、pass1、database1、table1は初期テーブルuser2、pass2、database2、table2にコピーされたテーブルに参照$ keyfieldはテーブルの主キー

6
user3637009

Phpmyadminには、あるデータベースから別のデータベースにテーブルをコピーする機能が組み込まれています。それ以外の場合は、ペッカを使用するか、テーブルをエクスポートしてからテーブルをインポートできます。

5
gautamlakum

この答えは、助けを求めている他の人のために書きます。

SSHにアクセスできない場合は、PhpMyAdminを使用できます。

単に:

  1. 移動するテーブルを参照します
  2. [操作]タブをクリックします
  3. MOVEまたはCOPY to database関数を使用します

特権の問題に遭遇した場合、ユーザーに一時的にグローバル権限を付与するか、同じユーザーを両方のデータベースに追加できます。

3
itschrishill

異なるサーバーを備えた1つのライナー

mysqldump -h Host1 -u user1 -ppassword1 databasename TblName | mysql -h Host2 -u user2 -ppassword2 anotherDatabase
3
Juergen
CREATE TABLE db_target.cloned_table 
SELECT * 
FROM db_source.source_table;
0
Fury

使用する <from database>

create table <to database.new name> as (select * from <table to copy>);
0
user2597353

最初の質問に実際に答えた人は誰もいないように思えるので、リモートMySQLサーバーからローカルMySQLサーバーにテーブルをバックアップするためのmy PHPスクリプト:

function backup_remote_table (
    $remote_db_Host, $remote_login, $remote_password, $remote_db_name, $remote_table_name,
    $local_db_Host, $local_login, $local_password, $local_db_name, $local_table_name
) {
    // Generating names with time stamps for local database and/or local table, if not available
    if ($local_table_name) {
        $applied_local_table_name = $local_table_name;
    } else {
        $applied_local_table_name = $remote_table_name;
    }
    if ($local_db_name) {
        $applied_local_db_name = $local_db_name;
        if (!$local_table_name) {
          $applied_local_table_name .= date_format(date_create(), '_Y_m_d_H_i_s');
        }
    } else {
        $applied_local_db_name = $remote_db_name . date_format(date_create(), '_Y_m_d_H_i_s');
    }

    // Local server connection
    $local_db_server = mysql_connect($local_db_Host, $local_login, $local_password);
    $local_db_server = mysql_query("CREATE DATABASE IF NOT EXISTS " . $applied_local_db_name, $local_db_server);
    mysql_select_db($applied_local_db_name, $local_db_server);

    // Remote server connection
    $remote_db_server = mysql_connect($remote_db_Host, $remote_login, $remote_password);
    mysql_select_db($remote_db_name, $remote_db_server);

    // Getting remote table data
    $result_remote_table_info = mysql_query("SHOW CREATE TABLE " . $remote_table_name, $remote_db_server);
    $remote_table_info = mysql_fetch_array($result_remote_table_info);
    $remote_table_description = substr($remote_table_info[1], 13);

    // Creating local table
    $sql_new_table = "CREATE TABLE IF NOT EXISTS " . $applied_local_db_name . "." . $remote_table_description;
    mysql_query($sql_new_table, $local_db_server);

    // Getting all records of remote table
    $result_remote_table_data = mysql_query("SELECT * FROM " . $table_name, $remote_db_server);
    while ($remote_table_row = mysql_fetch_array($result_remote_table_data, MYSQL_ASSOC)){
        // Browsing records of remote table
        $sql_new_row = "INSERT INTO $applied_local_db_name.$applied_local_table_name (".implode(", ",array_keys($remote_table_row)).") VALUES (";
        $extra_sql = "";
        foreach (array_values($remote_table_row) as $value) {
            if ($extra_sql != "") {
                $extra_sql .= ",";
            }
            $extra_sql .= "'";
            $extra_sql .= mysql_real_escape_string($value);
            $extra_sql .= "'";
        }
        $sql_new_row .= $extra_sql . ")";
        // Adding record to local table
        $result_new_table_row = mysql_query($sql_new_row, $local_db_server);
    }
    mysql_free_result($result_remote_table_data);

    return;
}

上記の解決策は私のものではありません、私はそれを手に入れました ここ 、小さな変更を加えました。

insert into dest.table select * from orginal.table;
0
Peter Eskandar