mysqldump 與 mysqlpump
我剛剛聽說mysqlpump - 看起來它是與 MySQL 5.7 一起發布的,但是 MySQL 5.7 仍然包含mysqldump。它們都是備份程序,但任何人都可以總結主要區別嗎?是否存在其中一種可能效果更好的情況?mysqldump 會被 mysqlpump 淘汰嗎?
由於我碰巧自己正在研究這個,這裡是我發現的摘要。
根據MySQL 開發團隊 2015 年的一篇部落格文章,mysqlpump 的主要優點是它可以並行使用多個執行緒來加速轉儲,並且它不共享 mysqldump 的向後兼容性要求,這應該為進一步打開大門改進。
但是,該文章警告說 mysqlpump “目前作為通用備份替代品是不安全的”,因為各個執行緒可能會從數據庫的不同狀態生成它們的轉儲部分。它沒有提到任何棄用 mysqldump 的計劃。
Giuseppe Maxia 在 2015 年玩弄了 mysqlpump,發現轉儲速度提升相當小。他讚賞精確選擇要轉儲的對象的新能力,但指出只能單執行緒載入轉儲,並且(與 mysqldump 不同)轉儲只能載入回具有相同名稱的數據庫。
我也一直在研究這兩個實用程序之間的區別,除了@Neil的回答中提到的內容之外,似乎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
in dump在****pump中不存在,但它的同義詞 –--skip-set-charset
– 兩者都存在--ignore-table=
in dump主要--exclude-tables=
在pump中,除了--exclude-tables
可以指定所有表,用逗號分隔,並允許使用萬用字元(%
和_
)--tables
in dump主要--include-tables=
在pump中,除了--include-tables
可以指定所有表,用逗號分隔,並允許使用萬用字元(%
和_
)。此外,在dump--tables
中覆蓋,而在pump中則沒有。--databases``--include-tables=
--databases
在轉儲和泵中主要是--include-databases=
在泵中,除了--include-databases
可以指定所有數據庫,用逗號分隔,並允許使用萬用字元(%
和_
)。