방금 mysqlpump 에 대해 들었습니다. MySQL 5.7에서 릴리스 된 것처럼 보이지만 MySQL 5.7에는 여전히 mysqldump 가 포함되어 있습니다. 둘 다 백업 프로그램이지만 누구나 주요 차이점을 요약 할 수 있습니까? 그중 하나가 더 잘 작동하는 시나리오가 있습니까? mysqlpump에 대해 mysqldump가 단계적으로 중단됩니까?
방금 mysqlpump 에 대해 들었습니다. MySQL 5.7에서 릴리스 된 것처럼 보이지만 MySQL 5.7에는 여전히 mysqldump 가 포함되어 있습니다. 둘 다 백업 프로그램이지만 누구나 주요 차이점을 요약 할 수 있습니까? 그중 하나가 더 잘 작동하는 시나리오가 있습니까? mysqlpump에 대해 mysqldump가 단계적으로 중단됩니까?
답변:
내가 이것을 직접 연구했기 때문에 내가 찾은 것을 요약 한 것입니다.
MySQL dev 팀의 2015 블로그 게시물 에 따르면 mysqlpump의 주요 장점은 여러 스레드를 병렬로 사용하여 덤프 속도를 높이고 mysqldump의 이전 버전과의 호환성 요구 사항을 공유하지 않는다는 것입니다. 개량.
그러나 post는 개별 쓰레드가 다른 상태의 데이터베이스에서 덤프 섹션을 생성 할 수 있기 때문에 mysqlpump는 "현재 범용 백업 대체물로 안전하지 않다"고 경고했다. mysqldump를 더 이상 사용하지 않을 계획은 언급되지 않았습니다.
Giuseppe Maxia 는 2015 년에 mysqlpump를 사용 하여 덤핑 속도가 상당히 작은 것으로 나타났습니다. 그는 덤프 할 객체를 정확하게 선택할 수있는 새로운 기능을 높이 평가했지만 덤프를 다시로드하는 작업은 단일 스레드로만 수행 할 수 있으며 mysqldump와 달리 덤프는 동일한 이름의 데이터베이스로만 다시로드 할 수 있다는 점에 주목했습니다.
또한이 두 유틸리티의 차이점 을 살펴 보았고 @ Neil 's answer에 언급 된 것 외에도 mysqlpump 에는 mysqldump 보다 옵션이 적어 다음과 같은 것을 허용하지 않는 것 같습니다.
--compatible=
--tab
및 관련 옵션 :
--fields-terminated-by=
--fields-enclosed-by=
--fields-optionally-enclosed-by=
--fields-escaped-by=
--lines-terminated-by=
--quote-names
--add-drop-trigger
--allow-keywords
--apply-slave-statements
--comments
--compact
--compatible
--create-options
--delete-master-logs
--disable-keys
--dump-date
--dump-slave
--enable-cleartext-plugin
--flush-logs
--flush-privileges
--force
--ignore-error
--include-master-host-port
--lock-all-tables
--lock-tables
--master-data
--no-autocommit
--no-tablespaces
--opt
--order-by-primary
--pipe
--quick
--quote-names
--set-gtid-purged
--shared-memory-base-name
--skip-add-drop-table
--skip-add-locks
--skip-comments
--skip-compact
--skip-disable-keys
--skip-extended-insert
--skip-opt
--skip-quick
--skip-quote-names
--skip-triggers
--skip-tz-utc
--verbose
--where
--xml
반면, mysqlpump 에는 mysqldump 에서 사용할 수없는 다음 옵션이 있습니다.
--compress-output
--default-parallelism
--defer-table-indexes
--exclude-databases=
--exclude-events=
--exclude-routines=
--exclude-triggers=
--exclude-users=
--include-events=
--include-routines=
--include-triggers=
--include-users=
--parallel-schemas=
--skip-definer
--users
--watch-progress
이름이 바뀌거나 비슷 함 :
--no-data
에서 덤프 == --skip-dump-rows
에서 펌프--no-set-names
에 덤프 에 존재하지 않는 펌프 , 그러나 그것의 동의어 - --skip-set-charset
- 모두에 존재--ignore-table=
에 덤프 대부분이다 --exclude-tables=
에서 펌프 를 제외하고 --exclude-tables
쉼표로 구분 모든 테이블을 지정할 수 있으며, 와일드 카드 문자를 허용 ( %
과 _
)--tables
에 덤프 대부분이다 --include-tables=
에서 펌프 를 제외하고 --include-tables
쉼표로 구분 모든 테이블을 지정할 수 있으며, 와일드 카드 문자 (허용 %
하고 _
). 또한, --tables
오버라이드 (override) --databases
에 덤프 반면 --include-tables=
에 펌프를 하지 않습니다.--databases
덤프 와 펌프 모두 --include-databases=
에서 쉼표로 구분 된 모든 데이터베이스를 지정할 수 있고 와일드 카드 문자 ( 및 )를 허용하는 것을 제외하고 는 대부분 펌프에--include-databases
있습니다 .%
_
다음은 두 백업 도구 간의 이해에 대한 요약입니다.
매뉴얼 페이지에 제공된 mysqldump에 대한 정의
mysqldump 클라이언트 유틸리티는 논리 백업을 수행하여 원래 데이터베이스 오브젝트 정의 및 테이블 데이터를 재생하기 위해 실행할 수있는 SQL 문 세트를 생성합니다. 백업을 위해 하나 이상의 MySQL 데이터베이스를 덤프하거나 다른 SQL Server로 전송합니다. mysqldump 명령은 CSV, 기타 구분 텍스트 또는 XML 형식으로 출력을 생성 할 수도 있습니다.
Mysqldump는 사용하기 쉽고 구문도 매우 간단합니다. 이것을 실행하면 모든 행을 SQL 쿼리로 변환하여 표준 출력으로 인쇄합니다. 이 출력을 outfile (>)로 리디렉션하거나 옵션 인 result-file을 사용하여 리디렉션 할 수 있습니다.
기본적으로 mysqldump는 information_schema 테이블을 덤프하지 않으며 performance_schema를 사용하지 않습니다. mysqldump의 주요 단점은 백업 및 복원을 수행하는 동안 하나의 스레드 만 사용한다는 것입니다.
Mysqlpump는 mysqldump와 비교할 때 몇 가지 더 많은 기능을 갖춘 MySQL 5.7에 도입 된 또 다른 유틸리티입니다.
매뉴얼 페이지에 제공된 mysqlpump에 대한 정의
mysqlpump 클라이언트 유틸리티는 논리 백업을 수행하여 원래 데이터베이스 오브젝트 정의 및 테이블 데이터를 재생하기 위해 실행할 수있는 SQL 문 세트를 생성합니다. 백업을 위해 하나 이상의 MySQL 데이터베이스를 덤프하거나 다른 SQL Server로 전송합니다.
주요 특징은
병렬 처리 (멀티 스레드)로 백업 속도 향상
진행 표시기
사용자 계정 덤프 (MySQL 시스템 데이터베이스에 대한 삽입이 아닌 작성, 권한 부여 명령문)
기본적으로 mysqlpump는 명시 적으로 언급하지 않는 한 정보 스키마, 성능 스키마 및 일부 MySQL 시스템 테이블과 같은 시스템 데이터베이스의 백업을 수행하지 않습니다.
또한 패턴 일치 (%)가 포함 된 –include-database, –exclude-database, –include-table, –exclude-table 옵션이 있습니다.
이 옵션은 전체 데이터 세트에서 일부 오브젝트 만 백업하려는 사용자에게 더 편리합니다.
일반적으로 mysqlpump는 작업을 청크로 나누고 각각은 멀티 스레드 대기열에 할당됩니다.
이 멀티 스레드 대기열은 N 개의 스레드 (기본적으로 2 개의 스레드를 사용함)에 의해 처리됩니다.
이 옵션 –default-parallelism 및 –parallel-schemas를 사용하여 여러 스레드를 정의 할 수 있습니다.
복원하는 동안 mysqldump와 동일한 단일 스레드를 사용하지만 병렬 복원이 부족합니다.
애드온으로서 mydumper 및 myloader 라고하는 백업 및 복원 (mysqlpump 및 mysqldump가없는 곳)에서 병렬화를 수행하는 도구가 하나 더 있습니다. 이것은 거대한 데이터 세트를 복원하는 동안 크게 사용됩니다.
이 블로그 mysqldump vs mysqlpump vs mydumper 에서 이러한 도구에 대한 자세한 내용과 유용한 옵션을 찾을 수 있습니다 .