Haruskah saya menggunakan mysqldump atau mysqlhotcopy untuk backup database MySQL?

14

Saya memiliki blog WordPress yang berjalan di database MySQL yang ingin saya buat cadangannya secara teratur. Apakah lebih baik menggunakan program mysqldump atau skrip mysqlhotcopy untuk membuat cadangan? Apa pro dan kontra dari masing-masing? Apakah ada opsi lain yang harus saya pertimbangkan?

Matthew Shanley
sumber

Jawaban:

5

Saya dapat memberi tahu Anda bahwa saat ini saya menggunakan mysqldump untuk memelihara cadangan database saya. Saya melakukan ini karena tujuan saya adalah menyimpan cadangan mingguan sehingga jika seseorang menghapus laman webnya, saya dapat memulihkannya paling banyak seminggu yang lalu.

Hal yang baik tentang ini adalah bahwa ini adalah file teks dasar sehingga saya dapat mengimpornya ke komputer dengan MySQL, memuatnya, dan mencari-cari data yang hilang. Catatan: untuk mendapatkan apa yang saya inginkan, perintah yang saya gunakan dalam skrip saya adalah ini:

mysqldump --databases databaseName > /file/path

Inilah --databasesyang membuat mysqldump membuang CREATE DATABASE IF NOT EXISTheader sehingga saya dapat mengimpornya di mana pun saya inginkan.

Walaupun metode ini bekerja untuk saya, saya yakin ada metode yang lebih baik di luar sana untuk tujuan lain. Saya juga dapat mengatakan bahwa, untuk solusi pencadangan apa pun, Anda harus menyimpannya setidaknya di komputer lain, dan sebaiknya di luar lokasi (kami ada di cloud) jika Anda bisa.

Mike
sumber
5

Saya akan mempertimbangkan menggunakan plugin WordPress yang disebut "Cadangan Database WordPress (WP-DB-Backup)" yang juga tercantum pada panduan cadangan Basis Data Wordpress . Plugin ini dapat mencadangkan basis data sesuai jadwal dan mengirimkannya kepada Anda melalui email (dengan asumsi basis datanya kecil). Anda juga dapat mencadangkannya secara lokal. Anda dapat mengecualikan spam komentar dan revisi untuk membuat DB lebih kecil

Kurang kontrol tetapi lebih mudah diimplementasikan.

MySQL dumps memberi Anda kontrol paling besar . Layanan hosting Anda juga bisa menjadi faktor pembatas. Beberapa host tidak memberi Anda akses untuk menjalankan pekerjaan cron atau menjalankan perintah mysqldump.

citadelgrad
sumber
4

SARAN # 1

Jika Anda melakukan backup MySQL Instance, yang terbaik adalah mengatur MySQL Replicaton sehingga setiap beban server atau menambah disk I / O tidak memengaruhi database produksi Anda.

Setelah Anda mengatur Replikasi MySQL, Anda dapat membuat skrip mysqldump dengan cara yang berbeda ( Silakan lihat posting saya di DBA StackExchange untuk berbagai teknik ), selama Anda menjalankan mysqldumps pada Slave.

SARAN # 2

Jika Anda tidak dapat mengatur server lain untuk Replikasi MySQL dan semua data Anda adalah InnoDB, Anda harus melakukan mysqldump point-in-time. Ini dilakukan menggunakan --single-transactionopsi dengan mysqldump. Jadi, jika Anda menjalankan mysqldump mulai dari tengah malam dan cadangan berakhir pada 12:15, output mysqldump ketika dipulihkan mencerminkan data pada pukul 12:00.

SARAN # 3

Program lain yang tersedia untuk Cadangan MySQL adalah XtraBackup dari Percona.

XtraBackup adalah alat komprehensif yang berperilaku seperti rsync tetapi memiliki tujuan hidup. Itu bisa mulai menyalin semua data dan tablespace InnoDB. Ini memiliki kemampuan untuk membuat pos pemeriksaan secara internal dan melakukan in-place pemulihan crash InnoDB untuk membantu mendapatkan cadangan point-in-time yang sempurna. XtraBackup juga memiliki fitur tambahan yang memungkinkan untuk membuat cadangan tambahan. Fitur tambahan lainnya adalah pembuatan file log InnoDB, juga dibangun oleh pemulihan kerusakan di tempat. Ada juga beberapa perangkat lunak pembungkus untuk menyediakan salinan beku dari tabel MyISAM juga.

Ia melakukan bagian belakang MySQL Instance, tetapi dengan perbedaan yang berbeda. Titik waktu cadangan didasarkan pada kapan cadangan selesai dan bukan saat dimulai. Jadi, jika Anda menjalankan XtraBackup mulai dari tengah malam dan cadangan berakhir pada 12:15, output mysqldump ketika dipulihkan mencerminkan data pada 12:15.

RolandoMySQLDBA
sumber
2

Tergantung pada mesin penyimpanan Anda untuk tabel Anda. Ini hanya berfungsi untuk tabel ARCHIVE dan MyISAM sesuai dengan Halaman Manual MySQL ini dan harus dijalankan pada mesin yang sama (yaitu tidak menggunakan soket lokal atau TCP / IP)

MySQL juga mengatakan

Jika Anda melakukan pencadangan di server dan semua tabel Anda adalah tabel MyISAM, pertimbangkan untuk menggunakan mysqlhotcopy sebagai gantinya karena dapat mencapai pencadangan yang lebih cepat dan pengembalian yang lebih cepat.

Aiden Bell
sumber
1

Saya sarankan menggunakan salah satu dari banyak skrip cadangan mySQL yang sudah ada sebelumnya untuk menghilangkan rasa sakit karena memperbaikinya.

Saya menggunakan "automysqlbackup" yang merupakan skrip shell open-source yang dapat ditetapkan sebagai tugas cron di server. Ini mencakup hampir setiap situasi cadangan yang mungkin terjadi: http://sourceforge.net/projects/automysqlbackup/ . Ini telah bekerja dengan sempurna untuk saya selama beberapa tahun - sangat direkomendasikan.

Mark Hatton
sumber
1

mysqlhotcopy adalah skrip Perl sekitar '05. Jadi itu menambah dependensi, untuk Perl dan berbagai Perl. Saya akan meneruskan yang ini.

mysqldump adalah program C yang didistribusikan dengan MySQL dan dipelihara secara aktif. Jika Anda menambahkan opsi -x itu mengunci tabel sehingga Anda menjadi emas.

Saya pribadi memiliki skrip ini di cron (Anda ingin menghapus `pelarian itu jika Anda ingin menjalankannya dengan tangan) dan ini berfungsi seperti pesona bagi saya, membuat cadangan setiap basis data saya ke file lokal, serta dump penuh semua database.

Dan jika Anda memiliki lebih dari satu basis data di sana, Anda juga ingin membuang hibah untuk mereka. Maatkit akan membantu Anda di sana, dan Anda hanya mk-show-grants -uroot -pPASSWORD > mygrantsdatabase.sqlperlu mencadangkan tabel hibah dan siap untuk mengimpor lagi.

intlect
sumber
0

Saya juga tahu bahwa sejumlah alat manajemen server seperti Interworx dan Ensim menggunakan mysqldump untuk membuat cadangan basis data dan kemudian perintah mysql sederhana untuk memulihkan. Dari sini akan saya duga bahwa ini adalah salah satu cara terbaik.

Darryl Hein
sumber