Saya ingin membuat cadangan database, tetapi pada siang hari ketika ada beban di server. Sangat penting bahwa cadangan tidak memengaruhi apache dan database lain yang berjalan di server yang sama.
Seharusnya dimungkinkan untuk menggunakan perintah mysqldump , tetapi jalankan perintah dengan prioritas rendah.
Bagaimana saya bisa melakukan ini?
Pembaruan: Sepertinya hanya menggunakan nice dengan mysqldump tidak berfungsi karena mysqldump memunculkan proses baru.
Jawaban:
Jika Anda memiliki server cadangan di sekitarnya yang dapat mengatasi beban tulis server Anda, Anda dapat mengatur replikasi ke server itu, dan kemudian membuat cadangan dari server slave. Ini juga memiliki keuntungan bahwa Anda dapat menghentikan replikasi saat Anda melakukan pencadangan dan mendapatkan snapshot yang konsisten dari data Anda di semua basis data, atau semua tabel dalam satu basis data tanpa memengaruhi server basis data. Ini adalah pengaturan yang saya selalu rekomendasikan untuk membuat cadangan MySQL jika Anda memiliki sumber daya.
Sebagai bonus yang bagus, Anda sekarang memiliki budak read-only yang dapat Anda gunakan untuk permintaan yang berjalan lama.
sumber
mysqldump
akan menyebabkan kunci panjang ditahan atau tabel tidak sinkron.Andy, sekarang kurasa kau punya banyak waktu untuk menemukan solusi. Saya baru-baru ini datang dengan solusi untuk ini yang bekerja sangat baik untuk saya di tsheets , dan saya pikir saya akan membagikannya.
cstream adalah alat penanganan aliran untuk keperluan umum seperti UNIX dd, biasanya digunakan pada pipa yang dibangun dengan commandline. Hal yang membuat cstream berguna bagi kami adalah memungkinkan Anda menentukan bandwidth maksimum untuk semua input. Ini berarti Anda dapat membatasi disk IO dari perintah mysqldump Anda dengan perintah sederhana seperti ini:
Dengan anggapan Anda membuat cadangan database yang menggunakan semua tabel InnoDB, perintah di atas aman (tidak akan memengaruhi kueri lainnya) dan akan melakukan mysqldump Anda sambil membatasi disk-nya hanya baca satu megabyte per detik. Sesuaikan bandwidth dengan parameter -t ke nilai apa pun yang memungkinkan lingkungan Anda melakukan pencadangan tanpa memengaruhi pengalaman pelanggan Anda.
sumber
FWIW Anda juga harus dapat melakukan ini dengan pv ( http://linux.die.net/man/1/pv )
mysqldump --satu transaksi - cepat -u -p | pv --rate-limit 1m> tujuan (atau | nc atau | tar cfj backup.bz2 -)
Yang menyenangkan tentang ini adalah berbagai opsi untuk memantau kemajuan dan opsi -R yang memungkinkan Anda untuk meneruskan opsi ke proses yang sudah berjalan, misalnya; --rate-limit untuk mengubah laju transfer.
sumber
jika Anda menggunakan innodb, Anda dapat mencoba xtrabackup dengan opsi --thottottle .
Anda juga bisa melihat ionice dan menjalankan mysqldump dengannya.
atau mungkin Anda ingin mengaktifkan log biner di mysql dan menjalankan dump penuh sekali per minggu / malam, sambil menyalin bin-log ke lokasi aman setiap 1-2 jam. dan .. read-only slave untuk keperluan cadangan saja juga merupakan opsi.
sumber
Jika Anda menjalankannya di Linux, atau varian * nix lain Anda dapat melakukannya dengan yang berikut:
bagus -n ## mysqldump
Ini akan memberikan prioritas penjadwalan yang lebih rendah. Penjadwalan rentang prioritas dari -20 (prioritas tertinggi) hingga 19 (prioritas terendah) standar untuk nice adalah 10 jika argumen -n dihilangkan ..
sumber
cron.d / mysql_dump:
ionice untuk prioritas I / O dan bagus untuk prioritas cpu.
Jalankan vmstat 5, periksa kolom yang mengatakan WA. Nilai tinggi berarti CPU sedang menunggu I / O. Gunakan ionice, jika hanya memuat CPU, gunakan bagus.
Tanggapan untuk memperbarui:
Sepertinya kamu benar. Itu memanggil mysql yang tidak niced. Saya kira Anda bisa menggunakan renice untuk ini dan mengatur nilai bagus setelah dijalankan.
Saya tidak memiliki database yang cukup besar untuk membuang atm untuk membuat skrip yang berguna bagi Anda.
Replikasi, seperti yang disarankan tautan Anda, adalah salah satu cara untuk melangkah. Replikasi, berhenti, dan buang, pada host anthoer.
sumber
Letakkan data MySQL Anda pada LV, dan gunakan tugas mylvmbackup yang telah diambil yang mengambil snapshot dari LV dan menyusun file data MySQL. Dengan cara ini Anda tidak mengunci tabel, meminimalkan dampak pada aplikasi Anda hanya untuk memuat IO.
sumber
Anda selalu dapat mencoba untuk tidak menjalankannya selama jam sibuk. Apa pun prioritas yang Anda gunakan, tempat sampah masih akan membutuhkan kunci di semua meja Anda.
sumber