Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apa cara tercepat untuk membuang &memuat database MySQL InnoDB menggunakan mysqldump?

SEGERA membuang database yang diam:

Menggunakan opsi "-T" dengan mysqldump menghasilkan banyak file .sql dan .txt di direktori yang ditentukan. Ini ~50% lebih cepat untuk membuang tabel besar daripada satu file .sql dengan pernyataan INSERT (membutuhkan waktu 1/3 lebih sedikit).

Selain itu, ada manfaat besar saat memulihkan jika Anda dapat memuat beberapa tabel secara paralel, dan menjenuhkan banyak inti. Pada kotak 8-inti, ini bisa menjadi perbedaan 8X dalam waktu jam dinding untuk memulihkan dump, di atas peningkatan efisiensi yang disediakan oleh "-T". Karena "-T" menyebabkan setiap tabel disimpan dalam file terpisah, memuatnya secara paralel lebih mudah daripada memisahkan file .sql besar.

Mengambil strategi di atas ke ekstrem logisnya, seseorang dapat membuat skrip untuk membuang database secara paralel. Nah, itulah yang Maakit mk-parallel-dump (lihat http:/ /www.maatkit.org/doc/mk-parallel-dump.html ) dan alat mk-parallel-restore adalah; skrip perl yang membuat banyak panggilan ke program mysqldump yang mendasarinya. Namun, ketika saya mencoba menggunakan ini, saya mengalami kesulitan menyelesaikan pemulihan tanpa kesalahan kunci duplikat yang tidak terjadi dengan dump vanilla, jadi ingatlah bahwa jarak tempuh Anda mungkin berbeda.

Membuang data dari database LANGSUNG (tanpa gangguan layanan):

Sakelar --single-transaction sangat berguna untuk mengambil dump database langsung tanpa harus mendiamkannya atau mengambil dump database budak tanpa harus berhenti bekerja.

Sayangnya, -T tidak kompatibel dengan --single-transaction, jadi Anda hanya mendapatkannya.

Biasanya, mengambil dump jauh lebih cepat daripada mengembalikannya. Masih ada ruang untuk alat yang mengambil file dump monolitik yang masuk dan memecahnya menjadi beberapa bagian untuk dimuat secara paralel. Sepengetahuan saya, alat seperti itu belum ada.

Mentransfer dump melalui Jaringan biasanya menguntungkan

Untuk mendengarkan dump yang masuk pada satu host yang dijalankan:

nc -l 7878 > mysql-dump.sql

Kemudian pada host DB Anda, jalankan

mysqldump $OPTS | nc myhost.mydomain.com 7878

Ini mengurangi pertengkaran untuk spindel disk pada master dari menulis dump ke disk sedikit mempercepat dump Anda (dengan asumsi jaringan cukup cepat untuk mengikuti, asumsi yang cukup aman untuk dua host di pusat data yang sama). Plus, jika Anda sedang membangun budak baru, ini menghemat langkah karena harus mentransfer file dump setelah selesai.

Peringatan - jelas, Anda harus memiliki bandwidth jaringan yang cukup untuk tidak memperlambat segalanya, dan jika sesi TCP terputus, Anda harus memulai dari awal, tetapi untuk sebagian besar dump, ini bukan masalah utama.

Terakhir, saya ingin menjernihkan satu titik kebingungan umum.

Terlepas dari seberapa sering Anda melihat tanda-tanda ini dalam contoh dan tutorial mysqldump, tanda-tanda ini berlebihan karena AKTIF secara default:

  • --opt
  • --add-drop-table
  • --add-locks
  • --create-options
  • --disable-keys
  • --extended-insert
  • --lock-tables
  • --quick
  • --set-charset .

Dari http://dev.mysql.com/doc/refman/ 5.1/en/mysqldump.html :

Dari perilaku tersebut, "--quick" adalah salah satu yang paling penting (lewati caching seluruh hasil yang ditetapkan di mysqld sebelum mentransmisikan baris pertama), dan dapat dengan "mysql" (yang TIDAK mengaktifkan --quick secara default) untuk secara dramatis mempercepat kueri yang mengembalikan kumpulan hasil besar (mis. membuang semua baris tabel besar).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menghasilkan nilai acak unik untuk setiap pengguna di laravel dan menambahkannya ke database

  2. Bagaimana saya bisa menulis SQL untuk tabel yang memiliki nama yang sama dengan kata kunci yang dilindungi di MySql?

  3. MySQL - temukan perbedaan antara baris tabel yang sama

  4. Memperbarui beberapa kolom tabel MySQL menggunakan array dengan PDO

  5. Pencarian Php Mysql Antara Dua Tanggal