Impor besar lewat antarmuka web hampir selalu gagal: batas unggahan, waktu jalan, atau batas waktu permintaan menghentikannya di tengah jalan. Impor dari baris perintah, dan tak satu pun dari itu berlaku.
mysql -u user -p dbname < dump.sql
# or, compressed
zcat dump.sql.gz | mysql -u user -p dbname
Buatlah ia cepat
# at the top of the session
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
-- import --
SET foreign_key_checks=1;
SET unique_checks=1;
COMMIT;
Sebagian besar waktu sebuah impor besar habis untuk memeriksa batasan dan menuliskan ke cakram sesudah tiap baris. Mematikan itu untuk cadangan yang Anda percayai lalu menyalakannya lagi sesudahnya, secara rutin mengubah berjam-jam menjadi beberapa menit.
Hanya pada cadangan yang Anda percayai dan pada basis data yang tak sedang ditulisi hal lain. Dengan pemeriksaan kunci asing dimatikan, cadangan yang rusak akan memasukkan data yang rusak tanpa suara.
Awasi ia berjalan
pv dump.sql | mysql -u user -p dbname
pv menampilkan bilah kemajuan dan perkiraan waktunya. Tanpa itu, impor yang lama tak bisa dibedakan dari impor yang menggantung, dan orang pun membunuhnya di tengah jalan — yang lebih buruk daripada menunggu.
Kalau ia gagal di tengah jalan
- Cakram habis — basis datanya perlu ruang untuk datanya DAN untuk berkas sementaranya. Periksalah
df -hsebelum mulai. - MySQL server has gone away — ada satu baris yang lebih besar daripada max_allowed_packet. Naikkan nilainya:
max_allowed_packet = 256M. - Unknown collation — cadangannya berasal dari MySQL yang lebih baru. Naikkan versinya, atau tulis ulang kolasinya di dalam berkas itu.
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql
Imporlah ke basis data yang kosong, bukan menimpa yang sedang berjalan. Kalau ia gagal separuh jalan, yang Anda punya adalah salinan setengah terimpor yang tinggal dibuang, bukan situs yang setengah hancur.