큰 .sql 파일 가져 오기 진행 상황을 어떻게 모니터링 할 수 있습니까?


204

foobar.sql로컬 데이터베이스에서 테이블을 복원하기 위해 7GB 를 가져오고 있습니다.

$ mysql -h localhost -u root 'my_data' < foobar.sql

$ mysql --version
/usr/local/mysql/bin/mysql  Ver 14.12 Distrib 5.0.96, for apple-darwin9.8.0 (i386) using readline 5.1

진행 상황을 어떻게 모니터링 할 수 있습니까?


1
이 질문에 대한 답변은 이것이 mysql 클라이언트의 명백한 결함임을 보여줍니다
William Entriken

답변:


267

* nix의 CLI에서 덤프 파일을 가져 오는 경우

mysql -uxxx -pxxx dbname < /sqlfile.sql

그런 다음 먼저 OS에 파이프 뷰어 를 설치 한 후 다음과 같이 시도하십시오.

pv sqlfile.sql | mysql -uxxx -pxxxx dbname

프로그램이 실행될 때 진행률 표시 줄이 표시됩니다.

매우 유용하며 mysqldump 진행률을 추정하는 데 사용할 수도 있습니다.

pv는를 덤프하여 sqlfile.sqlmysql에 전달합니다 (파이프 연산자 때문에). 덤프하는 동안 진행률이 표시됩니다. 멋진 점은 mysql이 진행할 수있는 한 빨리 데이터를 가져 와서 pv가 가져 오기 진행률을 표시 할 수 있다는 것입니다. 증거가 없습니다. 그러나 그렇게 보인다. 사용 된 버퍼가 있다고 생각하지만 어느 시점에서 mysql여전히 처리 중일 때 더 이상 데이터를 읽지 않는다고 생각 합니다.

파이프 뷰어


1
나는 mysql에 버퍼가있을 수 있다고 생각할 것이다. 일부 데이터는 완전히 "처리되지 않고"파이프 될 수있다. 그러나 일반적으로 파이프가 작동하는 방식입니다. 당신이 할 수 sudo hd /dev/sda1 | less있고 메모리에 전체 시스템 파티션이없는 것과 같은 이유 입니다.
snapfractalpop

2
@snapfractalpop pv은 일부 SQL 덩어리가 다른 덩어리보다 처리하는 데 더 많은 시간이 걸리기 때문에 많은 경우에 너무 정확하지 않습니다. 간단한 삽입을 구성하는 줄은 예를 들어 이미 많은 행이있는 테이블에서 인덱스를 만드는 것보다 훨씬 빠르게 실행됩니다. 그러나 사용에 대한 읽기 버퍼 mysql가 특히 크지 않은 경우 출력에 대한 대략적인 아이디어가 유용합니다 (7Gb 입력의 경우 버퍼가 매우 커야 pv출력이 전혀 유용하지 않음)
David Spillett

1
@DavidSpillett 님. 당신의 의견은 나의 감정을 반영합니다. 기본적으로 pv는 조잡하지만 효과적입니다. 내가 가장 좋아하는 것은 그것이 얼마나 일반적인지입니다. 유닉스 파이프의 아름다움은 맥키 로이에게 감사합니다.
snapfractalpop

1
@ rob 이것은 멋진 친구입니다, 당신은 또한 예제를 제공 할 수 mysqldump있습니까?
Josue Alexander Ibarra 18

아주 좋은 해결책! 암호가 수동 인 경우, pv는 암호가 진행될 때까지 기다리지 않습니다.
Pierre de LESPINAY

26

이미 가져 오기를 시작한 경우 다른 창에서이 명령을 실행하여 데이터베이스의 현재 크기를 볼 수 있습니다. 가져 오는 .sql 파일의 전체 크기를 알고있는 경우 유용합니다.

SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MiB" 
FROM information_schema.TABLES GROUP BY table_schema;  

신용 : http://forums.mysql.com/read.php?108,201578,201578


MySQL의 8.0 참조 상태는 정확성에 대해 다음과 같은 :

DATA_LENGTH

MyISAM의 경우 DATA_LENGTH는 데이터 파일의 길이 (바이트)입니다.

InnoDB의 경우 DATA_LENGTH는 클러스터형 인덱스에 할당 된 대략적인 메모리 양 (바이트)입니다. 특히, 클러스터 된 인덱스 크기 (페이지 단위)에 InnoDB 페이지 크기를 곱한 값입니다.

 

INDEX_LENGTH

