mysqldump vs mysqlpump


17

Tôi mới nghe nói về mysqlpump - có vẻ như nó đã được phát hành với MySQL 5.7, tuy nhiên MySQL 5.7 vẫn bao gồm mysqldump . Cả hai đều là chương trình sao lưu, nhưng ai cũng có thể tóm tắt những khác biệt chính? Có kịch bản nào mà một trong số chúng có thể hoạt động tốt hơn không? Là mysqldump sẽ được loại bỏ cho mysqlpump?


Điều đó chỉ có nghĩa là đặt tên cho hai công cụ tương tự gần như giống hệt nhau.
Erik

@Erik có vẻ như nó là một " p arallel d UMP " và nó có thể bơm các dữ liệu nhanh hơn .. nhưng nếu không tôi đồng ý.
jkavalik

1
Bạn cũng có thể quan tâm đến MyDumper . Dường như mysqlpump đã lấy một vài ý tưởng từ nó - không phải là điều xấu, vì dự án đã không được chuyển trong hơn một năm :-(
Vérace

Tôi muốn xem một số bài kiểm tra hiệu suất!
Ryan Foley

XtradbBackup là một ứng cử viên nghiêm trọng khác.
Rick James

Câu trả lời:


16

Vì tôi tình cờ tự nghiên cứu về vấn đề này, đây là tóm tắt về những gì tôi tìm thấy.

Theo một bài đăng trên blog năm 2015 từ nhóm phát triển MySQL , ưu điểm chính của mysqlpump là nó có thể sử dụng nhiều luồng song song để tăng tốc độ bán phá giá và nó không chia sẻ các yêu cầu tương thích ngược của mysqldump, điều này sẽ mở ra cơ hội hơn nữa cải tiến.

Tuy nhiên, bài đăng cảnh báo rằng mysqlpump "hiện không an toàn như là một sự thay thế sao lưu mục đích chung" bởi vì các luồng riêng lẻ có thể tạo ra các phần kết xuất của chúng từ các trạng thái khác nhau của cơ sở dữ liệu. Nó không đề cập đến bất kỳ kế hoạch nào để phản đối mysqldump.

Giuseppe Maxia đã chơi xung quanh với mysqlpump vào năm 2015 và thấy tốc độ bán phá giá là khá nhỏ. Ông đánh giá cao khả năng mới để chọn chính xác các đối tượng sẽ kết xuất, nhưng lưu ý rằng việc tải lại kết xuất chỉ có thể được thực hiện bằng một luồng và các bãi rác (không giống như mysqldump) chỉ có thể được tải lại vào cơ sở dữ liệu có cùng tên.


2
Cảnh báo: mysqlpumplà phần mềm nguồn đóng (tương lai không chắc chắn). Một nguồn mở thay thế mysqlpumpgithub.com/maxbube/mydumper mydumper
Ivanov

12

Tôi cũng đã xem xét sự khác biệt giữa hai tiện ích này và ngoài những gì được đề cập trong câu trả lời của @ Neil , có vẻ như mysqlpump cũng có ít tùy chọn hơn mysqldump , như không cho phép những điều sau:

  • --compatible=
  • --tabvà các tùy chọn liên quan của nó về:
    • --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

Mặt khác, mysqlpump có các tùy chọn sau không có trong 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

Đổi tên hoặc tương tự:

  • --no-datatrong bãi chứa == --skip-dump-rowstrong máy bơm
  • --no-set-namestrong bãi chứa không tồn tại trong máy bơm , nhưng từ đồng nghĩa của nó - --skip-set-charset- tồn tại trong cả hai
  • --ignore-table=trong kết xuất chủ yếu là --exclude-tables=trong máy bơm ngoại trừ --exclude-tablescó thể chỉ định tất cả các bảng, được phân tách bằng dấu phẩy và cho phép các ký tự đại diện ( %_ )
  • --tablestrong kết xuất chủ yếu là --include-tables=trong máy bơm ngoại trừ --include-tablescó thể chỉ định tất cả các bảng, được phân tách bằng dấu phẩy và cho phép ký tự đại diện ( %_). Ngoài ra, --tablesghi đè --databasestrong bãi chứa , trong khi --include-tables=trong máy bơm thì không.
  • --databasestrong cả bãi chứamáy bơm chủ yếu là --include-databases=trong máy bơm ngoại trừ --include-databasescó thể chỉ định tất cả các cơ sở dữ liệu, được phân tách bằng dấu phẩy và cho phép ký tự đại diện ( %_).

3

Dưới đây là tóm tắt về những gì tôi hiểu giữa cả hai công cụ sao lưu.

Định nghĩa cho mysqldump được đưa ra trong trang hướng dẫn

Tiện ích máy khách mysqldump thực hiện sao lưu logic, tạo ra một tập hợp các câu lệnh SQL có thể được thực thi để tái tạo các định nghĩa đối tượng cơ sở dữ liệu ban đầu và dữ liệu bảng. Nó kết xuất một hoặc nhiều cơ sở dữ liệu MySQL để sao lưu hoặc chuyển sang máy chủ SQL khác. Lệnh mysqldump cũng có thể tạo đầu ra trong CSV, văn bản được phân tách khác hoặc định dạng XML.

Mysqldump rất dễ sử dụng và cú pháp cũng rất đơn giản. Khi chúng tôi thực hiện điều này, nó chuyển đổi tất cả các hàng thành các truy vấn SQL và in nó trong đầu ra tiêu chuẩn. Chúng ta có thể chuyển hướng đầu ra này sang tệp outfile (>) hoặc sử dụng tùy chọn - tệp kết quả.

Theo mặc định, mysqldump không kết xuất các bảng information_schema và nó không bao giờ mất Performance_schema. Hạn chế lớn của mysqldump là nó chỉ sử dụng một luồng trong khi thực hiện sao lưu và khôi phục.

Mysqlpump là một tiện ích khác được giới thiệu trong MySQL 5.7 với một vài tính năng hơn khi so sánh với mysqldump

Định nghĩa cho mysqlpump được đưa ra trong trang hướng dẫn

Tiện ích máy khách mysqlpump thực hiện sao lưu logic, tạo ra một tập hợp các câu lệnh SQL có thể được thực thi để tái tạo các định nghĩa đối tượng cơ sở dữ liệu ban đầu và dữ liệu bảng. Nó kết xuất một hoặc nhiều cơ sở dữ liệu MySQL để sao lưu hoặc chuyển sang máy chủ SQL khác.

Các tính năng chính là

  • Xử lý song song (đa luồng) để tăng tốc độ sao lưu

  • Chỉ số tiến độ

  • Bán phá giá tài khoản người dùng dưới dạng (tạo, cấp các câu lệnh không phải là chèn cho cơ sở dữ liệu hệ thống MySQL)

Theo mặc định, mysqlpump không sao lưu cơ sở dữ liệu hệ thống như lược đồ thông tin, lược đồ hiệu năng và một số bảng hệ thống MySQL trừ khi được đề cập rõ ràng.

Nó cũng có các tùy chọn cơ sở dữ liệu-cơ sở dữ liệu, cơ sở dữ liệu, cơ sở dữ liệu, bảng tính toán, bảng mô tả với mô hình khớp (%).

Các tùy chọn này thuận tiện hơn cho người dùng chỉ muốn sao lưu một vài đối tượng từ toàn bộ tập dữ liệu.

Nói chung, mysqlpump chia công việc của nó thành các khối và mỗi phần được gán cho một hàng đợi đa luồng.

  • Hàng đợi đa luồng này được xử lý bởi N luồng (Theo mặc định, nó sử dụng 2 luồng).

  • Chúng ta có thể định nghĩa một số luồng bằng cách sử dụng tùy chọn nàyddefault -allelism và giản đồ lược đồ.

  • trong khi phục hồi, nó sử dụng một luồng giống như mysqldump, nó thiếu khôi phục song song.

Là một tiện ích bổ sung, chúng tôi có thêm một công cụ thực hiện song song trong cả sao lưu và phục hồi (trong đó thiếu mysqlpump và mysqldump) được gọi là mydumper và myloader . Điều này sẽ được sử dụng rất nhiều trong khi khôi phục bộ dữ liệu khổng lồ.

Bạn có thể tìm thấy một số chi tiết và các tùy chọn hữu ích của công cụ này trong blog này mysqldump vs mysqlpump vs mydumper .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.