Announcement

Collapse
No announcement yet.

Script ausführen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Script ausführen

    Hallo,
    es gibt immer noch Probleme bei der Umstellung auf MySQL 8. Wir ziehen nachts auf dem Server einen Dump der gesamten DB unter Debian und MySQL 5.6. Es wird eine Script-Datei erzeugt, die auf einem lokalen Server (Localhost) unter 5.6 problemlos ausgeführt werden konnte. MySQL 8 auf Localhost bricht mittendrin (nach den ersten kleinen Tabellen und vor einer grösseren mit 6000 Datensätzen) ab, und bringt auch keine Fehlermeldung. Der Vorgang wird in einer Batch angestosseen:

    cd C:\Program Files\MySQL\MySQL Server 8.0\bin
    mysql -v -hlocalhost -uroot -pxxxxxxxxx --default-character-set=latin1 < c:\temp\SQL\script.sql
    echo Die Importierung wurde erfolgreich abgeschlossen


    Das Script enthält keine Besonderheiten:

    -- MySQL dump 10.13 Distrib 5.6.33, for debian-linux-gnu (x86_64)
    --
    -- Host: 172.16.10.2 Database: praxis1
    -- ------------------------------------------------------
    -- Server version 5.6.33-0ubuntu0.14.04.1-log

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

    --
    -- Current Database: `praxis1`
    --

    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `praxis1` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_german2_ci */;

    USE `praxis1`;
    ...


    Könnt ihr mir sagen, wie ich die Ursache finden kann? Wird ein Log geschrieben (ich habe an den ursprünglichen Einstellungen nichts geändert)? Wo kann ich dieses finden und lesen?

    Danke für eure Hilfe.
    Gruß Norbert

  • #2
    Ich verwende aus Prinzip kein mySQL, also kann ich nur Anhaltspunkte geben.
    - Deine Konfiguration definiert, wo und was gelogged wird.
    - Das sollte selbst unter Windows nicht anders sein

    Schreiben von Ausgabe und Fehler in Log Datei:
    mysql <script.sql 1>> script.output 2>&1

    Gruß, defo

    Comment


    • #3
      Vielen Dank!
      Tut mir leid, aber damit kann ich nichts anfangen :-(
      Muss ich das in der Konsole eingeben? Bevor ich das Ausführen des Scripts starte? Aber das starte ich doch im Cmd bzw. als Batch?

      Comment


      • #4
        mysql – die SQL-Shell

        http://www.selfphp.de/praxisbuch/pra...te=51&group=17

        Christian

        Comment


        • #5
          Originally posted by strzata View Post
          Tut mir leid, aber damit kann ich nichts anfangen :-(
          Muss ich das in der Konsole eingeben? ..
          Also Du hast einen solchen Aufruf doch selber gepostet in Deiner Eröffnung:
          cd C:\Program Files\MySQL\MySQL Server 8.0\bin
          mysql -v -hlocalhost -uroot -pxxxxxxxxx --default-character-set=latin1 < c:\temp\SQL\script.sql
          echo Die Importierung wurde erfolgreich abgeschlossen


          Der Aufruf des Scripts selbst erhält als Dreingabe die Anweisung, alle Ausgaben in eine Datei zu schreiben bzw. umzulenken.
          Du müsstest zwischen 'mysql' und 'script.sql' nur Deine Parameter nehmen und mit meinem Beispiel ergänzen.
          Gruß, defo

          Comment


          • #6
            Wäre es so richtig:

            mysql -v -hlocalhost -uroot -pxxxxxxxxx --default-character-set=latin1 < c:\temp\SQL\script.sql 1>> script.output 2>&1

            Da kommt die Fehlermeldung "Zugriff verweigert"

            Comment


            • #7
              nur geraten:
              Bezieht sich auf nicht schreibbare Datei script.output. Gib einen vollständigen Pfad an wie beim Script.sql, sodass im Ergebnis die Datei mit Schreibberechtigung zugegriffen werden kann.
              Nimm notfalls ein CMD, das als Administrator gestartet wurde.
              Gruß, defo

              Comment


              • #8
                Würde sagen, es ist eher localhost
                mysql -v -hlocalhost -
                Christian

                Comment


                • #9
                  Richtig geraten! Funktioniert. Vielen vielen Dank! Ich sitz schon seit gestern an dem Problem.
                  Und nun hab ich auch den Fehler:

                  /*!50003 SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE _SUBSTITUTION' */
                  --------------
                  ERROR 1231 (42000) at line 210: Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'


                  Leider hab ich keinen Einfluss darauf, wie der Linux-Server nachts den Dump schreibt. Wenn ich die Zeile mit dem SET sql_mode aus dem Script rausnehme, läuft auch meine Batch durch. Da das aber täglich von meinen Mitarbeiterinnen durchgeführt werden muss (wird auf einen Laptop gezogen, der mit zu den Hausbesuchen genommen wird), kann das so nicht bleiben. Bevor ich den Server-Admin ranbekomme (wir können an dem Linux nichts ändern), können ein paar Wochen vergehen. Lässt sich vielleicht in der my.ini etwas einstellen, dass der Fehler nicht auftritt? Unter MySQL 5.6 lief es in den letzten 10 Jahren ohne Probleme ...

                  Comment


                  • #10
                    Also wäre das vorläufige Fazit, das Skript enthält doch Besonderheiten.
                    Wer generiert das?
                    Wieso setzt Du Produktivsysteme ein, wo es Wochen für einen (administrativen) Zugriff braucht?
                    Gruß, defo

                    Comment


                    • #11
                      Ja, schimpf nur. Bitte glaub mir, meine Kollegen, die Medistar, metatixx und andere Software in ihrer Praxis verwenden, warten bei einem Fehler (und das fast immer nach jedem Update) auch oft sehr lange, bis sich da etwas tut. Ich habe mein eigenes PVS geschrieben, aber bin immer noch mit dem Linux-Server über Kreuz. Könnte das nur vermeiden, wenn ich auf SQL-Server umsteigen würde. Das könnte ich eventuell selbst warten.

                      Danke nochmal für eure Zeit und eure uneigennützige Hilfe. Und das zum Sonntag! Aber wenn ihr noch eine Lösung finden würdet, dass das Script nicht abgebrochen würde, sondern den Fehler überspringt, wäre alles gerettet.

                      Viele Grüße
                      Norbert

                      Comment


                      • #12
                        Warum nicht das Batchfile vor dem einspielen filtern?
                        Programm schreiben
                        - Batchfile einlesen
                        - filtern
                        - an mysql zum einspielen übergeben
                        Christian

                        Comment


                        • #13
                          Warum nicht das Batchfile vor dem einspielen filtern?
                          Darüber könnte man nachdenken. Würde es mit Vb.Net machen. Ein Replace wird aber wohl nicht klappen, da das Script-File über 300 MB groß ist. Ich wüsste jetzt auch nicht, ob ein IndexOf geeignet wäre. In Navicat (ähnlich der Workbench) kann man ein Script einlesen und anhaken "trotz Fehler fortfahren". Also muss es eine solche Einstellung in MySQL auch geben. Ich gebe die Suche noch nicht auf.

                          Comment


                          • #14
                            Das geht auch mit Consolenkommandos in der Batchdatei
                            Techink, egal welche Sprache:
                            Datei öffnen
                            Scheife
                            Zeile lesen
                            ggf. filtern, replace
                            Zeile in neue Datei wegschreiben
                            Schleifenende
                            Dateien schließen
                            ggf. Datei löschen oder umbenennen
                            Christian

                            Comment


                            • #15


                              Das kann ich nicht! Staune immer wieder und hab die grösste Hochachtung davor, wie jemand solch mitunter kryptische Kommandos zusammenbaut. Die haben sich mir noch nie erschlossen. Schüttelst Du sowas aus dem Ärmel?

                              Comment

                              Working...
                              X