我在共享的Web主机上有一个mysql数据库。有些桌子比较大,我们每晚的转储过程都被杀死了。所以我创建了一个脚本,用于查询数据库中的所有表名,并将它们单独转储,将它们连接成一个文件。
mysql -uusername -ppassword -hhostname dbname < <(echo 'SHOW TABLES') | xargs -I TableName sh -c 'nice -19 mysqldump --opt -uusername -ppassword -hhostname dbname TableName >> /path/to/dump.sql'
我现在遇到的问题是其中一个视图定义(据我所知,MySQL在其转储文件中有特殊的视图创建语句)导致错误
ERROR 1146 (42S02) at line 5182: Table 'dbname.vView' doesn't exist
我在转储文件中查找了第5182行,这是第一行,它开始创建视图:
/*!50001 DROP TABLE `vView`*/;
/*!50001 DROP VIEW IF EXISTS `vView`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
然而无论出于何种原因,转储文件中的其他视图都有
/*!50001 DROP TABLE IF EXISTS `vOtherView`*/;
他们创造好了。
在question之后,我在导入转储时尝试mysql -f
,但mysql仍然在错误上停止。
如何让转储文件具有格式正确的视图创建语句(在对转储文件进行一些后处理之外)?或者我怎么能让mysql继续前进呢?
答案 0 :(得分:1)
从不了解问题所在,但我的解决方法是首先使用--no-data
转储表定义,然后使用xargs分别使用--no-create-table
转储每个表的数据。