使用 xargs 导入 sql 文件

使用 xargs 导入 sql 文件

我有许多 sql 文件要导入。对于单个文件,我使用以下命令:

mysql -u root -p dbname < db.sql

是否可以使用 xargs 批量导入所有文件?就像是: ls *.sql | xargs ....

我知道 mysqlimport 是解决方案,但我想知道 xargs 是否可以。

答案1

xargs适合将输入转换为命令行参数。但由于mysql不接受 SQL 脚本文件名参数,xargs在这种情况下不太方便。

这是一个有用的用途cat

cat *.sql | mysql -u root -p dbname

不管怎样,你尝试以这种方式使用ls会导致著名的为什么不应该解析 ls(1) 的输出文章。

答案2

如果您的 sql 文件彼此独立,并行导入它们可能会更快:

parallel -j10 sql mysql://root:passwd@/dbname '<' {} ::: *.sql

观看 GNU Parallel 的介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

答案3

此命令将加载当前文件夹中的所有 sql 文件,并行执行 8 个操作,如果加载成功则删除每个文件:

find . -type f -name "*.sql" -print0 | xargs -0 -n1 -P8 sh -c 'cat $0 | mysql -A -u<redacted> -p<redacted> -h<redacted> dbname && rm $0'

(我并不认为这是加载sql文件的最佳方式,但它确实满足了用于xargs批量导入文件的问题)

相关内容