Mysql

mysqldump 與 mysqlpump

  • July 11, 2019

我剛剛聽說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-namesin dump在****pump中不存在,但它的同義詞 – --skip-set-charset– 兩者都存在
  • --ignore-table=in dump主要--exclude-tables=pump中,除了--exclude-tables可以指定所有表,用逗號分隔,並允許使用萬用字元(%_
  • --tablesin dump主要--include-tables=pump中,除了--include-tables可以指定所有表,用逗號分隔,並允許使用萬用字元(%_)。此外,在dump--tables中覆蓋,而在pump中則沒有。--databases``--include-tables=
  • --databases轉儲中主要是--include-databases=中,除了--include-databases可以指定所有數據庫,用逗號分隔,並允許使用萬用字元(%_)。

引用自:https://dba.stackexchange.com/questions/118846