Discussion:
phpmyadmin - mysql Datenbanken duplizieren
(zu alt für eine Antwort)
sebastian
2008-12-23 21:03:28 UTC
Permalink
Hallo & Guten Abend,

wenn ich unter phpmyadmin als root eingeloggt bin - wie dupliziere ich
eine Datenbank bzw. alle Tabellen und Inhalte - incl. der
Tabellenerstellung in der neuen Datenbank:

Ausgang - Datenbank "templates"

Ziel - Datenbank "test1"

sowas wie

Insert into 'test1' select * from 'templates'

funktioniert aber nicht :-/

danke

Sebastian
Sebastian Suchanek
2008-12-23 21:44:38 UTC
Permalink
Post by sebastian
Hallo & Guten Abend,
wenn ich unter phpmyadmin als root eingeloggt bin - wie dupliziere ich
eine Datenbank bzw. alle Tabellen und Inhalte - incl. der
Zur Duplizierung der Datenbank*struktur* ist mir kein einfacher Weg
bekannt. Aber wenn Du schon phpMyAdmin verwendest (Gruppenmantra!), dann
exportiere die Struktur, copy-und-paste sie in ein SQL-Eingabefeld und
ändere den Tabellennamen.
Post by sebastian
[...]
sowas wie
Insert into 'test1' select * from 'templates'
funktioniert aber nicht :-/
Sobald die Zieltabelle erstellt ist (s.o.), sollte

INSERT INTO 'test1' (SELECT * FROM 'templates')

sehr wohl funktionieren.


HTH,


Sebastian
Christian Kirsch
2008-12-24 08:24:33 UTC
Permalink
Post by Sebastian Suchanek
Post by sebastian
Hallo & Guten Abend,
wenn ich unter phpmyadmin als root eingeloggt bin - wie dupliziere ich
eine Datenbank bzw. alle Tabellen und Inhalte - incl. der
Zur Duplizierung der Datenbank*struktur* ist mir kein einfacher Weg
bekannt.
CREATE TABLE LIKE ...

für alle Tabellen. Die man wiederum via INFORMATION_SCHEMA erfragen
könnte. Das ganze allerdings wohl doch eher per Script.


Außerdem geht natürlich immer

mysqldump ... datenbank_alt | mysql ... datenbank_neu

Ohne Script. Ohne PHPMyDings.
Stefan+ (Stefan Froehlich)
2008-12-24 09:34:31 UTC
Permalink
Post by Christian Kirsch
Außerdem geht natürlich immer
mysqldump ... datenbank_alt | mysql ... datenbank_neu
Ohne Script. Ohne PHPMyDings.
Sofern man keine Views verwendet.

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Stefan - die paradiesischste Bezeichnung der erotischen Genussucht.</B
(Sloganizer)
Andreas Kretschmer
2008-12-24 12:11:49 UTC
Permalink
Post by Stefan+ (Stefan Froehlich)
Post by Christian Kirsch
Außerdem geht natürlich immer
mysqldump ... datenbank_alt | mysql ... datenbank_neu
Ohne Script. Ohne PHPMyDings.
Sofern man keine Views verwendet.
Wie jetzt, VIEWS (deren Definition) werden nicht gedumpt?



Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
Stefan+ (Stefan Froehlich)
2008-12-24 12:33:45 UTC
Permalink
Post by Andreas Kretschmer
Post by Stefan+ (Stefan Froehlich)
Post by Christian Kirsch
mysqldump ... datenbank_alt | mysql ... datenbank_neu
Ohne Script. Ohne PHPMyDings.
Sofern man keine Views verwendet.
Wie jetzt, VIEWS (deren Definition) werden nicht gedumpt?
Doch, aber (manuell vereinfacht, man verzeihe mir ggf. Tippfehler):

| $ mysqldump --no-data -p database_1
| [...]
| /*!50001 DROP TABLE IF EXISTS `v_1`*/;
| /*!50001 DROP VIEW IF EXISTS `v_1`*/;
| /*!50001 CREATE ALGORITHM=UNDEFINED */
| /*!50013 DEFINER=`sfroehli`@`localhost` SQL SECURITY DEFINER */
| /*!50001 VIEW `database_1`.`v_1` AS (select `database_2`.`table_1`.`column_1` AS `column_1`,`database_2`.`table_1`.`column_2` AS `column_2` FROM `database_2`.`table_1`) union (select `database_1`.`table_1`.`column_1` AS `column_1`,`database_1`.`table_1`.`column_2` AS `column_2` from `database_1`.`table_1`) */;
| /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
| [...]

Du hast also auch bei allen Referenzen auf die lokale Datenbank immer
den vollen Namen im Dump stehen. Viel Spass beim Importieren in die
andere Datenbank (mit sed kann man da natuerlich etwas tun, aber es
ist umstaendlich, fehleranfaellig und benoetigt mitunter reichlich Platz auf
der Platte).

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Der heisse Nachbar bekommt Stefan. Was tun Sie?
(Sloganizer)
Christian Kirsch
2008-12-24 14:03:23 UTC
Permalink
Post by Stefan+ (Stefan Froehlich)
Post by Christian Kirsch
Außerdem geht natürlich immer
mysqldump ... datenbank_alt | mysql ... datenbank_neu
Ohne Script. Ohne PHPMyDings.
Sofern man keine Views verwendet.
Man lernt doch nie aus. So was hätte ich allerdings lieber nicht gelernt ;-)
Stefan+ (Stefan Froehlich)
2008-12-24 21:14:36 UTC
Permalink
Post by Christian Kirsch
Post by Stefan+ (Stefan Froehlich)
Post by Christian Kirsch
mysqldump ... datenbank_alt | mysql ... datenbank_neu
Sofern man keine Views verwendet.
Man lernt doch nie aus. So was hätte ich allerdings lieber nicht gelernt ;-)
Immerhin brauchst Du es nicht auf die harte Tour lernen :-)

Ich empfinde das als echtes Manko (mal eben rasch eine produktive
Datenbank in die Testumgebung einspielen wird dadurch deutlich
komplexer), aber als ich das hier seinerzeit thematisiert hatte,
schien es nicht so, als ob das ausser mir jemand gross vermissen wuerde.

Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Scheu bleibt scheu: Stefan!
(Sloganizer)
Thomas Rachel
2008-12-24 05:36:19 UTC
Permalink
Post by sebastian
Insert into 'test1' select * from 'templates'
Richtig. Die ' gehören da ja auch nicht hin. Wenn, dann `...

Ansonsten sollte CREATE TABLE test1 SELECT * FROM templates tun. Dann
hast Du das Erstellen und Kopieren gleich mit abgedeckt.


Thomas
sebastian
2008-12-24 10:42:28 UTC
Permalink
Post by Thomas Rachel
Post by sebastian
Insert into 'test1' select * from 'templates'
Richtig. Die ' gehören da ja auch nicht hin. Wenn, dann `...
Ansonsten sollte CREATE TABLE test1 SELECT * FROM templates tun. Dann
hast Du das Erstellen und Kopieren gleich mit abgedeckt.
Thomas
geht viel einfacher: Als root in PhpMyAdmin einloggen und in der zu
kopierenden Datenbank im Bereich Operationen auswählen "kopieren nach" ;-)

ganz einfach - ganz leicht :-)
Christian Kirsch
2008-12-24 14:05:48 UTC
Permalink
Post by sebastian
Post by Thomas Rachel
Post by sebastian
Insert into 'test1' select * from 'templates'
Richtig. Die ' gehören da ja auch nicht hin. Wenn, dann `...
Ansonsten sollte CREATE TABLE test1 SELECT * FROM templates tun. Dann
hast Du das Erstellen und Kopieren gleich mit abgedeckt.
Thomas
geht viel einfacher: Als root in PhpMyAdmin einloggen und in der zu
kopierenden Datenbank im Bereich Operationen auswählen "kopieren nach" ;-)
ganz einfach - ganz leicht :-)
Genau. Und hat lauter Vorteile:

- Du weißt nicht, was passiert

- Du kannst das Ganze deshalb *ohne* PHPMyAdmin nicht machen

- Du musst damit leben, dass es bei großen Datenbanken/Tabellen zu
Timeouts kommt...
Thomas Mlynarczyk
2008-12-24 18:39:53 UTC
Permalink
Christian Kirsch schrieb:

[DB kopieren mit PhpMyAdmin]
Post by Christian Kirsch
- Du weißt nicht, was passiert
- Du kannst das Ganze deshalb *ohne* PHPMyAdmin nicht machen
Könntest Du das bitte genauer erläutern? Ohne den Quelltext studiert zu
haben, weiß ich doch bei *keiner* Anwendung, was da eigentlich genau
passiert -- ich kann nur das Ergebnis und evtl. Nebenwirkungen
konstatieren. Und wenn ich den anderen hier geposteten Vorschlägen
folge, kann ich doch offenbar sehr wohl eine DB auch ohne PhpMyAdmin
kopieren?
Post by Christian Kirsch
- Du musst damit leben, dass es bei großen Datenbanken/Tabellen zu
Timeouts kommt...
Das kann natürlich passieren. Aber wenn man weiß, wie groß "groß"
maximal sein darf und daß man weit darunter liegt... irgendwelche
Grenzen/Einschränkungen gibt es doch überall, oder?

