0

私は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

このエラーを防ぐためにテーブルが無視された場合、ビューコードも削除する方法はありますか?

更新:ビューのinside information_schemaにループして、使用しているテーブルを確認することは可能ですか?ビューのテーブルが無視リストにある場合は、 --ignore-table= を使用してそのビューを無視しますか? おそらくbashスクリプトを使用していますか?

4

1 に答える 1

1

問題は、無視したテーブルを参照するビューがあることです。ビューをインポートしようとすると、MySQL はテーブルが見つからないためにビューが不完全であることを検出します。

解決策は、データベースをダンプするときにビューも無視することです。

于 2013-10-17T14:30:47.130 に答える