DEV Community

Fega Suseno
Fega Suseno

Posted on

Backup Restore Database Using Percona Xtrabackup

Pada postingan kali ini kita akan membahas bagaimana cara cepat untuk backup dan restore mysql dengan metode lebih cepat. Sebelumnya saya menggunakan metode mysqldump dan ini work jika databasenya masih kecil, tapi jika sudah sangat besar maka akan membutuhkan waktu yang lama untuk merestore datanya bisa belasan jam. Sebagai contoh database saya fiel .sql nya sudah mencapai 170 GB dan tentu itu akan merepotkan jika harus migrasi backup restorenya.

Metode ini yang akan saya pakai adalah dengan tools Percona Xtrabackup tool ini cukup berguna jika databasenya mysql dengan engine innodb.

Cara Kerja

  • Membaca semua file InnoDB.
  • Menyalin file tanpa menghentikan MySQL.
  • Menyalin perubahan (redo log) yang terjadi selama backup.
  • Saat --prepare, perubahan tersebut diterapkan agar backup menjadi konsisten.
  • Saat --copy-back, file dikembalikan ke datadir tujuan.

Studi Kasus

Studi kasus kali ini saya hanya akan memindahkan Mysql saya yang ada di server A (source) ke Server B (destination). Mysql di server A menggunakan versi Mysql 5.7 (anggaplah legacy). ubuntu 22.04 LTS Jammy, karena versi mysql lama jadi kita pakai Percona Xtrabackup versi xtrabackup24. Kita akan pindah ke Server B ubuntu Jammy 22.04 LTS, terinstall MySql 5.7 Fresh Install. Detailnya lihat topology.

Server A (source)

Mula-mula kita setup environment nya, kita perlu install percona xtrabackup24

kita bisa melihat panduan di website resminya disini

https://docs.percona.com/percona-xtrabackup/2.4/installation/apt_repo.html#whats-in-each-deb-package

Setelah terinstall kita membuat user kusus hanya untuk membackup

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'passwordkuat';
Enter fullscreen mode Exit fullscreen mode

beri hak akses

GRANT RELOAD,
      LOCK TABLES,
      PROCESS,
      REPLICATION CLIENT
ON *.* TO 'backup'@'localhost';
Enter fullscreen mode Exit fullscreen mode
FLUSH PRIVILEGES;
Enter fullscreen mode Exit fullscreen mode

Selanjutnya menyiapkan di mana file haslil backup akan disimpan

mkdir /home/$USER/backup
Enter fullscreen mode Exit fullscreen mode

sesuai studi kasus pada source menggunakan xtracbackup24 terinstall di host, maka perintah menjalankanya seperti berikut

xtrabackup --backup --target-dir=/home/$USER/backup/full_$(date +%F_%H-%M-%S) --user=backup --password=passwordkuat
Enter fullscreen mode Exit fullscreen mode

untuk nama folder agar bisa di buat tanggal backupnya, jadi nanti contoh outnya full_2026-07-23_15-12-45.

Selanjutnya prepare database untuk memastikan datanya konsisten sebelum di restore, ini wajib di lakukan. Karena pada saat backup dijalan sebenarnya mysql masih menerima INSERT, UPDATE dan DELETE. Artinya, saat XtraBackup sedang menyalin file, ada kemungkinan sebagian data sudah berubah tetapi sebagian file lain belum selesai disalin.

xtrabackup --prepare --target-dir=backup/full_2026-07-23_15-12-45
Enter fullscreen mode Exit fullscreen mode

Sampai sini task di server source sudah beres, selanjutnya kita pindah ke server tujuan

Server B

Pada server ini mula-mula kita akan membuat folder backup

mkdir /home/$USER/backup
Enter fullscreen mode Exit fullscreen mode

Selanjutnya kita akan memindahkan output dari server A menggunakan rsync agar konsisten permissionnya. Jadi lokasi file berada pada

rsync -azv serverA@192.168.1.x:/home/serverA/backup/ /home/$USER/backup/
Enter fullscreen mode Exit fullscreen mode
/home/$USER/backup/full_2026-07-23_15-12-45
Enter fullscreen mode Exit fullscreen mode

lalu sesuai studi kasus kita akan merestore dengan menggunakan docker sehingga kita perlu menginstall docker terlebih dahulu, panduannya bisa baca disini

Install Docker Engine on Ubuntu | Docker Docs

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

favicon docs.docker.com

Saya asumsikan MySql5.7 sudah terinstall baik itu fresh install atau yang sudah ada sebelumnya. Sesuai studi kasus kita akan pakai versi MySql 5.7

Membersihkan konfigurasi mysql yg terinstall sebelumnya, pastikan terhapus bersih

sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
Enter fullscreen mode Exit fullscreen mode

Kemudian jalankan syntax berikut

docker run --rm --user root -v /var/lib/mysql:/var/lib/mysql -v /home/$USER/backup/full_2026-07-23_15-12-45:/backup:ro percona/percona-xtrabackup:2.4     xtrabackup --copy-back --target-dir=/backup --datadir=/var/lib/mysql
Enter fullscreen mode Exit fullscreen mode

Setelah selesai pastikan untuk merubah owner, karena saat kita restore menggunakan akun root maka owner folder jadi milik root

sudo chown -R mysql:mysql /var/lib/mysql
Enter fullscreen mode Exit fullscreen mode

lalu jalankan ulang mysql

sudo systemctl start mysql
Enter fullscreen mode Exit fullscreen mode

Silakan uji coba dengan masuk ke database dengan credential yang sama persis seperti di server A.

Alternatif Restore

cara ini di rekomendasikan oleh percona bilamana metode merestore server dengan tools gagal. Dengan metode ini di lakukan dengan mengcopy secara manual.

sudo systemctl stop mysql
Enter fullscreen mode Exit fullscreen mode
sudo rm -rf /var/lib/mysql/*
Enter fullscreen mode Exit fullscreen mode
sudo rsync -a /home/$USER/full_2026-07-23_15-12-45/ /var/lib/mysql/
Enter fullscreen mode Exit fullscreen mode
sudo chown -R mysql:mysql /var/lib/mysql
Enter fullscreen mode Exit fullscreen mode
sudo systemctl start mysql
Enter fullscreen mode Exit fullscreen mode

Bonus

Tambahan saya ingin mencantumkan syntax singkat untuk backup menggunakan Docker juga. Ini di luar topik studi kasus tapi cara ini juga bisa di manfaatkan bila memang tidak ingin repot menginstall di host.

Singkat saja berikut sintak untuk backupnya

docker run --rm \
    --user root \
    --network host \
    -v /var/lib/mysql:/var/lib/mysql:ro \
    -v /home/test/backup:/backup \
    percona/percona-xtrabackup:2.4 \
    xtrabackup \
        --backup \
        --target-dir=/backup/full_2026-07-23_15-12-45 \
        --host=127.0.0.1 \
        --port=3306 \
        --user=backup \
        --password='passwordku'   
Enter fullscreen mode Exit fullscreen mode

lalu ini sintak untuk prepare backupnya

docker run --rm \
    --user root \
    --network host \
    -v /var/lib/mysql:/var/lib/mysql:ro \
    -v /home/test/backup:/backup \
    percona/percona-xtrabackup:2.4 \
    xtrabackup \
        --prepare \
        --target-dir=/backup/full_2026-07-24 
Enter fullscreen mode Exit fullscreen mode

Selamat mencoba dan semoga bermanfaat

Top comments (0)