Отладочный вывод

269
Justin

Я попытался ускорить импорт большого набора данных с папкой, полной файлов .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 

Есть ли простой способ изменить этот аргумент командной строки, чтобы узнать, какой файл генерирует эту ошибку?

Я попытался сделать скрипт, который запускает sed в строке 65-69 всех файлов, но результатов слишком много, чтобы знать. Как только я определю, какой sql сгенерировал ошибку, я могу удалить ее и повторно импортировать.

Решено: использовано

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

проследить, где он был назван слишком рано

0
Сделайте простой `grep` в вашем веб-каталоге, ища` dbname.some_table`. Matt Clark 11 лет назад 0
Это, к сожалению, в куче файлов ... и файлы имеют много гигабайт. (именно поэтому я попытался использовать сценарий sed только для определенных строк файлов) Justin 11 лет назад 0

2 ответа на вопрос

1
Matt Clark

Try running this command in your web data directory:

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

This will recursively scan all sub directories and loof for files only with the .php extension, and then print out any lines that contain the text specified in grep.

Он показывает файлы, но первый результат - это результат, который создаст саму таблицу, а не файл, который ссылается на нее, и которая генерирует ошибку. (Я заменил "* .php" на "* .sql") Justin 11 лет назад 0
Отредактировал мой ответ. Попробуйте добавить ключ `-i` и найти любой файл, где это происходит, в строке` 65` или `69`. Кроме того, убедитесь, что вы проверяете орфографию, мелкие ошибки - это большие ошибки. Если это не работает для вас, я прошу прощения, это все, что у меня есть для предложений: [ Matt Clark 11 лет назад 0
Не знаете ли вы, что вместо 'find' есть способ заставить его обрабатывать в том же порядке, что и ls -rS * .sql? Я думаю, если бы я мог сделать это, я бы смог найти, где на него ссылаются. Justin 11 лет назад 0
ах, я просто заменил его ... и думаю, что нашел его используемым: ls -rS * .sql | xargs grep -i "dbname.some_table" | Меньше Justin 11 лет назад 0
0
Ole Tange

Use --tag:

ls -rS *.sql | parallel --tag -j16 sql mysql://username:password@/dbname "<"