Ich habe meine gespeicherten Prozeduren wie folgt ausgegeben
C:\>mysqldump -u... -p... -n -d --routines --triggers --all-databases > Z:\stuff.sql
Hier ist eines der Verfahren mit dem DROP-VERFAHREN:
--
-- Dumping routines for database 'lovesh'
--
/*!50003 DROP PROCEDURE IF EXISTS `LoadMyData` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = cp850 */ ;
/*!50003 SET character_set_results = cp850 */ ;
/*!50003 SET collation_connection = cp850_general_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = '' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50020 DEFINER=`lwdba`@`127.0.0.1`*/ /*!50003 PROCEDURE `LoadMyData`()
DETERMINISTIC
BEGIN
DECLARE NDX INT;
SET NDX = 0;
WHILE NDX < 100 DO
INSERT INTO mydata (ti_time) VALUES (NOW() - INTERVAL CEILING(14400*RAND()) SECOND);
SET NDX = NDX + 1;
END WHILE;
END */;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
Wenn Sie --skip-opt verwendet haben, hat dies dazu geführt, dass --opt --create-options enthält und DROP PROCEDURE als MySQL-spezifisch gilt.
-a, --create-options
Include all MySQL specific create options.
(Defaults to on; use --skip-create-options to disable.)
--skip-opt Disable --opt. Disables --add-drop-table, --add-locks,
--create-options, --quick, --extended-insert,
--lock-tables, --set-charset, and --disable-keys.
--skip-opt würde --create-options rückgängig machen und damit DROP PROCEDURE entfernen.
Geheimnis gelüftet !!!
Antwort auf die Bonusfrage
Das sind keine Kommentare; Das sind MySQL-Anweisungen. Immer wenn MySQL einen Befehl ausführt, sucht es nach diesen Anweisungen, die in Kommentaren eingeschlossen sind
Die Nummer 50003 gibt an, dass dieser Befehl genau dann ausgeführt wird, wenn die Version von MySQL 5.0.3 oder höher ist.
Hier ist ein weiteres Beispiel aus einem mysqldump:
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `datas` (
`ID` int(2) DEFAULT NULL,
`CATEGORY` int(2) DEFAULT NULL,
`ORD` int(1) DEFAULT NULL
);
/*!40101 SET character_set_client = @saved_cs_client */;
Die Nummer 40101 gibt an, dass dieser Befehl genau dann ausgeführt wird, wenn die Version von MySQL 4.1.1 oder höher ist.
Diese SQL-Anweisungen dienen Ihrem Schutz, wenn Sie diese mysqldumps in frühere Versionen laden. Diese Anweisungen ermöglichen die vollständige Annahme bestimmter Befehle. Bitte entfernen Sie sie nicht.
Wenn Sie jedoch nur mit MySQL 5.0+ arbeiten und planen, Ihre gespeicherten Prozeduren separat zu sichern, können Sie sie mit Perl oder awk entfernen. Persönlich würde ich sie verlassen.
LoadMyData
() ... END * / ;;Tatsächlich scheint die notwendige Option zum Hinzufügen von DROP PROCEDURE in der mysqldump-Ausgabe (zumindest in mysqldump Ver 10.13 Distrib 5.6.21-70.1 für debian-linux-gnu (x86_64)) folgende zu sein
--add-drop-table
:quelle