Backup Database MySQL Dengan Metode Replikasi


ri32_mysql_backup

Pendahuluan

Setiap organisasi yang memiliki database perlu melakukan aktivitas backup secara periodik. Sebagai bentuk antisipasi jika terjadi sesuatu yang tidak diinginkan. 2 metode yang pernah saya terapkan adalah metode dump file dan metode replikasi.

Metode Dump File .SQL

Metode ini menggunakan script tertentu dan fungsi mysqldump sehingga terbentuk sebuah file dengan penamaan sesuai dengan periode waktu membackup database. Sedangkan untuk penjadwalannya memanfaatkan fasilitas window scheduler. Untuk tutorialnya bisa dibaca di blog berikut ini membuat-jadwal-backup-database-otomatis.

Namun saya menemukan kelemahan dari metode ini. Setelah berjalan beberapa lama file .SQL yang tercipta di PC backup terus terbentuk. bayangkan jika setiap filenya berukuran 2GB dan dibackup setiap hari. Maka perlu setiap minggu dilakukan penghapusan file di PC backup.

Ditambah, jika terjadi kesalahan atau error sistem sehingga perlu adanya tindakan restore database maka kita harus mengupload file database yang telah kita backup sebelumnya. dari pengalaman saya untuk import database jika terdapat field yang menampung jenis data BLOB. saya mengalamasi kesulitan karena didalam field BLOB terdapat karakter tertentu sehingga proses import selalu gagal. Sehingga saya menggunakan metode yang lain yaitu replikasi database.

Metode Replikasi Database

Replikasi database adalah seperangkat teknologi yang digunakan untuk menyalin dan mendistribusikan data dari satu database ke database yang lain. Dan selanjutnya, mensinkronisasikan antar database untuk menjaga konsistensi.

Dalam implementasi metode ini saya masih menggunakan PC backup sebagai SLAVE yang menampung data dari Database Server sebagai MASTER. Namun bedanya data dari master tidak ditampung ke dalam dump file .SQL tapi langsung disimpan ke database lokal yang ada di PC backup.

Dengan menggunakan metode ini, tidak perlu banyak file yang terbentuk dari proses backup database. cukup sediakan satu database lokal yang bertindak sebagai SLAVE. yang menampung data dari MASTER secara periodik. karena data nya sudah di sinkronisasi antar 2 database. Sehingga jika terjadi kerusakan data dapat dengan cepat di import dari SLAVE ke MASTER. untuk tutorialnya bisa dibaca di blog berikut ini synchronize-database-mysql-menggunakan.

Namun saya menemukan kelemahan dari metode ini, jika ternyata terdapat kesalahan data di database server dan databasenya sudah di sinkronisasi dengan database lokal secara periodik. maka jika kita ingin mengimport database di SLAVE ke MASTER datanya telah ikut terkontaminasi.

Penutup

Setiap metode ada kekurangan dan kelebihannya. tinggal kita memilih apakah menggunakan salah satu metode atau menggunakan kombinasi 2 metode.

Sekian artikel dari saya, semoga bermanfaat untuk teman-teman dan anda semua…aamiin

Bogor, 02-04-2018

KangAgus

 

Advertisements

Script Backup Restore Database menggunakan Framework CI


Latar Belakang

Sebagai utilitas dari aplikasi yang anda bangun jika membutuhkan fasilitas untuk backup atau restore sebuah database  yang sedang digunakan. saya asumsikan temen-teman sudah falimiar dengan framework CI. buat sebuah controller misalnya utilitas.php simpan di folder application/controllers

Script Backup

Jika didalam database anda terdapat tabel view, maka itu harus di hapus terlebih dahulu. silahkan buat metode pada sebuah model yg berfungsi untuk menghapus table view.

function backup(){
$this->Edit_model->hapus_view();

$this->load->helper(‘download’);
$tanggal=date(‘Ymd-His’);
$namaFile=$tanggal . ‘.sql.zip’;
$this->load->dbutil();
$backup=& $this->dbutil->backup();
force_download($namaFile, $backup);
}

sehingga jika nanti berhasil membackup database, maka akan keluar kotak dialog untuk menyimpan file backup database.

Script Restore

  • Sebelum melakukan restore anda harus extrak dahulu file zip yang tadi di download sehingga menjadi file misalnya 20110919-165636.sql
  • Diasumsikan file tersebut di simpat di root system
  • Sebagai alternatif, anda bisa membuat aplikasi upload file database yang akan di restore ke dalam folder yang sudah ditentukan misalnya folder backupdb
  • Setelah file berada di folder tersebut, maka script akan membaca file tersebut dan melakukan proses restore

function restore(){
//hapus dulu database jika proses restore gagal.
$this->Edit_model->hapus_db();

//upload dulu filenya
$fupload = $_FILES[‘datafile’];
 $nama = $_FILES[‘datafile’][‘name’];
if(isset($fupload)){
$lokasi_file = $fupload[‘tmp_name’];
$direktori=”backupdb/$nama“;
move_uploaded_file($lokasi_file,”$direktori”);
}

//restore database
$isi_file=file_get_contents($direktori);
$string_query=rtrim($isi_file, “\n;” );
$array_query=explode(“;”, $string_query);

foreach($array_query as $query){
$this->db->query($query);
}

$data[‘page’]=’restore’;
$this->load->view(‘home’,$data);
}

Sekian artikel dari saya, semoga bermanfaat untuk teman-teman dan anda semua…aamiin

Depok, 25-09-2011

KangAgus

Membuat aplikasi web untuk backup dan restore database menggunakan PHP


Latar Belakang