MyISAM의 경우 INDEX_LENGTH는 인덱스 파일의 길이 (바이트)입니다.

InnoDB의 경우 INDEX_LENGTH는 비 클러스터형 인덱스에 할당 된 대략적인 메모리 양 (바이트)입니다. 특히 비 클러스터형 인덱스 크기 (페이지)에 InnoDB 페이지 크기를 곱한 합계입니다.


내 답변은이 답변의 명령에 따라 12GiB이며 여전히 가져옵니다. 내 sqldump 파일은 5GiB입니다. 이 불일치에 대한 설명에 관심이 있습니다
lucidbrot

17

단일 데이터베이스의 mysqldump를 실행하면 모든 테이블이 알파벳 순서로 덤프됩니다.

당연히, mysqldump를 데이터베이스로 리로드하는 것도 알파벳 순서로되어 있습니다.

SHOW PROCESSLIST를 수행 할 수 있습니다. mysqldump를 실행하는 DB 연결을 찾으십시오. 덤프가 다시로드되면 DB 연결이 사라집니다.

덤프 파일에 어떤 테이블이 있는지 알고 싶다면 foobar.sql에 대해이 테이블을 실행하십시오.

cat foobar.sql | grep "^CREATE TABLE" | awk '{print $3}'

업데이트 2012-05-02 13:53 EDT

테이블이 하나만 있다는 것을 알지 못해서 죄송합니다.

테이블이 MyISAM 인 경우, 모니터링하는 유일한 방법은 OS 관점입니다. 이유? 테이블은 다시로드하는 동안 쓰기 잠금 상태입니다. 무엇을 찾으십니까? .MYD.MYI파일 의 크기입니다 . 물론, 가져온 다른 DB 서버에서 이전의 테이블 크기와 비교해야합니다.

테이블이 InnoDB이고 innodb_file_per_table이 사용 가능한 경우, 모니터링하는 유일한 방법은 OS 관점입니다. 이유? 테이블은 다시로드하는 동안 쓰기 잠금 상태입니다. 무엇을 찾으십니까? .ibd파일 의 크기입니다 . 물론, 가져온 다른 DB 서버에서 이전의 테이블 크기와 비교해야합니다.

테이블이 InnoDB이고 innodb_file_per_table이 비활성화되어 있으면 OS 관점에서도 도움이되지 않습니다.

업데이트 2012-05-02 13:56 EDT

작년에 이와 같은 문제를 해결했습니다. "type db.sql | mysql"에 대한 진행률을 어떻게 얻습니까?

업데이트 2012-05-02 14:09 EDT

표준 mysqldump가 다음과 같이 테이블을 쓰기-잠금하기 때문에 :

LOCK TABLES `a` WRITE;
/*!40000 ALTER TABLE `a` DISABLE KEYS */;
INSERT INTO `a` VALUES (123),(451),(199),(0),(23);
/*!40000 ALTER TABLE `a` ENABLE KEYS */;
UNLOCK TABLES;

그런 다음 테이블 잠금이 해제 될 때까지 mysql로 ​​진행할 수있는 방법이 없습니다.

당신이 얻을 수있는 경우 LOCK TABLESUNLOCK TABLES덤프 파일에서 주석 ...

  • 테이블이 MyISAM이면 SELECT COUNT (*)가 작동합니다.
  • 테이블이 InnoDB 인 경우, SELECT COUNT (*)는 카운트가 완료 될 때까지로드를 느리게하거나 중단시킵니다.

효과가있었습니다. 감사. 마지막 질문은 경험상 가져 오기 시간이 파일 크기 및 파일 크기 와 거의 선형 인지 아는 것 입니까? .MYD.MYI
qazwsx 21:06에

1
테이블 재로드는 선형입니다. 인덱스 재 구축은 선형입니다. 몇 년 전, 나는 이것을 MySQL에 대한 질문으로 ( 벤츠 .mysql.com / mysql / 202489 ) 벤처하지 않았으며 DBA StackExchange ( dba.stackexchange.com/a/2697/877 ) 에서 언급했습니다.
RolandoMySQLDBA

8

2 초마다 프로세스가 실행되는 것을 볼 수 있습니다.

watch 'echo "show processlist;" | mysql -uuser -ppassword';

당신이 원하는 경우는 덜 자주 다음 추가 -n x여기서 x는 시간 (초)입니다. 5 초는 다음과 같습니다.

watch -n 5 'echo "show processlist;" | mysql -uuser -ppassword';

