Mailinglisten-Archive |
Walter Steinbach schrieb heute: > gibt es eine moeglichkeit, eine datenbank von einem rechner (linux) > auf einen anderen (auch linux, aber an sich ja egal) zu > transferieren. ich weiss, dass man die datenbank erst dumpen koennte > und dann auf dem anderen rechner wieder einlesen, aber geht es nicht > einfacher? Ups, ist das nicht eh schon sehr einfach? mysqldump --opt -hquellrechner dbname | mysql -hzielrechner neudbname Und falls Du nicht beide Rechner zugleich on-line erreichen kannst, dann halt mit einer Zwischendatei: a) Am Quellrechner: mysqldump --opt dbname >tmpdatei.sql b) Die Datei "tmpdatei.sql" zum Zielrechner bringen (wie auch immer: FTP, HTTP-Upload, rcp, Mailanhang - hauptsache unverändert ...) c) Am Zielrechner: mysql neudbname <tmpdatei.sql Diese Methode funktioniert immer, auch wenn Deine MySQL-Server unter verschiedenen Betriebssystemen laufen würden (ich weiß, bei Dir ist es eh jeweils Linux). Sie funktioniert sogar oft mit anderen DBMS zusammen, da in "tmpdatei.sql" normale SQL-Anweisungen stehen, die evtl. nur ein wenig angepaßt werden müssen - aber zumindest ist es kein Binärformat. Die von MySQL intern zur Speicherung der Tabellen benutzten ISAM-Dateien (*.ISD, *.ISM, *.frm im Datenbankverzeichnis) können leider auf verschiedenen Betriebssystemen unterschiedlich sein, können dann also _nicht_ einfach kopiert werden. (Ab V3.23.x gibt's alternativ auch das neue MYISAM-Format, das binärkompatibel und damit immer austauschbar ist). Wenn Du Datenbanken zwischen MySQL-Servern austauschen willst, die unter genau dem gleichen Betriebssystem laufen, kannst Du auch direkt die DB-Dateien aus MySQLs Datenbankverzeichnis kopieren (*.ISD, *.ISM, *.frm). Da MySQL teilweise Datenänderungen auch im Speicher hält (caching) und nicht sofort in die Tabellendateien schreibt, muß man vor dem Kopieren ein wenig auf die Datenkonsistenz achten: - Am einfachsten ist es, wenn man den DB-Server mysqld herunterfährt und dann erst kopiert. Auf der Zielseite genauso: runterfahren, neue Tabellen einkopieren, neu starten. - Wenn die DB-Server aber weiterlaufen sollen, dann so. Am Quellrechner: LOCK TABLES dietabelle READ; /* damit nicht andere Threads Datenänderungen machen können, während wir kopieren */ FLUSH TABLES; /* damit MySQL den aktuellen Zustand der Tabelle auch sicher in die Tabellen-Dateien geschrieben hat */ /* Jetzt die Tabellen-Dateien kopieren. */ UNLOCK TABLES; Am Zielrechner: LOCK TABLES dietabelle WRITE; /* damit andere Threads nicht lesen können, während wir neue Daten einkopieren */ FLUSH TABLES; /* damit MySQL nichts mehr im Speicher hält und später verwirrt wäre */ /* Jetzt die neuen Tabellen-Dateien einkopieren. */ FLUSH TABLES; /* damit MySQL die neuen Tabellen erkennt */ UNLOCK TABLES; Genauso geht man übrigens auch vor, wenn man Tabellen-Dateien während des laufenden Betriebs mit 'isamchk' prüfen (dann wie beim Quell- rechner) oder reparieren (dann wie beim Zielrechner) will. Letzte Alternative zum Tabellenaustausch, die mir einfällt, ist mit Hilfe von Exportdateien, die je Zeile einen Datenensatz enthalten, dessen Datenfelder z.B. durch Tabs oder Kommata voneinander getrennt sind (sog. Comma Seperated Values, CSV). Erzeugt wird sowas in MySQL mit: SELECT ... INTO OUTFILE ... Eingelesen mit: LOAD DATA INFILE ... Siehe Handbuch. Diese Methode ist schneller als ein Dump, allerdings muß man sich auf der Zielseite selbst um das erzeugen der richtigen Tabellenstruktur kümmern. Ciao, Martin PS: Ich persönlich finde es nicht gut, daß Du als "Der Compilierer" anonym postest, daß Du die nervige Nur-Kleinschreibung verwendest, daß Du eine protzige Riesen-Signature verwendest. Aber mache sich jeder nach eigener Lust und Laune unbeliebt. Wäre jeder Listen- artikel nicht auch zugleich für alle anderen Listenmitglieder bestimmt, bekämst Du so von _mir_ keine Antworten. _Meine_ Meinung. -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://home.pages.de/~ramsch/ > PGP KeyID=0xE8EF4F75 FiPr=52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7 --- *** Abmelden von dieser Mailingliste funktioniert per E-Mail *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive