BACKUP dan RECOVERY DATABASE
Backup database sangat penting untuk menjaga keamanan data jika terjadi masalah.
Sehingga kita dapat memulihkan data dan bisa membuat atau menjalankan lagi.
MySQL menawarkan berbagai strategi backup yang dapat dipilih untuk menentukan
metode yang terbaik sesuai dengan persyaratan kondisi yang dibutuhkan
Membuat backup dengan menyalin file
Tabel MyISAM disimpan sebagai file, sehingga mudah untuk melakukan backup dengan menyalin file. Untuk mendapatkan cadangan konsisten, melakukan LOCK TABLES relevan pada tabel, diikuti oleh FLUSH TABLES untuk tabel. Kita hanya perlu read/baca kunci; ini memungkinkan pelanggan lain untuk melanjutkan ke tabel permintaan yang dimana kita sedang membuat salinan file dalam direktori database.
Yang FLUSH TABLES pernyataan diperlukan untuk memastikan bahwa semua aktif
indeks halaman ditulis ke disk sebelum kita memulai cadangan.
Membuat teks delimited-file backup
Untuk membuat sebuah file teks yang berisi tabel data, kita dapat menggunakan
SELECT * INTO OUTFILE ' file_name ' FROM tbl_name.
File yang dibuat pada server MySQL host, bukan klien host.
Untuk pernyataan ini, output file dapat tidak
memungkinkan karena sudah ada file yang akan ditimpa akan menimbulkan risiko
keamanan. Metode ini berfungsi untuk semua jenis file data, tetapi hanya akan
menyimpan tabel data, bukan struktur tabel.
Untuk kembali file keluaran, menggunakan LOAD DATA INFILE atau mysqlimport.
Membuat backup dengan mysqldump atau mysqlhotcopy
Teknik lain untuk membuat cadangan database adalah untuk menggunakan
mysqldump program atau mysqlhotcopy skrip. Mysqldump lebih umum karena
dapat membuat cadangan semua jenis tabel. Mysqlhotcopy bekerja hanya dengan
beberapa penyimpanan mesin.
Buat salinan lengkap dari databasenya :
shell> mysqldump --tab= /path/to/some/dir --opt db_nameAtau:
shell> mysqlhotcopy db_name /path/to/some/dir
Kita juga dapat membuat cadangan binari hanya dengan menyalin semua file tabel
*.frm *.MYD dan *.MYI file), sepanjang server tidak memperbarui apapun.
Yang mysqlhotcopy skrip menggunakan metode ini.
(Tetapi dicatat bahwa metode ini tidak bekerja jika Anda berisi database InnoDB tabel. InnoDB tidak selalu menyimpan isi tabel dalam database direktori, dan mysqlhotcopy bekerja hanya untuk yISAM
dan ISAM tabel.)
Untuk InnoDB meja, ada kemungkinan untuk melakukan online cadangan yang tidak terkunci.
Menggunakan binary log untuk mengaktifkan incremental backup
MySQL mendukung incremental backup: kita harus mulai dengan server --log-bin
pilihan untuk mengaktifkan logging binari.Binari file-file log anda dengan
memberikan informasi yang kita butuhkan untuk menjawab perubahan ke database
yang dibuat menyusul ke titik di mana kita melakukan cadangan.
Pada saat kita ingin membuat cadangan incremental (berisi semua perubahan yang terjadi sejak terakhir penuh atau incremental backup), kita harus memutar binari log dengan menggunakan
FLUSH LOGS.
Hal ini dilakukan, karena kita perlu menyalin ke lokasi cadangan semua binari log yang berkisar dari salah satu momen terakhir penuh atau untuk memperoleh cadangan terakhir tetap satu.
Log biner ini adalah memperoleh cadangan kembali di waktu kita menerapkannya.
Selanjutnya ketika kita melakukan full backup, kita juga harus memutar binari login menggunakan FLUSH LOGS mysqldump - siram-log, atau mysqlhotcopy - flushlog.
Snapshot Backup
Beberapa filesystem implementasi mengaktifkan "snapshot" yang akan diambil.
Ini memberikan salinan logis filesystem di suatu titik waktu, tanpa harus secara fisik
menyalin seluruh filesystem. (Misalnya, pelaksanaan dapat menggunakan salinan-onteknik
menulis sehingga hanya bagian filesystem dimodifikasi setelah snapshot memerlukan waktu ditirukan.)
MySQL sendiri tidak menyediakan kemampuan untuk mengambil snapshot filesystem. Ini tersedia melalui pihak ketiga solusi seperti Veritas atau LVM.
Jika anda menggunakan filesystem Veritas, Anda dapat membuat cadangan seperti ini:
1. Dari sebuah program klien, jalankan FLUSH TABLES WITH READ LOCK
2. Dari shell lain, melakukan mount vxfs snapshot
3. Dari pertama klien, jalankan UNLOCK TABLES
4. Copy file dari snapshot.
5. Unmount snapshot
Online dan offline backup
Online backup dilakukan sementara server MySQL sedang berjalan sehingga database
informasi dapat diperoleh dari server. Offline backup dilakukan saat server dihentikan.
(Perbedaan ini dapat juga digambarkan sebagai "panas" versus "dingin"
backup; yang "hangat" adalah satu cadangan di mana server tetap berjalan tetapi
dikunci terhadap memodifikasi data Anda akses sementara file basis data eksternal.)
Titik dalam waktu pemulihan
Satu menggunakan binari untuk login adalah untuk mencapai titik-dalam-waktu pemulihan.
Hal ini dapat dilakukan dengan pemulihan pertama dari file cadangan untuk dikembalikan ke server dengan negara ketika cadangan dibuat, dan kemudian kembali oleh-perubahan dalam menjalankan binari ditulis kemudian file-file log untuk langkah modifikasi
data sampai ke titik yang dikehendaki dalam waktu.
Jika Anda telah mengembalikan tabel MyISAM yang telah menjadi rusak, bisa
mencoba untuk kembali menggunakan REPAIR TABLE atau myisamchk-r pertama.
Yang harus bekerja di 99,9% dari semua kasus. Jika myisamchk gagal,
coba prosedur berikut. Hal ini diduga bahwa Anda telah mengaktifkan binari
logging oleh MySQL dimulai dengan --log-bin pilihan.
1. Asli mysqldump cadangan, atau binari cadangan.
2. Jalankan perintah berikut untuk kembali menjalankan pembaruan dalam log
biner:
shell> mysqlbinlog binlog.[0-9]* | mysql
Dalam beberapa kasus, Anda mungkin ingin kembali menjalankan binari
tertentu hanya log, dari posisi tertentu (biasanya Anda ingin kembali menjalankan
semua binari log dari tanggal dipulihkan cadangan, kecuali mungkin beberapa pernyataan salah).
Cadangan penjadwalan, kompresi, dan enkripsi
Cadangan penjadwalan adalah berharga untuk Automating cadangan prosedur.
Kompresi dari cadangan output mengurangi ruang, dan output dari enkripsi
memberikan keamanan yang lebih baik dari akses yang tidak diizinkan didukungup
data. MySQL sendiri tidak menyediakan kemampuan ini.
Ibbackup dapat memampatkan InnoDB backup, kompresi dan enkripsi atau dari cadangan output
dapat dicapai dengan menggunakan utilitas filesystem. Lain pihak ketiga solusi mungkin tersedia.
Tabel pemeliharaan
Integritas data dapat tercemar jika tabel menjadi rusak. MySQL menyediakan
program untuk memeriksa meja dan mereka harus memperbaiki masalah ditemukan.
Program-program ini berlaku terutama untuk table MyISAM.
Implementasi Backup dan Recovery
Langkah1:
Buat terlebih dahulu databasenya dengan menggunakan perintah
CREATE DATABASE.
mysql> create database latihdb;Langkah 2:
Query OK, 1 row affected (0.11 sec)
mysql> use latihdb;
Database changed
Selanjutnya buatlah dua buah tabel contoh (misalnya PEGAWAI dan JABATAN)
dengan
menggunakan perintah SQL di bawah ini.
mysql> create table jabatan (Langkah 3:
-> kode_jabatan char(4) not null,
-> nama_jabatan varchar(25) not null,
-> constraint pk_jabatan primary key(kode_jabatan)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> create table pegawai (
-> nip char(6) not null,
-> nama varchar(25) not null,
-> kode_jabatan char(4),
-> constraint pk_pegawai primary key(nip),
-> constraint fk_pegawai_jabatan foreign key(kode_jabatan)
-> references jabatan(kode_jabatan)
-> );
Query OK, 0 rows affected (0.03 sec)
Isikan data-data dummy ke dalam kedua buah tabel tersebut, misalnya dengan
menggunakan perintah di bawah ini.
mysql> insert into jabatan values('J-01', 'Manager');
Query OK, 1 row affected (0.08 sec)
mysql> insert into jabatan values('J-02', 'Sales Marketing');
Query OK, 1 row affected (0.00 sec)
mysql> insert into jabatan values('J-03', 'Pimpinan Proyek');
Query OK, 1 row affected (0.00 sec)
mysql> insert into jabatan values('J-04', 'Analis Sistem');
Query OK, 1 row affected (0.00 sec)
mysql> insert into jabatan values('J-05', 'Programmer');
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values('000001','Imam','J-01');
Query OK, 1 row affected (0.03 sec)
mysql> insert into pegawai values('000002','Dewi','J-02');
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values('000003','Arif','J-03');
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values('000004','Camelia','J-04');
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values('000005','Made','J-05');
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values('000006','Tatang','J-05');
Query OK, 1 row affected (0.00 sec)
mysql> quit
Langkah 4:
Proses Backup
Setelah database dan data-data siap digunakan, sekarang kita akan mencoba untuk
melakukan backup terhadap data-data tersebut.
BACKUP TABLE namatabel TO ‘path_tujuan’;
path_tujuan harus dituliskan secara lengkap, namun tidak perlu disebutkan nama filenya.
Proses ini akan membuat sebuah salinan dari file .frm (definisi) and .MYD
(data), tetapi tidak memasukkan file .MYI (index).
mysql> backup table pegawai, jabatan to 'c:\db_backup';
+-----------------+--------+----------+-------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-----------------+--------+----------+-------------------------------------+
| latihdb.pegawai | backup | error | Failed copying .frm file (errno: 2) |
| latihdb.pegawai | backup | status | Operation failed |
| latihdb.jabatan | backup | error | Failed copying .frm file (errno: 2) |
| latihdb.jabatan | backup | status | Operation failed |
+-----------------+--------+----------+-------------------------------------+
4 rows in set (0.03 sec)
mysql>
Kenapa proses backup di atas tidak berhasil? Masalahnya adalah kita harus
menggunakan double backslash (\\) pada saat menuliskan path tujuan. Perhatikan
perintah di bawah ini yang merupakan perbaikan dari kode di atas.
mysql> backup table pegawai, jabatan to 'c:\\db_backup';
+-----------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-----------------+--------+----------+----------+
| latihdb.pegawai | backup | status | OK |
| latihdb.jabatan | backup | status | OK |
+-----------------+--------+----------+----------+
2 rows in set (0.03 sec)
Menggunakan Statemen SELECT INTO
Perintah ini sama mudahnya dengan cara yang pertama (dengan menggunakan
perintah BACKUP). Hanya yang perlu untuk diperhatikan di sini adalah bahwa
perintah ini hanya berlaku untuk melakukan backup per tabel. Berikut ini sintak
umum dari penggunaan statemen SELECT INTO.
SELECT daftar_kolom FROM nama_tabel INTO OUTFILE nama_file;
Berikut ini contoh yang akan menunjukkan bagaimana cara melakukan backup
terhadap
tabel PEGAWAI.
mysql> select * from pegawai into outfile 'c:\\db_backup\\peg.dmp';
Query OK, 6 rows affected (0.02 sec)
Perintah di atas akan membentuk sebuah file baru dengan nama PEG.DMP di dalam
direktori C:\DB_BACKUP, yang merupakan file hasil dari proses backup.
EmoticonEmoticon