Saat ini saya dapat melakukan backup menggunakan mysqldump. Tapi saya harus mencatat server web DAN dibutuhkan sekitar 5 menit untuk melakukan backup. Jika saya tidak menghapus server web, ini akan berlangsung selamanya dan tidak pernah selesai + situs web menjadi tidak dapat diakses selama pencadangan.
Apakah ada cara yang lebih cepat / lebih baik untuk membuat cadangan 22 GB saya dan mengembangkan basis data?
Semua tabel adalah MyISAM.
Jawaban:
Iya nih.
Atur replikasi ke mesin kedua. Ketika Anda perlu melakukan backup, Anda dapat mengunci mesin sekunder, melakukan mysqlhotcopy atau mysqldump, dan kemudian membuka kunci. Ini akan mengejar ketinggalan dengan tuanmu, dan kamu tidak perlu membuat tuan offline.
Anda bahkan dapat melakukan ini pada mesin yang sama, jika Anda tidak keberatan menggandakan penulisan I / O, tetapi idealnya Anda harus mencadangkannya secara real-time ke server fisik kedua, dan mengambil cadangan snapshot Anda sesering yang Anda butuhkan. tanpa mengganggu server produksi Anda.
Secara teori juga memungkinkan untuk mengembalikan database menggunakan status dan binlog yang dikenal. Saya belum pernah melakukannya, jadi silakan selidiki terlebih dahulu, tetapi Anda dapat membuat cadangan yang diketahui dari basis data Anda, kemudian hanya mencadangkan semua binlog baru dan memutar ulang mereka jika Anda perlu memulihkannya. Karena binlog ditulis secara linear, rsyncing binlog baru ke komputer jarak jauh akan sangat cepat.
Sunting: Memang, sepertinya menggunakan binlog untuk cadangan didokumentasikan.
Pertanyaan ini sangat terkait
sumber
Maafkan saya karena menganggap OS adalah Linux. Jika Anda tidak menggunakan LVM, Anda seharusnya. Jika ya, berikut adalah cara yang sangat sederhana untuk membuat cadangan melalui snapshot.
Ini akan memungkinkan Anda untuk membuat cadangan setiap malam tanpa harus menambahkan server pendukung. Saya sangat mendukung memiliki server budak untuk Ketersediaan Tinggi, tetapi saya tidak ingin Anda berpikir bahwa Anda terjebak sampai Anda dapat membuat budak itu.
sumber
FLUSH TABLES DENGAN READ LOCK bukanlah sesuatu yang ingin Anda lakukan secara reguler (atau bahkan semi-reguler) pada sistem produksi. Itu harus menjadi pilihan terakhir saja.
Siapkan setidaknya dua budak replikasi (ini tentu saja memerlukan FLUSH TABLES WITH READ LOCK). Setelah diatur, Anda dapat mengambil cadangan salah satunya sementara yang lainnya tetap sinkron sebagai master cadangan.
Juga, jika salah satu budak Anda gagal, Anda dapat menggunakan snapshot dari sana untuk membangun kembali budak kedua (atau ketiga). Jika semua budak Anda gagal, Anda kembali ke FLUSH TABLES WITH READ LOCK.
Ingatlah untuk selalu memiliki proses yang secara teratur memeriksa data yang disinkronkan - gunakan sesuatu seperti mk-table-checksum untuk melakukan ini (ini tidak perlu diatur, bacalah dokumentasi Maatkit untuk perincian).
Karena 22 GB relatif kecil, Anda tidak akan mengalami masalah dalam melakukan ini. Melakukannya dengan database besar bisa lebih bermasalah.
sumber
Solusi di sini ada dua, seperti dijelaskan di atas:
Perhatikan bahwa jika Anda menggunakan InnoDB untuk tabel Anda, Anda dapat menggunakan flag --single-transaction untuk menghindari keharusan melakukan kunci tabel dan masih mendapatkan dump database yang konsisten, bahkan pada master, dan dengan demikian melakukan backup Anda tanpa mencatat server. Solusi di atas, bagaimanapun, adalah yang lebih baik.
Juga, jika Anda menggunakan LVM di Linux, Anda dapat mengambil snapshot LVM dari partisi, lalu kembali. Snapshots LVM adalah atom, jadi jika Anda melakukan 'flush tables with read lock' dan kemudian mengambil snapshot Anda dan membuka kunci, Anda akan mendapatkan snapshot yang konsisten.
Jika Anda khawatir tentang pertikaian I / O yang membuat dump terlalu lama, Anda dapat menambahkan mesin ketiga dan menjalankan mysqldump pada yang melalui jaringan untuk menghindari meronta-ronta disk Anda.
sumber
Bergantung pada lingkungan Anda, foto biasanya merupakan cara terbaik untuk memotret. Terutama jika Anda harus membuat cadangan master untuk beberapa alasan. Kami menjalankan pasangan master dan slave, dan menggunakan cadangan snapshot pada keduanya.
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
Dengan tabel InnoDB, Anda ingin menjalankan
SET AUTOCOMMIT=0;
sebelum menjalankan kunci baca.sumber
Lihat " Praktik terbaik untuk membuat cadangan basis data produksi MySQL? ". Ini adalah pos serupa di Stack Overflow.
sumber
Anda bisa melakukan pencadangan bertahap. Cadangkan 1/24 catatan setiap jam. Satu-satunya masalah dengan pendekatan ini adalah jika crash selama beberapa jam pertama hari itu, Anda akan kehilangan apa pun dari waktu itu hingga waktu crash. Either way, itu kurang dari 24 jam catatan hilang (saya tidak tahu betapa pentingnya bagi Anda).
sumber