event中有多餘的分號引起mysqldump備份匯入時報錯

psufnxk2000發表於2015-10-13
event中有多餘的分號引起mysqldump備份匯入時報錯
有一個匯入一直提示報錯,看起來應該是正常。
就對這個報錯進行檢視:
檢視到sql文字中的
DELIMITER ;;
/*!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  = utf8 */ ;;
/*!50003 SET character_set_results = utf8 */ ;;
/*!50003 SET collation_connection  = utf8_general_ci */ ;;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;;
/*!50003 SET sql_mode              = '' */ ;;
/*!50003 SET @saved_time_zone      = @@time_zone */ ;;
/*!50003 SET time_zone             = 'SYSTEM' */ ;;
/*!50106 CREATE*/ /*!50117 DEFINER=`aaa`@`%`*/ /*!50106 EVENT `bbb` ON SCHEDULE EVERY 1 DAY STARTS '2014-07-14 00:00:00' ON COMPLETION NOT PRESERVE ENABLE COMMENT '清理10前的操作日誌' DO DELETE FROM aaa_log WHERE datediff(now(),aaa_time)>10^M
; */ ;;  
是執行到這個地方報錯的。
就把這最後一個語句拿出來 執行:
mysql> DELIMITER ;;
mysql> /*!50106 CREATE*/ /*!50117 DEFINER=`aaa`@`%`*/ /*!50106 EVENT `bbb` ON SCHEDULE EVERY 1 DAY STARTS '2014-07-14 00:00:00' ON COMPLETION NOT PRESERVE ENABLE COMMENT '清理10前的操作日誌' DO DELETE FROM aaa_log WHERE datediff(now(),aaa_time)>10^M
    -> ; */ ;;
Query OK, 0 rows affected, 1 warning (0.00 sec)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*/' at line 1

看起來是執行了兩條語句:
mysql> show create event bbb \G
*************************** 1. row ***************************
               Event: bbb
            sql_mode:
           time_zone: SYSTEM
        Create Event: CREATE DEFINER=`aaa`@`%` EVENT `bbb` ON SCHEDULE EVERY 1 DAY STARTS '2014-07-14 00:00:00' ON COMPLETION NOT PRESERVE ENABLE COMMENT '清理10前的操作日誌' DO DELETE FROM aaa_log WHERE datediff(now(),aaa_time)>10^M
;
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)
事件是建立起來了,下面也報了個錯,所以匯入失敗了。
其實想跳過錯誤也是可以。 mysql 時加 -f即可
只是想明白這裡怎麼錯了。

在主庫上

mysql> show create event bbb \G
*************************** 1. row ***************************
               Event: clear_operation_log_schedule
            sql_mode:
           time_zone: SYSTEM
        Create Event: CREATE DEFINER=`aaa`@`%` EVENT `bbb` ON SCHEDULE EVERY 1 DAY STARTS '2014-07-14 00:00:00' ON COMPLETION NOT PRESERVE ENABLE COMMENT '清理10前的操作日誌' DO DELETE FROM aaa_log WHERE datediff(now(),aaa_time)>10
;
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)
這裡好像是多了一點 (上面紅色)
在語句中去掉,再次執行
mysql> DELIMITER ;;
mysql> /*!50106 CREATE*/ /*!50117 DEFINER=`aaa`@`%`*/ /*!50106 EVENT `bbb` ON SCHEDULE EVERY 1 DAY STARTS '2014-07-14 00:00:00' ON COMPLETION NOT PRESERVE ENABLE COMMENT '清理10前的操作日誌' DO DELETE FROM aaa_log WHERE datediff(now(),aaa_time)>10^M */ ;;
Query OK, 0 rows affected, 1 warning (0.00 sec)
這次可以了。
那就把語句中的 ; 去掉吧
看起來mysqldump備份event時, 最後還不能有 分號。

轉載請註明源出處 
QQ 273002188 歡迎一起學習 
QQ 群 236941212 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25099483/viewspace-1813849/,如需轉載,請註明出處,否則將追究法律責任。

相關文章