Я сбросил свои хранимые процедуры с помощью следующего
C:\>mysqldump -u... -p... -n -d --routines --triggers --all-databases > Z:\stuff.sql
Вот одна из процедур с включенной процедурой DROP:
--
-- 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 */ ;
Когда вы использовали --skip-opt, именно это и вызвало его, потому что --opt включает в себя --create-options, а DROP PROCEDURE считается специфичным для MySQL.
-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 отменяет --create-options и, таким образом, удаляет DROP PROCEDURE.
Тайна разгадана !!!
Ответ на бонусный вопрос
Это не комментарии; это директивы MySQL. Всякий раз, когда MySQL запускает Команду, он ищет эти директивы в комментариях
Число 50003 указывает, что эта команда будет выполняться тогда и только тогда, когда версия MySQL 5.0.3 или выше.
Вот еще один пример из 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 */;
Число 40101 указывает, что эта команда будет выполняться тогда и только тогда, когда версия MySQL будет 4.1.1 или выше.
Эти директивы SQL существуют для вашей защиты, если вы загружаете эти mysqldumps в более ранние версии. Эти директивы допускают полное принятие определенных команд. Пожалуйста, не удаляйте их.
Однако, если вы работаете только с MySQL 5.0+ и планируете выгружать хранимые процедуры отдельно, вы можете удалить их с помощью Perl или awk. Лично я бы их оставил.
LoadMyData
() ... END * / ;;На самом деле, кажется, что необходимая опция для добавления DROP PROCEDURE в вывод mysqldump (по крайней мере, в mysqldump Ver 10.13 Distrib 5.6.21-70.1, для debian-linux-gnu (x86_64))
--add-drop-table
:источник