调试输出


0

我试图加速导入一个包含完整.sql文件的文件夹的大型数据集

ls -rS *.sql | parallel -j16 mysql -uusername -ppassword dbname "<"

运行后不久,我收到一个错误:

ERROR 1146 (42S02) at line 65: Table 'dbname.some_table' doesn't exist
ERROR 1146 (42S02) at line 69: Table 'dbname.some_table_other' doesn't exist

是否有一种简单的方法来修改此命令行arg以找出生成此错误的文件?

我已经尝试过在所有文件的第65-69行运行sed的脚本,但是有太多的结果要知道。一旦我确定哪个sql生成了错误,我就可以删除它并重新导入它。

解决:用过

ls -rS *.sql | xargs grep -i "dbname.some_table" | less

追溯过早被调用的地方


grep在您的网站目录上查找简单的内容dbname.some_table
马特克拉克

不幸的是,它在很多文件中。文件的大小很多。(这就是为什么我试图在文件的特定行上使用sed脚本)
Justin

Answers:


1

尝试在Web数据目录中运行此命令:

find . -name "*.php" -print | xargs grep -i "dbname.some_table"

这将以递归方式递归扫描所有子目录和loof文件.php,然后打印出包含指定文本的任何行grep


它确实显示了文件,但第一个结果是创建表本身的结果 - 而不是引用它的文件产生错误。(我将“ .php”替换为“ .sql”fyi)
Justin

编辑我的回答。尝试添加-i交换机,并找到在线65或发生这种情况的任何文件69。另外,请确保检查拼写,小案例错误是大错误。如果这不适合你,我道歉,这就是我的建议:[
Matt Clark

你是否碰巧知道是否有一种方法让它按照'ls -rS * .sql'生成的顺序进行处理而不是'find'?我想如果我能做到这一点,我就能找到被引用的地方。
Justin 2013年

啊,我刚刚更换它......并且认为我发现它使用了:ls -rS * .sql | xargs grep -i“dbname.some_table”| 更少
Justin

0

使用--tag:

ls -rS *.sql | parallel --tag -j16 sql mysql://username:password@/dbname "<"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.