Mysql
如果存在未包含在 mysqldump 中,則刪除過程
我只使用以下命令轉儲我的儲存過程:
mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt databasename -u username -p > outputfile.sql
但生成的轉儲文件在每個過程聲明之前不包含 DROP PROCEDURE IF EXISTS。
如何將刪除查詢添加到我的轉儲中?
謝謝你。
我用以下內容轉儲了我的儲存過程
C:\>mysqldump -u... -p... -n -d --routines --triggers --all-databases > Z:\stuff.sql
這是包含 DROP PROCEDURE 的程序之一:
-- -- 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 或更高版本時才會執行此命令。
如果您將這些 mysqldump 載入到早期版本中,這些 SQL 指令可以為您提供保護。這些指令允許完全接受某些命令。請不要刪除它們。
但是,如果您只使用 MySQL 5.0+ 併計劃單獨轉儲儲存過程,則可以使用 Perl 或 awk 剝離它們。我個人會離開他們。