# Cadangan MySQL

Panduan ini akan membantu Anda membuat cadangan penuh database MySQL tanpa mematikan sistem Anda. Panduan ini ditulis dan diuji oleh tim devops Navixy, sehingga Anda dapat mempercayainya sebagai solusi yang telah terbukti bekerja.

{% hint style="info" %}
Instruksi ini berlaku untuk MySQL versi 8.xx (kurang dari atau sama dengan 8.0.29) dan 5.xx. Instruksi ini ditulis untuk, diuji pada, dan dapat diterapkan pada OS berikut:

* Ubuntu 18.04, 20.04
* Debian 9, 10, 11

Untuk OS dan versi perangkat lunak lainnya, instruksi ini dapat diterapkan dan disesuaikan atas risiko Anda sendiri.
{% endhint %}

Yang Anda butuhkan untuk membuat cadangan penuh database MySQL tanpa mematikan sistem:

* Sambungkan volume tambahan pada disk terpisah yang akan digunakan untuk menyimpan cadangan.
* Pasang perangkat lunak tambahan - <https://www.percona.com/software/mysql-database/percona-xtrabackup>
* Dapatkan kredensial pengguna MySQL yang sudah ada atau buat pengguna khusus untuk cadangan
* Semua operasi harus dilakukan sebagai pengguna dengan hak root, atau menggunakan sudo.

Di bawah ini kita akan memeriksa lebih detail langkah-langkah yang perlu Anda lakukan.

## Membuat pengguna

Sebagai contoh kita akan membuat pengguna bernama `bkpuser` dengan hak minimum yang cukup untuk membuat cadangan penuh dan kata sandi `s3cret`.

Pertama Anda perlu masuk ke konsol MySQL dengan hak administratif, contoh:

```
mysql -uroot -p
```

Kemudian, di konsol MySQL, masukkan perintah yang spesifik untuk versi MySQL yang berbeda:

**MySQL 5.xx**

```sql
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
CREATE USER 'bkpuser'@'%' IDENTIFIED BY 's3cret';
GRANT SELECT, RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
GRANT SELECT, RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'%';
FLUSH PRIVILEGES;
```

**MySQL 8.xx**

```sql
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
CREATE USER 'bkpuser'@'%' IDENTIFIED BY 's3cret';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'%';
GRANT SELECT ON performance_schema.log_status TO 'bkpuser'@'localhost';
GRANT SELECT ON performance_schema.log_status TO 'bkpuser'@'%';
GRANT SELECT ON performance_schema.keyring_component_status TO bkpuser@'localhost';
GRANT SELECT ON performance_schema.keyring_component_status TO bkpuser@'%';
FLUSH PRIVILEGES;
```

## Volume cadangan

Sekarang kita perlu menghitung ukuran volume tambahan yang akan digunakan untuk menyimpan cadangan.

Untuk menentukan ukuran volume yang diperlukan untuk cadangan database, Anda perlu mengetahui ukuran database saat ini dan mengalikannya dengan 1,5.

Jika database Anda berada di lokasi default yang ditetapkan saat menginstal server MySQL, Anda perlu menjalankan perintah berikut dengan hak root:

```
du -sh /var/lib/mysql
```

Jika Anda memiliki lokasi database kustom, Anda perlu menentukan path database sebagai argumen untuk perintah lokasi, yaitu:

```
du -sh /your_path_to_database
```

**Contoh perhitungan**

