복붙노트

[SQL] 다른 MySQL의 데이터베이스에 하나의 MySQL 데이터베이스에서 테이블을 복사하는 방법

SQL

다른 MySQL의 데이터베이스에 하나의 MySQL 데이터베이스에서 테이블을 복사하는 방법

나는 다른 하나의 데이터베이스에서 테이블을 복사해야합니다. 이 cronjob에있을 것입니다. 그것을 할 수있는 가장 좋은 방법은 어느 쪽입니까? PHP 스크립트 나 쉘 스크립트. PHP의 문제, 두 데이터베이스는이 같은 그것을 할 수 있도록 다른 사용자 이름과 암호가 있습니다.

CREATE TABLE db1.table1 SELECT * FROM db2.table1

난 그냥 연결 첫째 DB는 모든 레코드를 얻고 WHILE 루프를 사용하여 새 데이터베이스에 대한 모든 삽입하거나 더 나은 방법이해야 하는가?

내가 대신 PHP 스크립트의이 작업을 수행하는 쉘 스크립트를 선호합니다.

감사

해결법

  1. ==============================

    1.나는 그것을 덤프 것입니다. 훨씬 적은 기반 아무것도 PHP보다 복잡합니다.

    나는 그것을 덤프 것입니다. 훨씬 적은 기반 아무것도 PHP보다 복잡합니다.

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

    MySQL의 참조 : 4.5.4. mysqldump는 - 데이터베이스 백업 프로그램

  2. ==============================

    2.동일한 서버에서 테이블을 복사해야하는 경우이 코드를 사용할 수 있습니다 :

    동일한 서버에서 테이블을 복사해야하는 경우이 코드를 사용할 수 있습니다 :

    USE db2;
    
    CREATE TABLE table2 LIKE db1.table1;
    
    INSERT INTO table2  
        SELECT * FROM db1.table1;
    

    그것은의 복사 + 여기에서 붙여 넣기 : codingforums.com

    그것은 내 솔루션 아니지만, 나는 그것이 유용하게 찾을 수 있습니다.

  3. ==============================

    3.

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

    그것은 모두 하나의 명령으로 수행 할 수 있습니다.

  4. ==============================

    4.다른 서버와 하나 라이너

    다른 서버와 하나 라이너

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

    5.phpMyAdmin을 하나의 데이터베이스에서 다른 사본 테이블에 붙박이 기능이 있습니다. 그렇지 않으면 페카으로 갈 수 또는 내보내기 테이블은 테이블을 가져옵니다.

    phpMyAdmin을 하나의 데이터베이스에서 다른 사본 테이블에 붙박이 기능이 있습니다. 그렇지 않으면 페카으로 갈 수 또는 내보내기 테이블은 테이블을 가져옵니다.

  6. ==============================

    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 테이블을 참조하여 초기 사용자 2는, PASS2는 데이터베이스 (2)는, 복사 테이블을 표 2를 참조 $ 키 필드는 테이블의 기본 키입니다

  7. ==============================

    7.나는 도움을 찾고 다른 사람이 대답을 넣어 것입니다.

    나는 도움을 찾고 다른 사람이 대답을 넣어 것입니다.

    당신은 SSH에 액세스 할 수없는 경우에 당신은 phpMyAdmin을 사용할 수 있습니다.

    간단히:

    당신은 권한 문제를 건너 경우 임시 사용자 글로벌 권한을 부여하거나 두 데이터베이스에 동일한 사용자를 추가 할 수 있습니다.

  8. ==============================

    8.

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

    9.

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

    10.사용 <데이터베이스>

    사용 <데이터베이스>

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

    11.그것은 그 누구도 실제로 최초의 질문에 대답하지 보인다, 여기에 백업 내 PHP 스크립트는 로컬 MySQL 서버에 원격 MySQL 서버에서 테이블 :

    그것은 그 누구도 실제로 최초의 질문에 대답하지 보인다, 여기에 백업 내 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;
    }
    

    위의 솔루션은 내가 사소한 변화와 함께, 여기있어, 내 없습니다.

  12. from https://stackoverflow.com/questions/3932608/how-to-copy-a-table-from-one-mysql-database-to-another-mysql-database by cc-by-sa and MIT license