데이터 흐름을 변경하지 않고 파이프라인 내부에 MD5 생성

데이터 흐름을 변경하지 않고 파이프라인 내부에 MD5 생성

암호화된 mysql(미사용 데이터)을 암호화된 파일에 덤프하는 메커니즘을 생성하라는 요청을 받았습니다. 메커니즘은 다음과 같은 특정 기준을 충족해야 합니다.

  • Linux에서 실행해야 함
  • 암호화되지 않은 SQL 데이터는 임시 파일에도 기록되지 않습니다.
  • 암호화되지 않은 덤프 스트림의 md5(또는 기타 해시) 생성
  • sh 쉘만 사용 가능하므로 프로세스 대체는 사용하지 않음

다음과 같은 것이 필요합니다.

mysqldump | md5-tool >> dump.md5 | gzip | encryption-tool

내 문제는 내가 찾은 모든 해싱 도구가 스트림을 전송하지 않고 체크섬만 전송한다는 것입니다. 가장 가까운 도구는 -p이 옵션이 포함된 BSD md5이지만 Linux에서는 사용할 수 없습니다.

이를 수행할 수 있는 도구를 아는 사람이 있습니까?

답변1

표준 구문으로 수행 해야 sh하지만 사용 중인 시스템이 이를 지원하는 경우 /dev/fd/x수동으로 프로세스 대체를 수행할 수 있습니다.

{
  mysqldump | tee /dev/fd/3 | gzip | encryption-tool > dump.gz.enc
} 3>&1 | md5sum >> dump.md5

없는 시스템에서는 /dev/fd/x명명된 파이프를 다음과 같이 사용합니다.@ilkkachu가 표시함. 이는 프로세스 교체 지원 기능이 있는 쉘이 /dev/fd/x.


¹ ksh의 초기 버전을 제외하고 이 기능은 프로세스 교체 지원이 시스템 지원에 따라 조건부였던 80년대 중반부터 제공되었습니다 /dev/fd/x. rc, zsh와 같은 일부 다른 셸은 원래(오래 전) 임시 이름 파이프만 사용했습니다.

답변2

프로세스 대체가 필요하지 않으므로 기능이 제한된 POSIX 셸에서 작동하며 tee명명된 파이프와 함께 사용할 수 있습니다. md5sum백그라운드에서 수동으로 시작하기 만 하면 됩니다 .

mkfifo -m 600 p || exit
md5sum < p >> dump.md5 &
mysqldump | tee p | gzip | encrypt > final.backup
rm -f p
wait "$!" # make sure md5sum has finished computing the checksum and
          # written it before carrying on with the rest of the script.

명명된 파이프에이름파일 시스템에서는 파일이 디스크는 물론이고 파일 시스템으로 이동하지 않기 때문에 일반 파이프처럼 작동해야 합니다. 그러나 데이터베이스 자체가 암호화되지 않는 한 디스크에 남아 있는 백업 복사본은 중요하지 않습니다. 물론 tmpfs파일 시스템에 임시 파일이나 명명된 파이프 자체를 생성하여 메모리에만 상주하도록 할 수 있습니다.

답변3

Bash에서는 다음을 사용할 수 있습니다 tee.프로세스 교체:

mysqldump | tee >(md5sum >> dump.md5) | gzip | encryption-tool

tee입력에서 읽고 출력과 하나 이상의 다른 파일을 씁니다. 따라서 gzip도 작성하게 됩니다 >(md5sum >> dump.md5).

무엇인가요 >(md5sum >> dump.md5)? 이것은 프로세스 대체입니다. bash 시작 명령 md5sum >> dump.md5, 대체 파일 설명자 번호(내 경우에는 63)를 선택하고 tee파일 설명자 63을 입력에 연결한 다음 프로세스 대체를 다음으로 바꾸십시오. 따라서 명령을 참조하고 해당 파일 설명자 63에 씁니다( 및 그 출력).teemd5sum/dev/fd/63teetee /dev/fd/63

관련 정보