如何将表从一个mysql数据库复制到另一个mysql数据库

时间:2010-10-14 11:26:35

标签: php sql mysql linux shell

我需要将一个表从一个数据库复制到另一个数据库。这将是一个cronjob。哪一个是最好的方法呢? PHP脚本或Shell脚本。 PHP的问题,两个数据库都有不同的用户名和密码,所以我不能这样做。

CREATE TABLE db1.table1 SELECT * FROM db2.table1

我应该只是连接第一个DB获取所有记录并使用WHILE循环将所有记录插入到新数据库中还是有更好的方法?

我更喜欢使用shell脚本来代替PHP脚本。

由于

12 个答案:

答案 0 :(得分:37)

如果您需要在同一台服务器上复制该表,则可以使用以下代码:

USE db2;

CREATE TABLE table2 LIKE db1.table1;

INSERT INTO table2  
    SELECT * FROM db1.table1;

从这里复制+粘贴: codingforums.com

这不是我的解决方案,但我发现它很有用。

答案 1 :(得分:31)

我要把它丢弃。比基于PHP的任何东西都复杂得多。

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

MySQL参考:4.5.4. mysqldump — A Database Backup Program

答案 2 :(得分:28)

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

这一切都可以在一个命令中完成。

答案 3 :(得分:6)

$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,表1指的是初始表 user2,pass2,database2,table2指复制的表 $ keyfield是表

的主键

答案 4 :(得分:5)

Phpmyadmin具有内置功能,可以将表从一个数据库复制到另一个数据库。否则你可以使用Pekka或导出表然后导入表。

答案 5 :(得分:3)

我会把这个答案提供给其他寻求帮助的人。

如果您无法访问SSH,则可以使用PhpMyAdmin。

简单地:

  1. 浏览到您要移动的表格
  2. 单击“操作”选项卡
  3. 使用MOVE或COPY到数据库功能
  4. 如果您遇到权限问题,可以临时授予用户全局权限或将同一用户添加到两个数据库。

答案 6 :(得分:2)

一台带有不同服务器的班轮

mysqldump -h host1 -u user1 -ppassword1 databasename TblName | mysql -h host2 -u user2 -ppassword2 anotherDatabase

答案 7 :(得分:0)

insert into dest.table select * from orginal.table;

答案 8 :(得分:0)

使用<from database>

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

答案 9 :(得分:0)

CREATE TABLE db_target.cloned_table 
SELECT * 
FROM db_source.source_table;

答案 10 :(得分:0)

似乎没有人回答最初的问题,这是我的PHP脚本,用于将表从远程MySQL服务器备份到本地MySQL服务器:

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;
}

上面的解决方案不是我的,我得到了here,并做了微小的改动。

答案 11 :(得分:0)

exec('mysqldump --user=username --password="password" --host=hostname --database=database table1 table2 > databasedump.sql');

exec('mysql --user=username --password="password" --host=hostname --database=database < databasedump.sql');