Ich möchte das mit einem Code tun und nicht mit einem Tool wie "MySQL Migration Toolkit". Der einfachste Weg, den ich kenne, besteht darin, eine Verbindung (unter Verwendung von MySQL-Konnektoren) zu DB1 zu öffnen und seine Daten zu lesen. Öffnen Sie die Verbindung zu DB2 und schreiben Sie die Daten dorthin. Gibt es einen besseren/einfachsten Weg?Wie kann ich Daten zwischen 2 MySQL-Datenbanken übertragen?
Antwort
Zuerst kann ich Dich nicht in der Lage zu übernehmen werde einfach kopieren das data/-Verzeichnis, denn wenn Sie dann Ihren vorhandenen Snapshot/Backup/Restore verwenden, wird es wahrscheinlich ausreichen (und Ihre Backup/Restore-Prozeduren testen).
In diesem Fall, wenn die beiden Tabellen die gleiche Struktur haben, ist der schnellste und ironisch einfachste Weg, SELECT ... INTO OUTFILE ... an einem Ende und LOAD DATA INFILE ... on zu verwenden das andere.
Ausführliche Informationen finden Sie unter http://dev.mysql.com/doc/refman/5.1/en/load-data.html und .../select.html.
Für triviale Tabellen folgendes funktioniert:
SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
LOAD DATA INFILE '/tmp/mytable.csv' INTO TABLE mytable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
Wir haben auch FIFOs zum großen Effekt verwendet, um den Overhead tatsächlich das Schreiben auf die Festplatte zu vermeiden, oder wenn wir aus irgendeinem Grund auf die Festplatte schreiben müssen, um es durch gzip zu leiten.
dh.
mkfifo /tmp/myfifo
gzip -c /tmp/myfifo > /tmp/mytable.csv.gz &
... SEL
ECT... INTO OUTFILE '/tmp/myfifo' .....
wait
gunzip -c /tmp/mytable.csv.gz > /tmp/myfifo &
... LOAD DATA INFILE /tmp/myfifo .....
wait
Grundsätzlich ein lenken Sie die Tabellendaten zu einem FIFO Sie es komprimieren können, munge es, oder Tunnel es über ein Netzwerk nach Herzenslust.
Danke, obwohl es in der dev.mysql-Handbuch ist, aber es funktioniert nicht proberly. Es gibt mir diesen Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, für die richtige Syntax in der Nähe von '\ n' 'in Zeile 1) Es akzeptiert nicht' \ n '.. warum? – Morano88
Stack Overflow hat die Beispielabfrage beschädigt. In der Quelle wurde der Schrägstrich in der ESCAPED BY-Klausel mit Escapezeichen versehen, aber das Escapezeichen wurde bei der Konvertierung in HTML verloren. Tut mir leid, dass ich die Korruption nicht bemerkt habe - ich habe es oben behoben. – Recurse
Dies ist genau das, was ich brauche, um die Sicherung einer recht großen Datenbank zu beschleunigen, aber ich kann Ihr Beispiel nicht zum Laufen bringen. Ich kann den FIFO erstellen, und wenn ich mit mysqldump auf die Pipe dumpe, funktioniert es gut. Wenn ich jedoch versuche, über SELECT ... INTO OUTFILE in die Pipe zu gelangen, bekomme ich den Fehler, dass "myfifo bereits existiert". –
Die FEDERATED Speicher-Engine? Es ist nicht der schnellste im ganzen Haufen, aber für eine einmalige, zufällige oder kleine Datenmenge. Nehmen wir an, Sie sprechen von 2 Servern. Mit 2 Datenbanken auf ein und demselben Server wird es einfach sein:
INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
Vielen Dank, ich bin mir noch nicht sicher, ob die 2 Datenbanken auf dem gleichen Server sind oder nicht. – Morano88
Das war fantastisch für meine Situation. Prost :) – Nick
Arbeitete großartig mit Amazon RDS, wo Sie keinen Zugriff auf die zugrunde liegende Maschine haben, auf der die MySQL-Instanz ausgeführt wird, was Lösungen mit INFILE/OUTFILE ausschließt. – Andz
Sie mysqldump
und mysql
(die Kommandozeilen-Client) verwenden können. Dies sind Kommandozeilen-Tools und in der Frage, die Sie schreiben, möchten Sie sie nicht verwenden, aber sie trotzdem zu benutzen (selbst wenn Sie sie aus Ihrem Code heraus ausführen) ist der einfachste Weg; mysqldump
löst viele Probleme.
Sie können select
s von einer Datenbank und insert
zum anderen machen, was ziemlich einfach ist. Aber wenn Sie auch das Datenbankschema (create table
s usw.) übertragen müssen, wird es etwas komplizierter, weshalb ich mysqldump
empfehle. Aber viele PHP-MySQL-Admin-Tools tun dies auch, also können Sie sie benutzen oder ihren Code ansehen.
Oder vielleicht können Sie MySQL-Replikation verwenden.
Funktioniert das (Auswählen, Einfügen), wenn sich die beiden Datenbanken auf 2 verschiedenen Servern befinden? Nein Ich möchte nur Daten migrieren, nicht Tabellenkreationen .. etc. – Morano88
Ja, Sie haben tvo Verbindungen - für jeden Server eine - in einer Verbindung führen Sie SELECT, dann in der anderen INSERT mit den Daten, die von diesem SELECT zurückgegeben . – Messa
Wenn Sie Binärlogging auf Ihrem aktuellen Server (und haben alle sind Protokolle) aktivieren Sie Setup-Replikation für den zweiten Server
von http://dev.mysql.com/doc/refman/5.0/en/rename-table.html:
Solange zwei Datenbanken auf demselben Dateisystem sind, können Sie RENAME TABLE zu bewegen, um eine Tabelle aus einer Datenbank in einer anderen verwenden:
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
- 1. Kann ich Daten in AWS S3 übertragen?
- 2. Übertragen von Daten zwischen View-Controllern
- 3. Daten zwischen zwei Ansichten übertragen: Kontextbindung
- 4. Übertragen von Daten zwischen Blättern (Excel VBA)
- 5. Übertragen von Daten zwischen Datenbanken mit PostgreSQL
- 6. Übertragen von Daten zwischen ausführbaren Dateien
- 7. Wie vertrauliche Daten zwischen Prozessen in Windows übertragen werden?
- 8. Objekte und Daten zwischen SQL 2005-Datenbanken übertragen
- 9. Übertragen von Variablen zwischen Klassen
- 10. Möglich, Sitzung zwischen 2 Apache-PHP-Instanzen zu übertragen
- 11. Übertragen Sie die Daten zwischen mehreren Schienen Anwendung
- 12. Übertragen von Daten zwischen Seiten auf einer Website
- 13. iPhone - wie werden Daten in P2P übertragen
- 14. Wie UINT64 zu 2 DWORDS übertragen?
- 15. Wie kann ich in SpecFlow Daten zwischen Schritten/Features austauschen?
- 16. Fackel-Threads - Daten zwischen Main und Threads einmal übertragen
- 17. Fehler beim Übertragen von Daten von Variable zwischen Storyboards
- 18. Wie kann ich Daten zwischen zwei Knoten einfügen?
- 19. Wie kann ich Tage zwischen zwei Daten berechnen
- 20. Wie kann ich Mungo-Modelle zwischen 2 Apps teilen?
- 21. Wie kann ich die Ähnlichkeit zwischen 2 Strings messen?
- 22. Wie kann ich eine Variable zwischen 2 Aktivitäten übergeben?
- 23. Wie kann ich die Anzahl der Tage zwischen 2 Daten in Oracle 11g erhalten?
- 24. Wie kann ich den Unterschied zwischen 2 Daten in Wochen berechnen?
- 25. Instagram api erhalten Feed zwischen 2 Daten
- 26. WatchOS 2 - Bildsequenzen für Animation übertragen
- 27. Wie verzögere ich zwischen 2 Animationen?
- 28. Übertragen von Daten mit CoreBluetooth
- 29. Aufruf erhalten Monate zwischen 2 Daten C#
- 30. Unterschied zwischen 2 Daten in Sekunden ios
zwei Datenbanken auf demselben Server oder zwei Datenbanken auf verschiedenen Servern? –
@Itay: Ich bin mir noch nicht sicher, ob sie auf dem gleichen Server sind oder nicht? Ich weiß, dass dies einen Unterschied macht, aber ich kam nicht auf die Idee, sie zu fragen.Ich werde morgen tun. – Morano88