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