mysqldump vs mysqlpump

17

Saya baru saja mendengar tentang mysqlpump - sepertinya dirilis dengan MySQL 5.7, namun MySQL 5.7 masih menyertakan mysqldump . Keduanya merupakan program cadangan, tetapi adakah yang bisa meringkas perbedaan utama? Apakah ada skenario di mana salah satu dari mereka mungkin bekerja lebih baik? Apakah mysqldump akan dihapus untuk mysqlpump?

Ryan Foley
sumber
Itu hanya berarti menyebutkan dua alat serupa hampir identik.
Erik
@Erik tampaknya seperti itu adalah " p arallel d ump " dan dapat memompa data lebih cepat .. tapi kalau tidak aku setuju.
jkavalik
1
Anda mungkin juga tertarik dengan MyDumper . Tampaknya mysqlpump telah mengambil beberapa ide darinya - bukan hal yang buruk, karena proyek ini belum bergerak lebih dari setahun :-(
Vérace
Saya akan tertarik melihat beberapa tes kinerja!
Ryan Foley
XtradbBackup adalah pesaing serius lainnya.
Rick James

Jawaban:

16

Karena saya sendiri sedang meneliti ini, inilah ringkasan dari apa yang saya temukan.

Menurut posting blog 2015 dari tim MySQL dev , keuntungan utama dari mysqlpump adalah dapat menggunakan banyak utas secara paralel untuk mempercepat dumping dan tidak berbagi persyaratan kompatibilitas mundur mysqldump, yang seharusnya membuka pintu untuk lebih jauh perbaikan.

Namun, pos tersebut memperingatkan bahwa mysqlpump "saat ini tidak aman sebagai pengganti cadangan tujuan umum" karena setiap utas dapat menghasilkan bagian-bagian dump dari bagian database yang berbeda. Tidak disebutkan rencana untuk menghentikan mysqldump.

Giuseppe Maxia bermain-main dengan mysqlpump pada tahun 2015 dan menemukan kecepatan dumping cukup kecil. Dia menghargai kemampuan baru untuk memilih objek mana yang akan dibuang, tetapi mencatat bahwa memuat kembali dump hanya dapat dilakukan satu-threaded dan bahwa (tidak seperti mysqldump) dump hanya dapat dimuat kembali ke dalam database dengan nama yang sama.

Neil P. Quinn
sumber
2
Peringatan: mysqlpumpadalah perangkat lunak sumber tertutup (tidak pasti di masa depan). Alternatif Sumber Terbuka mysqlpumpadalah github.com/maxbube/mydumper mydumper
Ivanov
12

Saya juga telah melihat perbedaan antara kedua utilitas ini, dan selain apa yang disebutkan dalam jawaban @ Neil , tampaknya mysqlpump juga memiliki lebih sedikit opsi daripada mysqldump , seperti tidak mengizinkan hal-hal berikut:

  • --compatible=
  • --tab, dan opsi terkait:
    • --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

Di sisi lain, mysqlpump memiliki opsi berikut yang tidak tersedia di 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

Berganti nama atau serupa:

  • --no-datadalam dump == --skip-dump-rowsdalam pompa
  • --no-set-namesdi dump tidak ada di pompa , tetapi sinonimnya - --skip-set-charset- ada di keduanya
  • --ignore-table=di dump sebagian besar --exclude-tables=di pompa kecuali --exclude-tablesdapat menentukan semua tabel, dipisahkan oleh koma, dan memungkinkan untuk karakter wildcard ( %dan _)
  • --tablesdi dump sebagian besar --include-tables=di pompa kecuali --include-tablesdapat menentukan semua tabel, dipisahkan oleh koma, dan memungkinkan untuk karakter wildcard ( %dan _). Juga, --tablesmenimpa --databasesdi dump , sedangkan --include-tables=di pompa tidak.
  • --databasesdi dump dan pump sebagian besar --include-databases=di pump kecuali --include-databasesdapat menentukan semua database, dipisahkan dengan koma, dan memungkinkan untuk karakter wildcard ( %dan _).
Solomon Rutzky
sumber
3

Berikut ini ringkasan dari apa yang saya pahami antara kedua alat cadangan.

Definisi untuk mysqldump diberikan di halaman manual

Utilitas klien mysqldump melakukan backup logis, menghasilkan seperangkat pernyataan SQL yang dapat dieksekusi untuk mereproduksi definisi objek database asli dan data tabel. Itu membuang satu atau lebih database MySQL untuk cadangan atau transfer ke server SQL lain. Perintah mysqldump juga dapat menghasilkan output dalam CSV, teks terbatas lainnya, atau format XML.

Mysqldump sangat mudah digunakan dan sintaksisnya juga sangat sederhana. Ketika kami menjalankan ini, itu mengkonversi semua baris ke query SQL dan mencetaknya dalam output standar. Kami dapat mengarahkan output ini ke file outfile (>) atau menggunakan opsi - file hasil.

Secara default, mysqldump tidak membuang tabel information_schema dan tidak pernah menggunakan performance_schema. Kelemahan utama mysqldump adalah hanya menggunakan satu utas saat mengambil cadangan dan memulihkan.

Mysqlpump adalah utilitas lain yang diperkenalkan di MySQL 5.7 dengan beberapa fitur lebih banyak jika dibandingkan dengan mysqldump

Definisi untuk mysqlpump diberikan di halaman manual

Utilitas klien mysqlpump melakukan backup logis, menghasilkan seperangkat pernyataan SQL yang dapat dieksekusi untuk mereproduksi definisi objek database asli dan data tabel. Itu membuang satu atau lebih database MySQL untuk cadangan atau transfer ke server SQL lain.

Fitur utamanya adalah

  • Pemrosesan paralel (multi-threaded) untuk mempercepat cadangan

  • Indikator Kemajuan

  • Membuang akun pengguna sebagai (buat, berikan pernyataan bukan sebagai sisipan untuk basis data sistem MySQL)

Secara default, mysqlpump tidak mengambil cadangan dari basis data sistem seperti skema informasi, skema kinerja, dan beberapa tabel sistem MySQL kecuali disebutkan secara eksplisit.

Ini juga memiliki opsi – sertakan-database, –exclude-database, –include-table, –exclude-table dengan pencocokan pola (%).

Opsi ini lebih nyaman bagi pengguna yang ingin membuat cadangan hanya beberapa objek dari seluruh dataset.

Secara umum, mysqlpump membagi pekerjaannya menjadi potongan-potongan dan masing-masing ditugaskan ke antrian multi-threaded.

  • Antrian multithreaded ini diproses oleh N utas (Secara default menggunakan 2 utas).

  • Kita dapat mendefinisikan sejumlah utas dengan menggunakan opsi ini - default-paralelisme dan - skema paralel.

  • saat restorasi, ia menggunakan satu utas yang sama dengan mysqldump, ia tidak memiliki pemulihan paralel.

Sebagai tambahan, kami memiliki satu alat lagi yang melakukan paralelisasi dalam cadangan dan pemulihan (di mana kekurangan mysqlpump dan mysqldump) yang disebut mydumper dan myloader . Ini akan sangat digunakan saat memulihkan kumpulan data besar.

Anda dapat menemukan beberapa detail lebih lanjut dan opsi yang berguna dari alat ini di blog ini mysqldump vs mysqlpump vs mydumper .

aakash muthuramalingam
sumber