예제 출력을 게시 할 수 있습니까? 또한 프로세스를 보여 주거나 실제로 가져 오기 진행 상황을 나타 냅니까?
qazwsx

이것은 유용한 코드입니다. 감사합니다
NarayaN

6

멈추었는지 확인하고 싶다면 쿼리 할 수 ​​있습니다.

show processlist; 

무엇이 실행되고 있는지 확인하십시오.


5

pv를 사용할 수 없거나 pv가 거짓말을하는 사람을위한 솔루션으로. 데이터가 포함 된 / var / lib / mysql에서 ibdata1 파일의 크기를 모니터링 할 수 있습니다. 소스 서버에있는 파일 크기와 동일한 크기 (또는 그 정도)가됩니다.

테이블이 많으면 / var / lib / mysql / <database name>에 하나씩 표시되는 것을 볼 수 있습니다.

최근에 장기 데이터베이스가 3-4 년 동안 20G 정도의 로그 파일을 구축했을 때이 사실을 사용했습니다. 이전이 오래 걸리는 것을 확인하고이 기술을 사용하여 진행 상황을 모니터링했습니다.

데이터베이스에 파일이 있거나 다른 파일이 포함되어 있지 않은 날이 시작될 가능성은 거의 없습니다. 한편, 파일을 모니터링하여 전송 진행 상태를 확인할 수 있습니다. 내가 제안한 방법은 첫 번째 SQL 데이터베이스가 작성된 이후로 한 형태 또는 다른 형태로 수행 할 수있는 것입니다. 나는 수동 기수가 다시 사용할 수있는 "공식적인"기술이라고 제안하지 않았다. 그것은 일반적으로 컴퓨터와 유닉스에 대한 일반적인 수준의 능력을 가정합니다.


2

다른 방법으로 DB가 조용하고 (즉, 다른 사용자가 활성화되지 않은 경우) 읽기 / 쓰기 활동을보고 싶은 이유는 다음과 같습니다.

mysqladmin -h<host>-uroot -p<yourpass> extended -r -i 10 |grep 'row'

읽기 / 쓰기 / 삽입 / 대기 / 업데이트 수가 표시됩니다.

예를 들어 삽입하는 경우 다음과 같은 내용이 표시됩니다.

Innodb_rows_inserted                          | 28958 

여기서 28958은 간격에 삽입 된 행 수입니다 (필자의 경우 10 초).


1

파이프 뷰어 예제를 사용하는 사람은 mysqldump다음과 같이하십시오.

mysqldump -hxxx -uxxx -p dbname | pv -W > dump.sql

-W플래그는 첫 번째 바이트는 (프롬프트 후) 진행 상황을 표시하기 전에 올 때까지 기다릴 태양 광 발전을 알려줍니다


0

\ Msql \ Data [DB name] 폴더에서 가져 오기를 모니터링 할 수 있습니다.


0

좋아, 다른 해결 방법. 그러나 이것이 최악의 옵션 일 수 있습니다.

즉, 여기 Windows 용 솔루션이 있습니다.

를 눌러 작업 관리자를 엽니 다

CTRL + SHIFT + ESC

"mysqld.exe"디스크 값 속도를 복사

e.g. 11mb/s

https://techinternets.com/copy_calc?do 와 같은 계산기에 넣으십시오.

ETA를 추정하십시오. 내 경우는 :

Speed: 8 MB/s
Size: 4.9 GB
0 Hours, 11 Minutes and 29 Seconds

결과 :

Beg -> 11:19
ETA -> 11:31
End -> 11:39

-1

옵션으로 'mysql -v'를 게시 한 사람이 아무도 없습니다. 멈 추면 출력이 멈 춥니 다.


3
"진행 상황 모니터링"은 일반적으로 프로세스가 얼마나 진행되었는지 또는 언제 완료 mysql -v될지 예상하지 않는 것을 추정하려고 시도하는 것을 의미 합니다. 또한 터미널에 7GB의 데이터를 분출 하면 복원 속도 가 크게 느려집니다.
mustaccio

설명해 주셔서 감사합니다. 즉, 7GB의 출력은 터미널로 출력하기에 좋지 않습니다. -v를 사용하면 DB가 막히는 작은 로컬 테스트 사례 일뿐입니다.
dtc

2
이 제안은 문제를 찾아내는 데 도움이되었지만 큰 파일과 함께 사용하기에는 비현실적입니다. (내는 작았습니다).
Casey Perkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.