mysqdump: 쓰기에서 오류 32를 받았습니다.
저는 VPS에서 이 스크립트를 몇 년 동안 사용했습니다.그리고 여전히 작동하고 있습니다.
DBLIST=`mysql -uroot -pROOT_PASSWORD -ANe"SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','performance_schema')" | sed 's/,/ /g'`
MYSQLDUMP_OPTIONS="-uroot -pROOT_PASSWORD --single-transaction --routines --triggers"
BACKUP_DEST="/home/backup/db/"
for DB in `echo "${DBLIST}"`
do
mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip > ${BACKUP_DEST}/${DB}.sql.gz &
done
wait
tar -czvf /home/backup/db2/`date +\%G-\%m-\%d`_db.tar.gz ${BACKUP_DEST}
저는 이제 다른 진행자로 이동합니다.동일한 스크립트를 사용하려고 하는데(물론 새 자격 증명으로 ROOT_PASSWORD를 변경했습니다), 다음과 같은 메시지가 표시되는 이유를 모르겠습니다.
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
20:47:59 0 ~] $ perror 32
OS error code 32: Broken pipe
그래서 오류 32는 "깨진 파이프"입니다.mysqdump 출력을 다음으로 파이프합니다.gzip
따라서 이것은 mysqdump가 끝나기 전에 gzip이 종료되었음을 의미합니다.예를 들어 디스크가 꽉 찼거나 gzip이 호스트의 최대 CPU 시간/사용량을 초과했기 때문일 수 있습니다.
저도 몇 가지 오타 때문에 같은 문제가 있었습니다.
제가 db 사용자 이름을 잘못 입력했습니다.나는 가지고 있었습니다
"db_user_1"
그가 정말로 어렸을 때"db_user1"
.파이프를 피운 후에 나는 잊어버렸습니다.
>
에gzip > myfile.tar.gz
.
그러나 다른 사용자의 데이터베이스 암호 노출을 중지할 수 있도록 가능한 한 빨리 MySQL 5.6+로 업그레이드하는 것이 좋습니다.
StackOverflow에서 이 답변을 확인하십시오.
백업 저장에 사용 중인 /home/backup/db/ 폴더에 쓰기 액세스 권한이 있는지 확인합니다(빠른 확인을 위해 해당 폴더에서 chmod-R 777을 사용하고 스크립트를 실행하십시오).
사용하고 있었습니다.mysqldump
CLI에서 gzip 및/또는 파일로 파이프를 연결하려고 하면 "권한 거부" 오류가 발생합니다.
로서라도sudo
실행 중이었지만 오류가 발생했습니다.mysqldump
~하듯이sudo
파이프는 여전히 출력을 쓰기 위해 셸에 로그인한 사용자 계정을 사용하려고 했습니다.이 경우 내 셸 사용자 계정에 대상 디렉터리에 쓸 수 있는 권한이 없습니다.
이 문제를 해결하려면 다음을 사용할 수 있습니다.tee
와의 명령.sudo
:
mysqldump --single-transaction --routines --events --triggers --add-drop-table --extended-insert -u backup -h 127.0.0.1 -p --all-databases | gzip -9 | sudo tee /var/backups/sql/all_$(date +"%Y_week_%U").sql.gz > /dev/null
그| sudo tee /var/backups/...
이 기능을 사용하여 쓰기 가능한 디렉토리에만 연결할 수 있습니다.root
.그> /dev/null
억압하는tee
출력물을 화면에 직접 버리는 것으로부터.
DB 덤프를 할 수 없어서 놀랐어요, 전날에도 할 수 있었어요.저는 이 오류를 겪고 있었습니다.
nos가 말한 것처럼, 에러 메시지는 파이프가 부러졌다는 것을 의미하며, 이것은 출력을 디스크에 쓸 수 없다는 것을 의미합니다.저의 경우, SSH 사용자는 mysqdump 지침에서 대상 폴더에 쓸 수 있는 권한이 없었습니다.
덤프를 출력할 수 있습니다./home/your_user
디렉터리에서 동일한 오류가 발생하는지 확인합니다.그렇게 해서 저의 문제가 해결되었습니다.
같은 문제에 직면했습니다.정확한 이유는 모르겠지만, 유틸리티 PV를 추가하면 모든 것이 작동한다고 결론을 내렸습니다.아마도 그것은 당신의 셸 bash/sh에 달려있을 것입니다.
sudo apt-get install pv
PipeView는 디스크에 쓰는 프로세스를 시각화할 수 있는 매우 유용한 유틸리티입니다.
예를 들어 스크립트
mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip | pv > ${BACKUP_DEST}/${DB}.sql.gz
폴더가 /home/backup/db/ 위치에 있는지 확인합니다.
아니오인 경우 모든 하위 폴더를 만듭니다.
명령: mkdir /home/backup/db/
그런 다음 명령을 다시 실행합니다.
Errno 32는 "파손 파이프"이므로 파이프 대상(이 경우 gzip)에서 발생하는 모든 오류는 Erno 32를 발생시킵니다.되어 사용자의 디렉토리 구조가 변경된 ${BACKUP_DEST}
이 문제가 발생할 수 있는 디렉터리를 더 이상 참조하지 않습니다.
나는 당신의 gzip 명령에 다른 것을 연결하거나 gzip을 포함하지 않는 압축되지 않은 백업을 만들어 이것을 디버깅할 것입니다.
너무 오래된 주제지만, 저는 그 문제에 직면했고 다음과 같은 것을 발견했습니다.
이름: 내파이름:db_26/03.tar.gz
합니다. 가 사용할 는: 위같오발생합니다류가은와다니발▁its합생▁i:. 하지만 제가 사용할 때:db.tar.gz
오류가 없습니다.
그래서 당신은 당신의 파일 이름을 확인해야 합니다.
mysqdump 출력을 s3cmd로 배관할 때 이 오류가 발생했습니다.s3cmd 버전을 잘못 사용해서 발생한 것입니다.Ubuntu Trusty 및 Debian Wheezy에서는 s3cmd 명령의 패키지 버전이 stdin을 지원하지 않습니다(버전 1.1.0이 있기 때문).
이 문제를 해결하는 데 도움이 된 것은
export LANG=C
https://github.com/netz98/n98-magerun/issues/771 에 따라 mysqdump를 실행하기 전에
언급URL : https://stackoverflow.com/questions/22288271/mysqldump-got-errno-32-on-write
'programing' 카테고리의 다른 글
URL 매개 변수 값 가져오기 (0) | 2023.08.04 |
---|---|
ECMA스크립트 6에는 추상 클래스에 대한 규약이 있습니까? (0) | 2023.08.04 |
사용자 지정 유형을 최대 절전 모드로 설정하여 '원인: java.sql'을(를) 방지합니다.SQL 예외:스트림이 이미 닫혔습니다.' (0) | 2023.08.04 |
Oracle에서 기본 키를 재사용할 수 있도록 이름을 변경하는 방법 (0) | 2023.08.04 |
오류: 'uint16_t'이(가) 선언되지 않았습니까? (0) | 2023.08.04 |