So kopieren Sie eine Tabelle von einer MySQL-Datenbank in eine andere MySQL-Datenbank

Lesezeit: 3 Minuten

Benutzer-Avatar
Ergec

Ich muss eine Tabelle von einer Datenbank in eine andere kopieren. Dies wird ein Cronjob sein. Welches ist der beste Weg, es zu tun? PHP-Skript oder Shell-Skript. Das Problem mit PHP, beide Datenbanken haben unterschiedliche Benutzernamen und Passwörter, also kann ich es so nicht machen.

CREATE TABLE db1.table1 SELECT * FROM db2.table1

Soll ich einfach die erste DB verbinden, alle Datensätze abrufen und alle mit der WHILE-Schleife in die neue Datenbank einfügen, oder gibt es einen besseren Weg?

Ich bevorzuge dafür ein Shell-Skript anstelle eines PHP-Skripts.

Vielen Dank

Wenn Sie die Tabelle auf denselben Server kopieren müssen, können Sie diesen Code verwenden:

USE db2;

CREATE TABLE table2 LIKE db1.table1;

INSERT INTO table2  
    SELECT * FROM db1.table1;

Es ist von hier aus kopiert und eingefügt:
Codingforums.com

Es ist nicht meine Lösung, aber ich finde es nützlich.

  • Dies sollte die akzeptierte Antwort sein. Viel einfacher als die mysqldump-Befehlszeile.

    – Patrick Moore

    7. November 2017 um 19:26 Uhr

Ich würde es wegwerfen. Viel weniger kompliziert als alles, was auf PHP basiert.

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

MySQL-Referenz: 4.5.4. mysqldump – Ein Datenbanksicherungsprogramm

  • Da ich nur eine Tabelle übertragen möchte, denke ich, dass dies mit ein wenig Mod funktionieren wird mysqldump -u user1 -ppassword1 –add-drop-table databasename tablename > dump.sql danke

    – Ergec

    14. Oktober 2010 um 11:35 Uhr


  • Wenn Sie phpmyadmin verwenden, wird es besser.

    – gautamlakum

    14. Oktober 2010 um 13:22 Uhr

  • Sie können es sogar durchleiten: mysqldump --user=root --password=remote_password the_database_name | mysql --user=root --password=local_password the_database_name; Normalerweise kann dies von Server zu Server mit SSH-Port-Weiterleitung erfolgen: ssh -f -N -L 3307:localhost:3306 nmmn (nmmn ist eine meiner SSH-Shortcuts, verwenden Sie stattdessen einen Servernamen + Port); @Ergec für mehrere Tabellen verwenden Sie den param --tables table1 table2

    – Feeela

    30. August 2011 um 21:50 Uhr


  • Persönlich würde ich die Datei wieder in mysql kategorisieren

    – Daryl Gill

    6. Mai 2013 um 15:29 Uhr

  • Bemerkenswert ist auch, dass kein Leerzeichen dazwischen ist -p und das Passwort. Einige neigen dazu zu denken, dass es sich um einen Tippfehler handelt, und wenn Ihr Passwort Sonderzeichen enthält, müssen Sie diese mit `\` akzentuieren

    – Cesar Bielich

    7. August 2020 um 22:30 Uhr


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

Alles kann mit einem einzigen Befehl erledigt werden.

$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 bezieht sich auf die ursprüngliche Tabelle user2, pass2, database2, table2 bezieht sich auf die kopierte Tabelle $keyfield ist der Primärschlüssel der Tabelle

Ein Liner mit verschiedenen Servern

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

  • Optional können Sie auch einen alternativen Port hinzufügen, z -P 3309

    – Phase

    25. Februar 2020 um 11:41 Uhr

Benutzer-Avatar
gautamlakum

Phpmyadmin verfügt über eine eingebaute Funktion zum Kopieren von Tabellen von einer Datenbank in eine andere. Andernfalls können Sie mit Pekka gehen oder die Tabelle exportieren und dann die Tabelle importieren.

  • Optional können Sie auch einen alternativen Port hinzufügen, z -P 3309

    – Phase

    25. Februar 2020 um 11:41 Uhr

Benutzer-Avatar
Zorn

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

  • Einfach und gerade. Ich frage mich, warum niemand das nützlich fand, da ich der erste bin, der es hochstimmt.

    – Faraz Ahmad

    1. April 2020 um 15:13 Uhr

  • Dadurch werden die Schlüssel nicht kopiert.

    – Arnoldvogel

    8. April 2020 um 3:46 Uhr

1206550cookie-checkSo kopieren Sie eine Tabelle von einer MySQL-Datenbank in eine andere MySQL-Datenbank

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy