Mario: Problem bei Dump Export bzw. Import

mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
--

Hallo,

Ich muss ein MySql-Schema (schemaX) in die gleiche DB aber ein anderes Schema (schemaY) übertragen. Export verläuft unproblematisch. Beim Import gibt es ein Problem.

--
ERROR 1044 (42000) at line 22: Access denied for user 'schemaY'@'%' to database 'schemaX'
--

(User und DB-Schema heissen gleich)

Grund ist auch klar. Im Dump steht:

--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ schemaX /*!40100 DEFAULT CHARACTER SET utf8 */
--

Die Commands:
--
mysqldump --user=$MYSQL_SOURCE_USER --password=$MYSQL_SOURCE_PASSWORD --databases $MYSQL_SOURCE_SCHEMA > $TMPFILE
mysql --verbose --user=$MYSQL_DESTINATION_USER --password=$MYSQL_DESTINATION_PASSWORD $MYSQL_DESTINATION_SCHEMA < $TMPFILE
--

Jetzt die Frage: Muss man beim Dump erstellen vermeiden, dass ein Schema angegeben wird? Oder kann man beim einspielen etwas ändern?

Danke für die Hilfe!

  1. Hi!

    Ich muss ein MySql-Schema (schemaX) in die gleiche DB aber ein anderes Schema (schemaY) übertragen. Export verläuft unproblematisch. Beim Import gibt es ein Problem.

    Bei MySQL spricht man üblicherweise von Datenbank, nicht von Schema, aber egal. "in die gleiche DB aber ein anderes Schema" wäre auch ein Widerspruch in sich. "DB" hätte wohl DBMS oder Server heißen solle, aber auch das ist nicht so wichtig.

    mysqldump --user=$MYSQL_SOURCE_USER --password=$MYSQL_SOURCE_PASSWORD --databases $MYSQL_SOURCE_SCHEMA > $TMPFILE
    mysql --verbose --user=$MYSQL_DESTINATION_USER --password=$MYSQL_DESTINATION_PASSWORD $MYSQL_DESTINATION_SCHEMA < $TMPFILE
    Jetzt die Frage: Muss man beim Dump erstellen vermeiden, dass ein Schema angegeben wird? Oder kann man beim einspielen etwas ändern?

    Wenn die Datenbank/Schema schon erstellt ist, solltest du dem mysqldump abgewöhnen, ein CREATE-Statement zu erzeugen (no-create-db) oder ein DROP-Statement einfügen lassen (add-drop-database), wenn das vorhandene erstmal entsorgt werden soll. Beim Aufruf von mysql musst du auch keine Datenbank/Schema angeben, wenn diese noch nicht da ist.

    Lo!

    1. Hallo,

      danke für die Erklärungen!

      Wenn die Datenbank/Schema schon erstellt ist, solltest du dem mysqldump abgewöhnen, ein CREATE-Statement zu erzeugen (no-create-db) oder ein DROP-Statement einfügen lassen (add-drop-database), wenn das vorhandene erstmal entsorgt werden soll. Beim Aufruf von mysql musst du auch keine Datenbank/Schema angeben, wenn diese noch nicht da ist.

      OK, das funktioniert. Jetzt steht nur noch USE 'schemaX' in der sql-Datei, was die selben Probleme verursacht :(

      Noch einen Tipp? Danke!

      1. Moin!

        Noch einen Tipp? Danke!

        Hier gehts weiter.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

    2. Moin!

      Beim Aufruf von mysql musst du auch keine Datenbank/Schema angeben, wenn diese noch nicht da ist.

      Die Fehlermeldung zeigt, dass es ein Problem mit den Benutzerrechten gibt. Wenn er es so macht (Datenbank neu anlgen) wird das Problem wieder auftreten, es sei denn $MYSQL_DESTINATION_USER hat das Recht neue Datenbanken anzulegen. Mit $MYSQL_DESTINATION_USER='root' mag das passen. Ansonsten muss die Datenbank an sich existieren und $MYSQL_DESTINATION_USER muss das Recht haben neue Tabellen anzulegen, Tabellen zu löschen etc.

      Die Fehlermeldung besagt aber:

      ERROR 1044 (42000) at line 22: Access denied for user 'schemaY'@'%' to database 'schemaX'

      besagt aber, er hat nicht einmal Zugriff auf die Datenbank 'schemaX'.

      Sollte dort nicht vielleicht auch ein schemaX als Username übergeben werden? $MYSQL_DESTINATION_USER='schemaX'

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

      1. Hi!

        Beim Aufruf von mysql musst du auch keine Datenbank/Schema angeben, wenn diese noch nicht da ist.
        Die Fehlermeldung zeigt, dass es ein Problem mit den Benutzerrechten gibt. Wenn er es so macht (Datenbank neu anlgen) wird das Problem wieder auftreten, es sei denn $MYSQL_DESTINATION_USER hat das Recht neue Datenbanken anzulegen.

        Stimmt, jetzt wo du es sagst ... Datenbanken anlegen sollte der Stino-User nicht unbedingt können. Dumpen und Restoren sind ja eigentlich auch Administratoren-Aufgaben, also was für den root oder einen Untertanen mit ausreichenden Rechten.

        Mit $MYSQL_DESTINATION_USER='root' mag das passen. Ansonsten muss die Datenbank an sich existieren und $MYSQL_DESTINATION_USER muss das Recht haben neue Tabellen anzulegen, Tabellen zu löschen etc.

        Auch das.

        Die Fehlermeldung besagt aber:
        ERROR 1044 (42000) at line 22: Access denied for user 'schemaY'@'%' to database 'schemaX'
        besagt aber, er hat nicht einmal Zugriff auf die Datenbank 'schemaX'.
        Sollte dort nicht vielleicht auch ein schemaX als Username übergeben werden? $MYSQL_DESTINATION_USER='schemaX'

        Er will ja X gar nicht anlegen, sondern Y. Dazu muss das Create-X-Statement verschwinden oder in Y umgeschrieben werden (so er DBs anlegen darf und/oder Y nicht anderweitig angelegt wurde).

        Lo!

        1. Moin!

          Er will ja X gar nicht anlegen, sondern Y. Dazu muss das Create-X-Statement verschwinden oder in Y umgeschrieben werden (so er DBs anlegen darf und/oder Y nicht anderweitig angelegt wurde).

          "Rum wie num" - er hat vor allem ein Rechte-Problem. Siehe auch seine weitere Beschreibung.

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

          1. Hi!

            Er will ja X gar nicht anlegen, sondern Y. Dazu muss das Create-X-Statement verschwinden oder in Y umgeschrieben werden (so er DBs anlegen darf und/oder Y nicht anderweitig angelegt wurde).
            "Rum wie num" - er hat vor allem ein Rechte-Problem. Siehe auch seine weitere Beschreibung.

            Er exportiert X und will mit User Y die DB Y anlegen, aber im Dump steht was von Create X. Das ist eigentlich kein Rechteproblem sondern eins der richtigen Vorgehensweise. Create-X darf nicht im Dump enthalten sein. Die Y-Rechte sind ansonsten vermutlich korrekt.

            Lo!

            1. Create-X darf nicht im Dump enthalten sein. Die Y-Rechte sind ansonsten vermutlich korrekt.

              Das sehe ich auch so. Wie gesagt, die CREATE-Anweisung ist mit dem Flag verschwunden, aber es steht immer noch use 'schemaX' drin. Sollte aber entweder gar nichts (wenn das geht) oder use 'schemaY' drinstehen!?

              1. Hi!

                Create-X darf nicht im Dump enthalten sein. Die Y-Rechte sind ansonsten vermutlich korrekt.
                Das sehe ich auch so. Wie gesagt, die CREATE-Anweisung ist mit dem Flag verschwunden, aber es steht immer noch use 'schemaX' drin. Sollte aber entweder gar nichts (wenn das geht) oder use 'schemaY' drinstehen!?

                Dazu hab ich keinen Schalter in der verlinkten Dokumentation von mysqldump gefunden. Wird vermutlich darauf hinauslaufen, dass du diese Zeile händisch oder mit einem Unix-Tool rauswerfen musst.

                Lo!

                1. Dazu hab ich keinen Schalter in der verlinkten Dokumentation von mysqldump gefunden. Wird vermutlich darauf hinauslaufen, dass du diese Zeile händisch oder mit einem Unix-Tool rauswerfen musst.

                  Schade. Aber Danke für die Hilfe! :)