mysqldump忽略表不忽略视图

时间:2013-10-16 06:07:15

标签: mysql mysqldump

我有一个包含1000多个表的数据库,当我使用mysqldump导出它时,我使用 - ignore-table = 来摆脱我不想要的表,一切都输出正常,但是当导入mysql时,它表示在与我忽略的表对应的视图部分找不到表。

这是导致错误的sql部分:

/*!50001 DROP TABLE IF EXISTS `v_aaa`*/;
/*!50001 DROP VIEW IF EXISTS `v_aaa`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8 */;
/*!50001 SET character_set_results     = utf8 */;
/*!50001 SET collation_connection      = utf8_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`ebusiness`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `v_aaa` AS (select `tb1`.`field1` AS `mycode`,`tb1`.`field2` AS `myname`,`tb1`.`limit` AS `mylimit` from tb1) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

问题是tb1在我的忽略列表中,我在导入期间收到此错误:

ERROR 1146 (42S02) at line 63036: Table 'db.tb1' doesn't exist

使用以下方式转储数据库:

 mysqldump  --user=root --password=**** --host=***.***.***.*** --single-transaction --ignore-table=tb1 --ignore-table=tb2 --ignore-table=tb3 dbxx > somefile.sql

如果忽略该表以防止出现此错误,那么如何摆脱视图代码呢?

UPDATE:我可以循环进入view的内部information_schema来检查他们正在使用哪个表,如果视图表出现在忽略列表中,我们只需使用--ignore- table =忽略那个视图?使用bash脚本可能吗?

1 个答案:

答案 0 :(得分:1)

问题是您有一个引用您忽略的表的视图。当您尝试导入视图时,由于缺少表,MySQL发现视图不完整。

解决方案是在转储数据库时忽略该视图。