Saya memulihkan database 30GB dari file mysqldump ke database kosong di server baru. Saat menjalankan SQL dari file dump, pemulihan dimulai dengan sangat cepat dan kemudian mulai semakin lambat. Sisipan individual kini membutuhkan waktu 15+ detik. Tabel sebagian besar MyISAM dengan satu InnoDB kecil. Server tidak memiliki koneksi aktif lainnya. SHOW PROCESSLIST;
hanya menampilkan sisipan dari pemulihan (dan daftar proses tampilkan sendiri).
Adakah yang punya ide apa yang bisa menyebabkan pelambatan dramatis?
Apakah ada variabel MySQL yang dapat saya ubah untuk mempercepat pemulihan saat sedang berlangsung?
Jawaban:
Satu hal yang mungkin memperlambat proses adalah key_buffer_size , yang merupakan ukuran buffer yang digunakan untuk blok indeks. Tune ini setidaknya 30% dari RAM Anda atau proses pengindeksan ulang mungkin akan terlalu lambat
Untuk referensi, jika Anda menggunakan InnoDB dan kunci asing, Anda juga bisa menonaktifkan pemeriksaan kunci asing dan mengaktifkannya kembali di akhir (menggunakan
SET FOREIGN_KEY_CHECKS=0
danSET FOREIGN_KEY_CHECKS=1
).sumber
Tautan ini menunjukkan apa yang dapat dilakukan seseorang untuk mempercepat proses pemulihan.
http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
Satu dapat menempatkan menempatkan perintah di bagian atas file dump
Dan letakkan pernyataan ini di akhir file dump
Ini berhasil untuk saya. Selamat memulihkan :-)
sumber
cat pre.sql dump.sql post.sql | mysql ...
Satu-satunya alasan saya bisa membayangkan mengapa pemulihan secara bertahap akan melambat adalah pengindeksan. Selidiki mematikan pengindeksan sampai akhir dan kemudian biarkan melakukan banyak sekaligus.
sumber
Jika Anda memiliki salinan fisik dari file dump (direktori DB), Anda bisa menyalinnya ke server baru jika server baru memiliki versi MySQL yang sama dan itu akan berfungsi dengan baik. Ini berfungsi baik dengan MyISAM dan bagi saya saya pikir itu lebih baik daripada mengembalikan data berdasarkan pada file dump SQL logis.
sumber
jika Anda memiliki beberapa tabel kemungkinan Anda mungkin mendapat manfaat dari mk-parallel-restore .
sumber
Ini akan melakukan:
mysql --init-command = "SET SESSION FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;" -u root -p <Backup_Database.mysql
sumber
Saya menyarankan Anda,
AUTOCOMMIT=0
,UNIQUE_CHECKS=0
,FOREIGN_KEY_CHECKS=0
( DAN JANGAN LUPA ROLLBACK INI PERUBAHAN )mysql -u root -pPasss requests < mydb.sql
Semoga berhasil
sumber