xargs를 사용하여 SQL 파일 가져오기

xargs를 사용하여 SQL 파일 가져오기

가져올 SQL 파일이 많습니다. 단일 파일의 경우 다음 명령을 사용합니다.

mysql -u root -p dbname < db.sql

xargs를 사용하여 모든 파일을 일괄 가져올 수 있습니까? 그것은 다음과 같습니다: ls *.sql | xargs ....

mysqlimport가 해결책이라는 것을 알고 있지만 xargs가 가능한지 알고 싶습니다.

답변1

xargs입력을 명령줄 인수로 변환하는 데 적합합니다. 그러나 mysqlSQL 스크립트 파일 이름 매개변수를 허용하지 않으므로 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'

xargs(나는 이것이 SQL 파일을 로드하는 가장 좋은 방법이라고 생각하지 않지만, 파일을 대량으로 가져오는 문제를 만족시킵니다 .)

관련 정보