我有一个很大的 SQL 转储,每行有 1 个插入语句。我希望能够将其通过管道传输到 xargs,以便减慢写入速度。基本上,我想执行多行,休眠,然后继续执行,依此类推。
我目前有这个:
cat file.sql | xargs -n50 -d "\n" sh -c '(echo "$@" | mysql db_name); sleep 10'
但问题是,我相信文件中的某个地方有一个\n
导致 SQL 中断的问题。我正在使用INSERT IGNORE
,这导致缺少行。
我不想浏览文件并修复\n
。有没有办法用 line 代替\n
?
我试过了:
cat file.sql | xargs -L 50 sh -c '(echo "$@" | mysql db_name); sleep 10'
但我得到了:
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
答案1
我实际上只会修改 SQL。MySQL 有一个SLEEP
函数可供您选择。下面将每 50 行注入 10 秒延迟...然后只需将其输入到命令中即可mysql
。
awk '{print} NR%50==0 {print "SELECT SLEEP(10);"}' file.sql | mysql db_name