DISCLAIMER: Ich bin kein Ruby-on-Rails-Programmierer
Streng genommen gibt es in MySQL zwei Möglichkeiten, Stored Procedures (SP) und Stored Functions (SF) zu extrahieren.
Beachten Sie, dass mysql.proc und information_schema.routines das Gehäuse auf der Festplatte und im Speicher für SPs bereitstellen. Dennoch gibt es 2 SQL-Anweisungen, um sie abzurufen: ERSTELLUNGSVORGANG ANZEIGEN y FUNKTION "ERSTELLEN" ANZEIGEN .
Die erste Möglichkeit besteht darin, alle SPs und SFs mit mysql.proc zu sammeln und sie in SQL-Anweisungen umzuwandeln, die sie offenlegen.
Beispiel: Ich habe 6 SPs und 2 SFs in meiner Testdatenbank. Im Folgenden wird beschrieben, wie ich SQL für alle 8 Routinen generiere:
mysql> SELECT CONCAT('SHOW CREATE ',type,' `',db,'`.`',name,'`\\G') SQLStatements FROM mysql.proc;
+-----------------------------------------------------+
| SQLStatements |
+-----------------------------------------------------+
| SHOW CREATE PROCEDURE `test`.`CreateSampleTable`\G |
| SHOW CREATE PROCEDURE `test`.`CreateSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`GetMissingIntegers`\G |
| SHOW CREATE FUNCTION `test`.`GetTestTableCounts`\G |
| SHOW CREATE PROCEDURE `test`.`ImportWeeklyBatch`\G |
| SHOW CREATE FUNCTION `test`.`InsertName`\G |
| SHOW CREATE PROCEDURE `test`.`LoadSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`MigrateColumn`\G |
+-----------------------------------------------------+
8 rows in set (0.00 sec)
Sie können die einzelnen gespeicherten Prozeduren und Funktionen durchgehen und den erforderlichen Code sammeln.
Auslöser müssen separat gesammelt werden.
In MySQL 5.x können Sie mit dieser Abfrage Auslöser sammeln:
mysql> SELECT CONCAT('SHOW CREATE TRIGGER `',trigger_schema,'`.`',trigger_name,'`\\G') SQLStatements FROM information_schema.triggers;
+--------------------------------------------------+
| SQLStatements |
+--------------------------------------------------+
| SHOW CREATE TRIGGER `test`.`AddPermTempKey`\G |
| SHOW CREATE TRIGGER `test`.`DeletePermTempKey`\G |
+--------------------------------------------------+
oder um Zeit zu sparen, UNION die beiden SQL-Anweisungen
mysql> SELECT CONCAT('SHOW CREATE ',type,' `',db,'`.`',name,'`\\G') SQLStatements FROM mysql.proc UNION SELECT CONCAT('SHOW CREATE TRIGGER `',trigger_schema,'`.`',trigger_name,'`\\G') SQLStatements FROM information_schema.triggers;
+-----------------------------------------------------+
| SQLStatements |
+-----------------------------------------------------+
| SHOW CREATE PROCEDURE `test`.`CreateSampleTable`\G |
| SHOW CREATE PROCEDURE `test`.`CreateSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`GetMissingIntegers`\G |
| SHOW CREATE FUNCTION `test`.`GetTestTableCounts`\G |
| SHOW CREATE PROCEDURE `test`.`ImportWeeklyBatch`\G |
| SHOW CREATE FUNCTION `test`.`InsertName`\G |
| SHOW CREATE PROCEDURE `test`.`LoadSampleTables`\G |
| SHOW CREATE PROCEDURE `test`.`MigrateColumn`\G |
| SHOW CREATE TRIGGER `test`.`AddPermTempKey`\G |
| SHOW CREATE TRIGGER `test`.`DeletePermTempKey`\G |
+-----------------------------------------------------+
10 rows in set (0.07 sec)
Der zweite Weg ist der bevorzugte Weg für DBAs, die mysqldump verwenden.
Dadurch werden alle Tabellenstrukturen, SPs, SFs und Trigger in einer einzigen Datei gesammelt.
mysqldump -h... -u... -p... --no-data --routines --triggers --all-databases > MySQLSchema.sql
Dies macht dasselbe, aber ohne den CREATE TABLE-Kram:
mysqldump -h... -u... -p... --no-data --no-create-info --routines --triggers --all-databases > MySQLSchema.sql
Probieren Sie diese aus!!!