Database banyak digunakan untuk menyimpan data baik pada  aplikasi desktop maupun berbasis web.  untuk alasan keamana, database perlu dilakukan proses backup. sehingga jika suatu saat terjadi kerusakan data, dapat dilakukan proses restore database.

Bagi teman-teman yang terbiasa menggunakan aplikasi phpmyadmin pasti pernah menggunakna fasilitas export dan import database. nah pada artikel kalo ini saya akan membahas tentang sebuah aplikasi sederhana yang digunakan untuk backup dan restore database. Dalam aplikasi ini terdapat 3 file yaitu :

  • index.php yang digunakan untuk backup sekaligus halaman utama aplikasi
  • download_backup_data.php yang digunakan untuk mendownload file database (*.sql) yang sudah tersimpan didalam folder backup
  • recovery_data.php digunakan untuk restore atau mengembalikan  database ke keadaan semula sesuai dengan isi query yang ada didalam file backup database

Script Backup Database

1) Buat nama file untuk backup database

//membuat nama file
$file=date(“DdMY”).’_ri32_backup_data_’.time().’.sql’;

2) Memanggil fungsi backup database

//panggil fungsi dengan memberi parameter untuk koneksi dan nama file untuk backup
backup_tables(“localhost”,”root”,””,”absensi_db“,$file);

3) Fungsi untuk backup database

/*
untuk memanggil nama fungsi :: jika anda ingin membackup semua tabel yang ada didalam database, biarkan tanda BINTANG (*) pada variabel $tables = ‘*’
jika hanya tabel-table tertentu, masukan nama table dipisahkan dengan tanda KOMA (,)
*/
function backup_tables($host,$user,$pass,$name,$nama_file,$tables = ‘*’)
{
//untuk koneksi database
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);

if($tables == ‘*’)
{
$tables = array();
$result = mysql_query(‘SHOW TABLES’);
while($row = mysql_fetch_row($result))
{
$tables[] = $row[0];
}
}else{
//jika hanya table-table tertentu
$tables = is_array($tables) ? $tables : explode(‘,’,$tables);
}

//looping dulu ah
foreach($tables as $table)
{
$result = mysql_query(‘SELECT * FROM ‘.$table);
$num_fields = mysql_num_fields($result);

//menyisipkan query drop table untuk nanti hapus table yang lama
$return.= ‘DROP TABLE ‘.$table.’;’;
$row2 = mysql_fetch_row(mysql_query(‘SHOW CREATE TABLE ‘.$table));
$return.= “\n\n”.$row2[1].”;\n\n”;

for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
//menyisipkan query Insert. untuk nanti memasukan data yang lama ketable yang baru dibuat. so toy mode : ON
$return.= ‘INSERT INTO ‘.$table.’ VALUES(‘;
for($j=0; $j<$num_fields; $j++)
{
//akan menelusuri setiap baris query didalam
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace(“\n”,”\\n”,$row[$j]);
if (isset($row[$j])) { $return.= ‘”‘.$row[$j].'”‘ ; } else { $return.= ‘””‘; }
if ($j<($num_fields-1)) { $return.= ‘,’; }
}
$return.= “);\n”;
}
}
$return.=”\n\n\n”;
}

//simpan file di folder yang anda tentukan sendiri. kalo saya sech folder “DATA”
$nama_file;

$handle = fopen(‘./backup/‘.$nama_file,’w+’);
fwrite($handle,$return);
fclose($handle);
}

4) Membuat link untuk download file backup database

<p align=”center”><a style=”cursor:pointer” onclick=”location.href=’download_backup_data.php?nama_file=<?php echo $file;?>‘” title=”Download”>Backup database telah selesai. <font color=”#0066FF”>Download file database</font></a></p>

Script download File Backup database

<?php
$file=$_GET[‘nama_file’];
// header yang menunjukkan nama file yang akan didownload
header(“Content-Disposition: attachment; filename=”.$file);
// header yang menunjukkan ukuran file yang akan didownload
header(“Content-length: “.$file);
// header yang menunjukkan jenis file yang akan didownload
header(“Content-type: “.$file);
// proses membaca isi file yang akan didownload dari folder ‘data’
$fp  = fopen(“./backup/”.$file, ‘r’);
$content = fread($fp, filesize(‘./backup/’.$file));
fclose($fp);
// menampilkan isi file yang akan didownload
echo $content;
exit;
?>

Script Upload file sebelum di Restore

//definisikan variabel file dan alamat file
$uploaddir=’./restore/‘;
$alamatfile=$uploaddir.$nama_file;

//periksa jika proses upload berjalan sukses
if (move_uploaded_file($_FILES[‘datafile’][‘tmp_name’],$alamatfile))

Script untuk restore database

$filename = ‘./restore/’.$nama_file.”;
// Temporary variable, used to store current query
$templine = ”;
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line)
{
// Skip it if it’s a comment
if (substr($line, 0, 2) == ‘–‘ || $line == ”)
continue;
// Add this line to the current segment
$templine .= $line;
// If it has a semicolon at the end, it’s the end of the query
if (substr(trim($line), -1, 1) == ‘;’)
{
// Perform the query
mysql_query($templine) or print(‘Error performing query \'<strong>’ . $templine . ‘\’: ‘ . mysql_error() . ‘<br /><br />’);
// Reset temp variable to empty
$templine = ”;
}}
echo “<center>Berhasil Restore Database, silahkan di cek.</center>”;

Tampilan Output

Backup Database

Restore Database

Download Database

Download

http://www.4shared.com/file/uw0iZKbg/backup-restore.html

Sekian tutorial dari saya, semoga dapat bermanfaat untuk teman-teman dan Anda semua…aamin 🙂

Depok, 15-12-2010

noname

%d bloggers like this: