MySQL 데이터베이스를 가져올 때 진행률 표시기 가져 오기


21

종종 MySQL 데이터베이스를 가져 오는데 시간이 오래 걸릴 수 있습니다. 진행 표시기가 없습니다. 어떻게 든 보여줄 수 있습니까? 가져온 레코드, 가져온 MB 또는 가져온 테이블은 무엇이든 기다리는 것보다 낫습니다. 아무도 모른다?

이 명령을 사용합니다.

mysql -uuser -p -hhost database < largefile.sql

파일의 크기는 40-300MB이며 호스트는 로컬 네트워크 내에 있습니다.



@ sr_ pv정확히 질문자가 검색하는 것 같아요 . 방금 rpmforge를 통해 CentOS에 설치했습니다. size -parameter가 주어지면 심지어 ETA를 보여줄 것입니다.
Nils

pv실제로 트릭을 했어! 누군가가 이것을 대답 할 수 있다면, 나는 이것을 받아 들일 수 있습니다!
복원 Monica Monica

답변:


31

좋은 도구가 있습니다 pv

# On Ubuntu/Debian system
$ sudo apt-get install pv

# On Redhat/CentOS
$ sudo yum install pv

다음과 같이 사용할 수 있습니다.

$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname

최신 버전은 UPDATE 2를 확인하십시오.

추신 :이 블로그를 확인 http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

업데이트 : 위의 링크가 끊어진 것처럼 보이지만 http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html 에서 동일한 기사를 찾았습니다.

업데이트 2 : FULL 진행률 표시 줄이 더 나은 솔루션입니다. 그러기 위해서는 2 가지 빌드 pv옵션 을 사용해야 합니다. 하나는 --progress진행률 표시 줄을 표시하고 두 번째 --sizepv전체 파일이 얼마나 큰.

pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES

.. 문제는 .gz원본 파일 크기에 있습니다. 압축을 풀지 않고 압축을 푼 원본 파일 크기 정보를 가져와야합니다. 그렇지 않으면이 파일의 압축을 풀 때 소중한 시간이 두 번 (첫 번째 pv및 두 번째 zcat) 손실됩니다 . 그러나 다행히 gzip -lgzip 파일에 대한 압축되지 않은 정보가 포함 된 옵션이 있습니다. 불행히도 테이블 형식으로되어 있으므로 사용하기 전에 추출해야합니다. 아래는 모두 함께 볼 수 있습니다.

gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'

Uff .. 마지막으로해야 할 일은 모두 함께 결합하는 것입니다.

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname

더 좋게 만들려면 다음과 같이 progres NAME을 추가하십시오.

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass dbname

최종 결과:

Importing.. : [===========================================>] 100%

업데이트 3 : 빠른 사용법을 위해 사용자 정의 기능을 만드십시오.

mysql_import() {
  zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass $1
}

용법:

mysql_import dbname /path/to/our/database.sql.gz

어디에 두어야할지 모른다면 /unix//a/106606/20056을 읽어보십시오.

별칭 사이에 기능을 추가 할 수 있습니다. 예를 들어 ~/.bash_aliases파일을 사용할 수 있습니다 .


대단해.
dave

1
더 나은 결과를 제공하는 한 가지 라이너는 다음과 같습니다.pv --progress --name 'DB Import in progress' -tea /path/to/our/database.sql.gz | zcat | mysql -h db_host -u db_user -pdb_password db_name
Denis Pitzalis

16

왜 그렇게 복잡한가?

이것은 잘 작동합니다 :

pv dump.sql.gz | zcat | mysql -u user -ppasswd database

훨씬 간단하고 깨끗합니다!
donquixote

7

항상 MySql 셸에서 데이터베이스를 가져옵니다. 진행률 표시기를 제공하지 않지만 수행중인 작업을 (빠르게) 스크롤하여 작동하고 있음을 알 수 있습니다.

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.