Wie exportiere ich eine MySQL-Datenbank mit Triggern und Prozeduren?


82

Wie erstelle ich einen MySQL-Datenbankspeicherauszug ( .sqlDatei) mit all seinen Triggern und Prozeduren?


Fügen Sie einfach die Option -R im Befehl mysqldump hinzu.
Deepanshu Jain

Antworten:


120

mysqldumpSichert standardmäßig alle Trigger, jedoch NICHT die gespeicherten Prozeduren / Funktionen . Es gibt 2 mysqldump-Parameter, die dieses Verhalten steuern:

  • --routines - Standardmäßig FALSE
  • --triggers - Standardmäßig WAHR

Fügen Sie im mysqldumpBefehl Folgendes hinzu --routines:

mysqldump <other mysqldump options> --routines > outputfile.sql

Informationen zu mysqldump-Argumenten finden Sie in der MySQL-Dokumentation .


Ich habe MySQL "5.1.48-Community" Ich führe "mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;" aber es gibt Fehler und Fehler ist "FEHLER 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax, die in der Nähe von 'mysql dump --routines --no verwendet werden kann -create-info --no-data --no-create-db --skip-opt> dum 'in Zeile 1 ". Wie man es löst? -
Yugal

Fügen Sie dem Befehl "-p -uusername dbname" hinzu, und Sie benötigen das ";" Zeichen am Ende
Haim Evgi

1
Denken Sie auch daran, dass Sie mysqldump an der Shell-Eingabeaufforderung ausführen sollten, nicht im MySQL-Befehlszeilenclient oder in phpMyAdmin oder einem anderen Abfragetool.
Bill Karwin

@HaimEvgi, warum sagst du -routinesstatt --routines?
Pacerier

--routinesFunktioniert jedoch nur, wenn der Benutzer über ausreichende Zugriffsrechte für die mysql.procTabelle verfügt. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Rocki

20

Es mag für erfahrene Benutzer von MYSQL offensichtlich sein, aber ich habe einige Zeit damit verschwendet, herauszufinden, dass der Standardwert keine Funktionen exportieren würde. Deshalb wollte ich hier erwähnen, dass --routines param auf true gesetzt werden muss, damit es funktioniert.

mysqldump --routines=true -u <user> my_database > my_database.sql

1
Sie müssen --routines = true nicht verwenden. Sprocs werden standardmäßig NICHT ausgegeben. Sie müssen lediglich --routines gemäß dem Beispiel in die akzeptierte Antwort aufnehmen.
Gview

6

Ich habe das folgende Skript erstellt und es hat bei mir einwandfrei funktioniert.

#! /bin/sh
cd $(dirname $0)
DB=$1
DBUSER=$2
DBPASSWD=$3
FILE=$DB-$(date +%F).sql
mysqldump --routines "--user=${DBUSER}"  --password=$DBPASSWD $DB > $PWD/$FILE
gzip $FILE
echo Created $PWD/$FILE*

und Sie rufen das Skript mit Befehlszeilenargumenten auf.

backupdb.sh my_db dev_user dev_password

Hallo, in Zeile 7, warum ist die Variable DBUSER zwischen "" und die andere nicht?
Rafaelphp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.