Dalam proses menciptakan solusi otomatis untuk membuat cadangan dan memulihkan seluruh server MySQL , saya telah menemukan mysql
database yang tampaknya berisi akun pengguna, izin, metadata, hal semacam itu. Haruskah basis data ini didukung? Akankah mencadangkan dan mencoba mengembalikannya merusak?
Aku punya waktu Googling untuk "mysql mencadangkan database mysql" seperti yang dapat Anda bayangkan.
mysql
backup
database
backup-restoration
database-backup
Daniel Beardsley
sumber
sumber
Jawaban:
Berikut ini sesuatu yang menarik untuk dipertimbangkan: Mencadangkan
mysql
basis data sangat membatasi Anda karena Anda hanya dapat mengembalikan basis data tersebut ke versi mysql yang sama dengan tempat Anda menjalankan pencadangan. Inilah alasannya:Berikut ini adalah mysql.user dari MySQL 5.0.45
Berikut ini adalah mysql.user dari MySQL 5.1.32
Berikut ini adalah mysql.user dari MySQL 5.5.12
Jika Anda mencoba mengembalikan mysql.user ke versi MySQL yang tidak dimaksudkan untuknya, itu akan menghasilkan masalah izin acak. Cara untuk mencadangkan izin pengguna mysql dalam cara versi-agnostik adalah dengan membuang hibah pengguna dalam SQL. Dengan begitu, hibah pengguna sepenuhnya portabel. Ada dua cara untuk mencapai ini:
OPSI # 1: Menggunakan MAATKIT
mk-show-grants akan menghasilkan SQL yang dibutuhkan apa pun contoh mysql yang Anda sambungkan. (Perlu diingat bahwa MAATKIT sedang dimigrasi ke Percona Toolkit. Alat ini kemungkinan besar akan disebut pt-show-grants).
OPSI # 2: Script dumping dari SQL GRANTS
Saya telah menulis emulasi saya sendiri dari mk-show-grants. Itu akan meninggalkan pengguna anonim. Ini terlihat seperti ini:
Menggunakan salah satu dari opsi ini akan membuat cadangan yang lebih stabil dari hibah pengguna.
PADA CATATAN TERPISAH
Sekarang jika Anda menggunakan opsi log-output ini
database mysql akan mengisi log lambat (jika diaktifkan) sebagai tabel mysql dalam skema mysql daripada file teks. Jadi, melakukan backup fisik akan mencakup log berbasis tabel mysql tersebut. Percayalah, itu tidak sebanding dengan ruang disk jika log umum dan log kueri lambat diaktifkan dan menumpuk di skema mysql. Tetap gunakan Opsi Dump MySQL Grants.
UPDATE 2011-09-19 15:54 EDT
Ada satu faktor yang sangat penting dalam menjaga cadangan izin MySQL melalui SQL Grants:
Setiap pengguna keluar dengan kata sandi mereka dalam beberapa format MD5 yang dimodifikasi. Untuk mysql 4.0 dan kembali, ini adalah string heksadesimal 16 karakter. Untuk mysql 4.1+, ini adalah 41 karakter (Tanda bintang diikuti oleh string heksadesimal 40 karakter).
Sebelum Anda mengembalikan dump SQL Grants, periksa file dump SQL Grants untuk kata sandi heksadesimal 16 karakter. Jika Anda melihat satu saja, Anda harus menambahkan yang berikut ini ke /etc/my.cnf (atau my.ini untuk Windows) di server mysql yang akan Anda kembalikan ke:
The old_password direktif memungkinkan 16-char dan 41-char password untuk hidup berdampingan dan benar mengotentikasi dalam contoh menjalankan mysql yang sama. Kata sandi apa pun yang dibuat akan terdiri dari 16 karakter.
Restart MySQL tidak diperlukan. Jalankan saja ini:
sumber
SHOW GRANTS
generasi SQL menggunakanQUOTE()
, seperti ini:SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
Ya, Anda pasti ingin membuat cadangan
mysql
basis data - ini merupakan bagian integral dari layanan Anda. Meskipun Anda dapat merekonstruksi kontennya dari informasi lain, kesulitan untuk melakukannya adalah penghalang jika Anda mencoba kembali ke layanan dengan cepat.sumber
Anda dapat mengembalikan database mysql di antara versi, setidaknya versi yang cukup baru. Ada alat yang disebut
mysql_upgrade
termasuk dalam versi baru MySQL yang akan memutakhirkan tabel sistem untuk Anda.http://dev.mysql.com/doc/refman/5.0/id/mysql-upgrade.html
sumber
Selama Anda mengembalikan ke versi mysql yang serupa, Anda dapat memulihkan dari database mysql dari cadangan. Jika Anda ragu, buat perbedaan antara skema database mysql (yang dari cadangan dan yang dari server mysql baru).
sumber