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';
beri hak akses
GRANT RELOAD,
LOCK TABLES,
PROCESS,
REPLICATION CLIENT
ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
Selanjutnya menyiapkan di mana file haslil backup akan disimpan
mkdir /home/$USER/backup
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
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
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
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/
/home/$USER/backup/full_2026-07-23_15-12-45
lalu sesuai studi kasus kita akan merestore dengan menggunakan docker sehingga kita perlu menginstall docker terlebih dahulu, panduannya bisa baca disini
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/*
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
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
lalu jalankan ulang mysql
sudo systemctl start mysql
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
sudo rm -rf /var/lib/mysql/*
sudo rsync -a /home/$USER/full_2026-07-23_15-12-45/ /var/lib/mysql/
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mysql
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'
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
Selamat mencoba dan semoga bermanfaat

Top comments (0)