Setelah beberapa pencarian saya berakhir dengan pengaturan berikut:
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
Sejauh ini bagus tapi saya punya beberapa pertanyaan tentang parameter serta pelaksanaannya.
Mengenai masalah pertama saya, saya hanya ingin memastikan bahwa semuanya diperlukan dan tidak menimbulkan konflik saat digunakan bersama. Pada akhirnya, saya ingin membuat file dump yang sangat kuat dan konsisten, dengan jutaan catatan, yang membuat tabel, database, dan memasukkan data. Hal yang baik adalah membuat database tidak tersedia untuk sementara waktu tidak menjadi masalah bagi saya. Satu-satunya tujuan saya adalah membuat file dump yang kuat dan konsisten.
Mengenai konser kedua saya, saya ingin tahu bagaimana cara mendapat informasi ketika perintah salah dan jika demikian berikan pengecualian.
Ada ide?
EDIT
Ini adalah perintah mysqldump saya yang diperbarui berdasarkan umpan balik RolandoMySQLDBA.
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
sumber
Jawaban:
Anda akan menemukan ini mengejutkan, tetapi Anda hanya perlu satu opsi utama: --opt
Apa itu --opt ?
Karena --opt sudah diaktifkan, Anda tidak perlu menentukan --opt . Meskipun demikian, Anda mungkin memerlukan beberapa opsi yang diperlukan yang tidak termasuk.
Jalankan kueri ini di basis data Anda
Jika Anda memiliki semua tabel InnoDB, maka Anda perlu menentukan --single-transaction . Ini akan secara otomatis menonaktifkan --lock-tables dan memungkinkan Anda untuk membuang semua tabel dalam titik-waktu yang sama dan memungkinkan penulisan baru untuk datang pada saat yang sama.
Jika Anda memiliki satu atau lebih tabel MyISAM, maka Anda perlu menentukan --lock-all-tables . Ini akan secara otomatis menonaktifkan --lock-tables , nonaktifkan --single-transaction , mengunci semua tabel di semua database, lalu membuat dump. Menulis ke tabel InnoDB masih dapat terjadi, tetapi mereka hanya akan mengantri sampai kunci dilepaskan. Koneksi DB yang mencoba menulis ke tabel MyISAM akan benar-benar ditangguhkan sampai semua kunci dilepaskan.
Jalankan kueri ini:
SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Jika
Number_Of_Stored_Procedures
lebih besar dari nol, gunakan --routines .Jalankan kueri ini:
SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Jika
Number_Of_Triggers
lebih besar dari nol, gunakan --triggers .CAVEAT : Tolong Jangan Menggunakan --order-by-primary untuk membuang semua basis data karena berpotensi membuat indeks BTREE agak miring pada pengisian ulang.--order-by-primary hanya boleh digunakan saat membuang tabel individual yang Anda tahu memiliki kunci primer integer dan akan memiliki banyak pemindaian rentang dari aplikasi Anda.
Jika Anda membutuhkan jenis cadangan mysqldump yang lebih kreatif, lihat posting lama saya. Bagaimana cara mengoptimalkan mysqldump dari database besar?.
Silakan baca semua opsi untuk mysqldump .
UPDATE 2014-12-29 09:44 EST
Melihat komentar Anda dan edit terakhir Anda, mari kita lihat masing-masing opsi ini dan lihat apakah Anda membutuhkannya
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
sebagai gantiINSERT INTO tblname VALUES ...
. Ini bisa mengasapi mysqldump jika ada banyak kolom dalam definisi tabel dan banyak baris dalam tabel. Jangan gunakan itu.DROP TABLE IF EXISTS
(yang ditambahkan oleh --add-drop-table ) berjalan lebih cepat. Tidak menggunakannya cukup memungkinkanDROP TABLE IF EXISTS
terjadi untuk setiap tabel. Jadi, menggunakan --add-drop-database adalah masalah pilihan pribadi.Menyesuaikan hasil edit terakhir Anda, inilah yang sangat Anda butuhkan
Sekali lagi, saya katakan tolong baca semua opsi untuk mysqldump .
sumber
--add-drop-trigger
?