PHP

Backup Database MySQL dengan PHP

Melakukan backup database MySQL dapat juga dilakukan dengan menggunakan script PHP sehingga untuk melakukan backup secara otomatis lebih mudah dilakukan.

Script ini dapat di jalankan di dalam task scheduler windows dengan mengarahkan url website  atau membuat fungsi di dalam website ketika melakukan tindakan tertentu akan menjalankan script backup database tersebut.


Berikut cara melakukan backup database MySQL dengan menggunakan bahasa pemrograman PHP:
Pertama periksa dan pastikan terlebih dahulu data yang diperlukan seperti host name, user, password, nama database dan direktori yang akan meletakkan file backup database. Sebagai contoh seperti di bawah ini


Hostlocalhost
Userroot
Password123456
Databasedatabase_test
DirektoriD:backup

Setelah mengetahui data yang diperlukan, selanjutnya buat folder baru dan beri nama backup di dalam web server. Sebagai contoh saya menggunakan web server xampp  jadi saya buat di dalam folder C:xampphtdocs. dan buat satu file PHP didalam folder C:xampphtdocsbackup dan beri nama index.php kemudian copy script di bawah ini


$dbhost = 'host_db';
$dbuser = 'user_db';
$dbpass = 'password_db';
// $dbname = 'name_db'; //One Database
$dbname = array('name_db1','name_db2'); //Many Database

// Create Folder Backup
$dirpath = 'directory folder for save database';
$mode = '0777';
is_dir($dirpath) || mkdir($dirpath, $mode, true);

for($i = 0; $i < count($dbname);$i++){
  $command = 'c:/xampp/mysql/bin/mysqldump -h $dbhost -u $dbuser
  -p$dbpass $dbname[$i]> '.$dirpath.$dbname[$i].'.sql';
  system($command);
  echo 'Backup database '.$dbname[$i].' successfully\ ';
} 

Dan selanjutnya ubah beberapa data sesuai dengan pengaturan di database anda. kemudian untuk menjalankan script ini, buka pada browser dengan mengetikkan url http://localhost/backup. Jika berhasil browser akan menampilkan keterangan bahwa backup database successfully.


Selamat mencoba, Terima kasih.

Kenapa Backup dengan PHP?

Backup database MySQL menggunakan PHP sangat berguna untuk:

  • Backup terjadwal - Jalankan backup otomatis via cron job
  • Backup dari web interface - Tambahkan fitur backup di panel admin website
  • Backup remote - Backup database dari server lain tanpa akses SSH

Script Backup Lengkap

<?php $host = 'localhost'; $user = 'root'; $pass = 'password'; $dbname = 'nama_database'; $backup_dir = 'backups/'; $filename = $backup_dir . 'backup_' . date('Y-m-d_H-i-s') . '.sql';  // Koneksi database $conn = new mysqli($host, $user, $pass, $dbname); if ($conn->connect_error) die("Koneksi gagal: " . $conn->connect_error);  // Export struktur dan data $tables = $conn->query("SHOW TABLES"); $sql_dump = "
-- Backup Database: $dbname "; $sql_dump .= "
-- Date: " . date('Y-m-d H:i:s') . "  ";  while ($table = $tables->fetch_row()) {
$table_name = $table[0];
$result = $conn->query("SELECT *
FROM $table_name");
$fields = $conn->query("SHOW COLUMNS
FROM $table_name");
$sql_dump .= "DROP TABLE IF EXISTS `$table_name`; ";
// ... (lanjutan kode untuk generate
CREATE TABLE dan
INSERT statements) }  file_put_contents($filename, $sql_dump); echo "Backup berhasil: $filename"; ?>

Best Practices

  • Kompresi dengan gzip untuk menghemat storage
  • Enkripsi file backup untuk keamanan
  • Verifikasi integritas backup secara berkala
  • Simpan backup di lokasi terpisah (offsite)

Backup dengan Kompresi dan Notifikasi

Script backup yang lebih lengkap dengan kompresi dan notifikasi email:

<?php
function backupDatabase($host, $user, $pass, $dbname) {
$filename = 'backup_' . $dbname . '_' . date('Y-m-d_H-i-s') . '.sql.gz';
$command = "mysqldump -h $host -u $user -p$pass $dbname | gzip > backups/$filename";
exec($command, $output, $return);
if ($return === 0) {
// Kirim notifikasi email
$to = '[email protected]';
$subject = "Backup Database $dbname Berhasil";
$message = "Backup tersimpan: $filename (" . filesize("backups/$filename") . " bytes)";
mail($to, $subject, $message);
return true;
}
return false;
}

// Jadwalkan via cron: 0 2 * * * php /path/to/backup.php
?>

Rotasi Backup Otomatis

<?php
// Hapus backup lebih dari 30 hari
$files = glob('backups/*.sql.gz');
foreach ($files as $file) {
if (filemtime($file) < strtotime('-30 days')) {
unlink($file);
}
}
?>


0 Comments


Leave a Reply

Comments with links or spam keywords will be rejected.
Scroll to Top