Dejé mis procedimientos almacenados con lo siguiente
C:\>mysqldump -u... -p... -n -d --routines --triggers --all-databases > Z:\stuff.sql
Aquí hay uno de los procedimientos con el PROCEDIMIENTO DE GOTA incluido:
--
-- 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 */ ;
Cuando usó --skip-opt, eso es lo que lo causó porque --opt incluye --create-options y DROP PROCEDURE se considera específico de 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 deshacería --create-options y así eliminaría el PROCEDIMIENTO DE GOTA.
Misterio resuelto !!!
Respuesta a la pregunta adicional
Esos no son comentarios; Esas son las directivas de MySQL. Cada vez que MySQL ejecuta un comando, busca estas directivas incluidas en Comentarios
El número 50003 indica que este comando se ejecutará si y solo si la versión de MySQL es 5.0.3 o superior.
Aquí hay otro ejemplo de un 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 */;
El número 40101 indica que este comando se ejecutará si y solo si la versión de MySQL es 4.1.1 o superior.
Estas directivas SQL están ahí para su protección si carga estos mysqldumps en versiones anteriores. Estas directivas permiten la plena aceptación de ciertos comandos. Por favor no los elimines.
Sin embargo, si solo trabaja con MySQL 5.0+ y planea volcar sus procedimientos almacenados por separado, puede eliminarlos usando Perl o awk. Personalmente los dejaría ser.
LoadMyData
() ... END * / ;;En realidad, parece que la opción necesaria para agregar PROCEDIMIENTO DE GOTA en la salida de mysqldump (al menos en mysqldump Ver 10.13 Distrib 5.6.21-70.1, para debian-linux-gnu (x86_64)) es
--add-drop-table
:fuente