Gruß,
Thomas, dem bzgl. des Mantras irgendwie noch die Erleuchtung fehlt
--
Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)
Christian Kirsch
2008-12-25 16:33:21 UTC
Permalink
Post by Thomas Mlynarczyk
[DB kopieren mit PhpMyAdmin]
Post by Christian Kirsch
- Du weißt nicht, was passiert
- Du kannst das Ganze deshalb *ohne* PHPMyAdmin nicht machen
Könntest Du das bitte genauer erläutern? Ohne den Quelltext studiert zu
haben, weiß ich doch bei *keiner* Anwendung, was da eigentlich genau
passiert -- ich kann nur das Ergebnis und evtl. Nebenwirkungen
konstatieren. Und wenn ich den anderen hier geposteten Vorschlägen
folge, kann ich doch offenbar sehr wohl eine DB auch ohne PhpMyAdmin
kopieren?
Ja, Du kannst das ohne PHPMyAdmin tun. Und m.E. sollte man das auch
zunächst. Ich halte nichts davon, $irgendwas einzusetzen, wenn man nicht
genau weiß, was $irgendwas tut.

PHPMyAdmin ist hier OT. On-topic hingegen sind die Tools, die zum
Lieferumfang von MySQL gehören (bspw. mysqldump und mysql). Auch bei
denen "weiß" man nicht, was sie wirklich tun. Aber man weiß, was sie tun
*sollen*, weil sie dokumentierte (SQL-)Befehle verarbeiten. Das ist
etwas anderes als ein obskures "Copy Database" in einer wie auch immer
gearteten GUI-Anwendung. Einfache Fragen: Kopiert das auch alle Stored
Procedures und Trigger? Mit den passenden Rechten (welche sind das in
dem Zusammenhang)? Wie sieht's mit Views aus?
Post by Thomas Mlynarczyk
Post by Christian Kirsch
- Du musst damit leben, dass es bei großen Datenbanken/Tabellen zu
Timeouts kommt...
Das kann natürlich passieren. Aber wenn man weiß, wie groß "groß"
maximal sein darf und daß man weit darunter liegt... irgendwelche
Grenzen/Einschränkungen gibt es doch überall, oder?
Eine große Mehrheit der PHPMyAdmin-Benutzer weiß weder, dass es
"irgendwelche" Einschränkungen gibt noch welcher Art diese sind und in
welchem Zusammenhang sie mit den eigenen Daten stehen (könnten). Die
stehen dann hier auf der Matte mit Fehlermeldungen wie "irgendwie sind
meine Daten nicht komplett angekommen" o.ä.
Post by Thomas Mlynarczyk
Gruß,
Thomas, dem bzgl. des Mantras irgendwie noch die Erleuchtung fehlt
Vielleicht hilft die Lektüre der Postings von vor 2, 3 Jahren, die zur
Entstehung des Mantras führten?
Thomas Mlynarczyk
2008-12-26 14:36:35 UTC
Permalink
Post by Christian Kirsch
PHPMyAdmin ist hier OT. On-topic hingegen sind die Tools, die zum
Lieferumfang von MySQL gehören (bspw. mysqldump und mysql). Auch bei
denen "weiß" man nicht, was sie wirklich tun. Aber man weiß, was sie tun
*sollen*, weil sie dokumentierte (SQL-)Befehle verarbeiten. Das ist
etwas anderes als ein obskures "Copy Database" in einer wie auch immer
gearteten GUI-Anwendung. Einfache Fragen: Kopiert das auch alle Stored
Procedures und Trigger? Mit den passenden Rechten (welche sind das in
dem Zusammenhang)? Wie sieht's mit Views aus?
Das sollte ja theoretisch in der Doku zu PHPMyAdmin stehen. Schließlich
"übersetzt" ja diese Software meinen Klick auf "Datenbank kopieren" in
eine Folge von SQL-Befehlen. Aber immerhin glaube ich, jetzt verstanden
zu haben, wieso PHPMyAdmin hier OT ist.
Post by Christian Kirsch
Eine große Mehrheit der PHPMyAdmin-Benutzer weiß weder, dass es
"irgendwelche" Einschränkungen gibt noch welcher Art diese sind und in
welchem Zusammenhang sie mit den eigenen Daten stehen (könnten).
Ist das Mantra demnach der elterlichen Mahnung an den fünfjährigen Sohn
vergleichbar, nicht mit Streichhölzern zu spielen?
Post by Christian Kirsch
Vielleicht hilft die Lektüre der Postings von vor 2, 3 Jahren, die zur
Entstehung des Mantras führten?
Ja, das würde mir sicher helfen, aber bei Google finde ich immer nur
Postings, in denen das (zu dem Zeitpunkt offenbar bereits bestehende)
Mantra erwähnt wird, nicht jedoch die eigentliche "Quelle".

Gruß,
Thomas
--
Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)
Loading...