Anda akan menemukan ini mengejutkan, tetapi Anda hanya perlu satu opsi utama: --opt
Apa itu --opt ?
Opsi ini, diaktifkan secara default, adalah singkatan untuk kombinasi --add-drop-table --add-locks --create-options --disable- keys --extended-insert --lock-tables --quick - set-charset . Ini memberikan operasi dump cepat dan menghasilkan file dump yang dapat dimuat ulang ke server MySQL dengan cepat.
Karena opsi - -opt diaktifkan secara default , Anda hanya menentukan kebalikannya, --skip-opt untuk mematikan beberapa pengaturan default. Lihat pembahasan grup opsi mysqldump untuk informasi tentang mengaktifkan atau menonaktifkan sebagian pilihan yang dipengaruhi oleh --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
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
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
Saya telah memperbarui perintah mysqldump saya (silakan lihat edit saya). Saya punya pertanyaan terakhir. Apakah menurut Anda layak menggunakan semua argumen berikut juga? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Melihat komentar Anda dan edit terakhir Anda, mari kita lihat masing-masing opsi ini dan lihat apakah Anda membutuhkannya
- --opt : Saya sudah mengatakan Anda tidak perlu menentukannya karena diaktifkan secara default.
- --delayed-insert : Saya tetap menjauh dari ini dengan semua database InnoDB. Bahkan, saya dengan tegas menjauh dari PERIODE ini !!! . Karena 1) dimungkinkan untuk INSERT DELAYED dapat kehilangan data, 2) dikonversi menjadi INSERT untuk MySQL Replication slave, 3) ada laporan bug terbuka tentang penggunaannya dengan pemicu di MySQL 5.6 dan tidak dianggap sebagai bug , 4 ) itu ditinggalkan dalam MySQL 5.6, dan 5) Morgan Tocker (MySQL Guru terkenal) meramalkan depresiasi kembali pada tahun 2012 , Anda harus melupakan opsi ini pernah ada. Jangan pernah, tidak pernah (tak terhingga) menggunakannya !!!
- --complete-insert : Ini akan digunakan
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
sebagai ganti INSERT INTO tblname VALUES ...
. Ini bisa mengasapi mysqldump jika ada banyak kolom dalam definisi tabel dan banyak baris dalam tabel. Jangan gunakan itu.
- --add-drop-table : Karena --opt mengaktifkannya untuk Anda, Anda tidak perlu menentukannya.
- --add-drop-database : Jika Anda menjatuhkan --add-drop-database , itu hanya membuat
DROP TABLE IF EXISTS
(yang ditambahkan oleh --add-drop-table ) berjalan lebih cepat. Tidak menggunakannya cukup memungkinkan DROP TABLE IF EXISTS
terjadi untuk setiap tabel. Jadi, menggunakan --add-drop-database adalah masalah pilihan pribadi.
- --tz-utc : Jika Anda berencana untuk mengembalikan data ke server yang sama dengan cadangan, Anda tidak perlu --tz-utc . Jika Anda mengembalikan data ke pusat data lain di zona waktu yang berbeda dan ...
- jika Anda ingin menyimpan zona waktu yang sama dengan cadangan, Anda tidak perlu --tz-utc .
- jika Anda ingin data menggunakan zona waktu dari pusat data baru, Anda perlu --tz-utc .
- CONTOH: Katakanlah Anda membuat cadangan basis data di New York. Itu EST. Jika Anda memiliki pusat data lain di Seattle, itu adalah PST. Jika Anda ingin Cadangan New York dipulihkan di Seattle dan Anda ingin cap waktu dalam database tetap mewakili New York, Anda tidak ingin menggunakan --tz-utc .
- --default-character-set
Menyesuaikan hasil edit terakhir Anda, inilah yang sangat Anda butuhkan
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Sekali lagi, saya katakan tolong baca semua opsi untuk mysqldump .