![](https://611129122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-52f629b44641169de37ee8780c75b282ba36c19d%2Fimage-20230810-134206.png?alt=media)

Pada tangkapan layar kita dapat melihat bahwa ukuran saat ini database MySQL adalah 181 GB. Oleh karena itu, ukuran volume untuk mencadangkan database ini harus setidaknya 181 \* 1.5 = 271.5 GB, dibulatkan ke atas menjadi 272 GB

Perhitungan berlaku untuk satu salinan database. Jika Anda berencana menyimpan lebih dari satu salinan cadangan database, ingatlah untuk mengalikan hasil dengan jumlah cadangan yang disimpan.

## Perangkat lunak cadangan

Setelah menghubungkan volume baru dan membuat sistem file di atasnya, Anda perlu menginstal perangkat lunak yang diperlukan untuk cadangan database. Perangkat lunak ini disebut <https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html>. Pertimbangkan untuk menginstalnya menggunakan paket instalasi siap pakai yang tersedia dari repositori Percona XtraBackup.

Instalasi dilakukan melalui paket yang berisi `percona-release` utilitas konfigurasi.

Pertama-tama, unduh paket ini dari repositori Percona XtraBackup dengan perintah berikut:

```
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
```

Langkah berikutnya adalah menjalankan instalasi paket yang diunduh menggunakan utilitas dpkg. Anda harus *root* atau menggunakan *sudo* untuk menjalankan perintah ini:

```
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
```

Sekarang atur repositori yang diperlukan untuk tujuan ini:

```
percona-release enable-only tools
apt-get update
```

***

### Pengecualian untuk Debian 10

Pada Debian 10 langkah di atas mengembalikan sebuah error:

![](https://611129122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-3f734df5a924e41a600e83a7640ecd29bb1cb875%2Fimage-20230810-134240.png?alt=media)

Untuk memperbaiki error ini, Anda perlu mengedit file */etc/apt/sources.list*

Buka file ini di editor teks apa pun, misalnya:

```
root@debian10:~# nano /etc/apt/sources.list
```

Tambahkan baris berikut ke daftar di bagian atas:

```
deb http://ftp.de.debian.org/debian buster-backports main
```

Isi file akan terlihat kira-kira seperti ini:

```bash
#
# deb cdrom:[Debian GNU/Linux 10.4.0 _Buster_ - Official amd64 NETINST 20200509-10:25]/ buster main

# deb cdrom:[Debian GNU/Linux 10.4.0 _Buster_ - Official amd64 NETINST 20200509-10:25]/ buster main
deb http://ftp.de.debian.org/debian buster-backports main

deb http://mirror.corbina.net/debian/ buster main
deb-src http://mirror.corbina.net/debian/ buster main

deb http://security.debian.org/debian-security buster/updates main
deb-src http://security.debian.org/debian-security buster/updates main

# buster-updates, sebelumnya dikenal sebagai 'volatile'
deb http://mirror.corbina.net/debian/ buster-updates main
deb-src http://mirror.corbina.net/debian/ buster-updates main

# Sistem ini diinstal menggunakan media yang dapat dilepas berukuran kecil
# (mis. netinst, live atau single CD). Entri "deb cdrom" yang sesuai
# dinonaktifkan pada akhir proses instalasi.
# Untuk informasi tentang cara mengonfigurasi sumber paket apt,
# lihat manual sources.list(5).
```

Simpan perubahan pada file lalu jalankan perintah berikut:

```bash
apt update
apt install curl/buster-backports
apt --fix-broken install
percona-release enable-only tools
apt-get update
```

***

Sekarang Anda siap untuk menginstal utilitas cadangan. Untuk melakukan ini, gunakan perintah berikut sebagai root atau sudo:

**untuk MySQL versi 5.xx:**

```
sudo apt install percona-xtrabackup-24
```

**untuk versi MySQL 8.xx kurang dari atau sama dengan 8.0.29:**

```
sudo apt install percona-xtrabackup-80
```

Ini menyelesaikan prosedur instalasi utilitas Percona XtraBackup.

## Pembuatan cadangan

Sekarang Anda akan membuat cadangan penuh database menggunakan Percona XtraBackup.

* perintah cadangan dijalankan pada server yang sama tempat database disimpan
* dalam contoh di bawah volume cadangan tambahan yang dipasang di `/mnt/backups` folder
* seorang pengguna yang telah dibuat sebelumnya `bkpuser` dengan kata sandi `s3cret` digunakan untuk terhubung ke database

```
xtrabackup --user=bkpuser --password=s3cret --backup --target-dir=/mnt/backups/
```

Setelah menyelesaikan cadangan, Anda perlu menyiapkan salinan database yang disalin agar dapat digunakan. Tanpa operasi ini, database tidak akan bisa dioperasikan.

```
xtrabackup --prepare --target-dir=/mnt/backups/
```

Sekarang Anda memiliki salinan database yang up-to-date pada saat pembuatannya, dibuat tanpa menghentikan server dan tanpa menghilangkan beban kerja darinya.

Salinan cadangan ini dapat digunakan untuk memulihkan database Anda jika terjadi keadaan darurat.
