Jika kita menggunakan SQL server di RDS (Relational Database Service), cara untuk membackup dan merestorenya adalah dengan menggunakan SQL Server Management Studio dan S3 (Disebut juga native backup dan restore).
- Jadi SQL Server Management Studio (seperti navicat) berfungsi untuk menjalankan command backup dan restore. Commandnya:
- backup =
exec msdb.dbo.rds_backup_database
- restore =
exec msdb.dbo.rds_restore_database
- backup =
- S3 digunakan untuk menyimpan file hasil backup (database.bak).
Prasyarat
- Sudah menginstall SQL Server Management Studio
- Sudah membuat bucket S3 dengan nama sqlserver-s3
- Sudah mempunyai instance RDS SQL Server SE (Standard Edition) versi 16.00
Ringkasan Langkah-langkah
- Membuat dan mengaktifkan Option dan IAM Role ke RDS SQL Server
- Menjalankan command backup di aplikasi SQL Server Management Studio
- Menjalankan command restore di aplikasi SQL Server Management Studio
Mari kita mulai..
Membuat dan mengaktifkan Option dan IAM Role ke RDS SQL Server
Untuk bisa melakukan backup dan restore, kita harus:
- Membuat IAM Role
- Mengaktifkan Option SQLSERVER_BACKUP_RESTORE
- Mengaitkan Option ke RDS SQL Server
Membuat IAM Role
Tujuan dibuat IAM Role adalah agar kita punya akses / permission untuk bisa menyimpan (write) hasil backupnya ke S3. Role ini nantinya akan kita kaitkan ke Option yang kita buat nanti.
Langkah membuat IAM Role:
- Masuk ke dashboard IAM
- Pada Menu Access Management, klik Roles, klik Create Role
- Pilih Custom Trust Policy dan masukkan JSON berikut, klik Next
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- Pada Add permissions cukup klik Next
- Pada Role details, isikan:
- Role name: sqlserver-backup-restore-db
- Description: sqlserver-backup-restore-db
- Klik Create Role. Role berhasil dibuat
- Masuk ke halaman detail Role: sqlserver-backup-restore-db.
- Pilih tab Permissions, Klik Add permissions > Create inline policy
- Klik tab JSON, masukkan JSON berikut, laluk klik Next
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::sqlserver-s3"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObjectAttributes",
"s3:GetObject",
"s3:PutObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::sqlserver-s3/*"
]
}
]
}
Note: sqlserver-s3 merupakan nama bucket yang diawal tadi sudah kita tentukan. Kalian bisa ganti dengan nama bucket S3 kalian.
- Masukkan Policy name: sqlserver-s3-policy, lalu klik Create Policy
- Policy sudah terbuat dan sudah terattached ke Role: sqlserver-backup-restore-db
Mengaktifkan Option SQLSERVER_BACKUP_RESTORE
Option SQLSERVER_BACKUP_RESTORE merupakan hak akses agar RDS bisa menjalankan command backup, restore dan menyimpan hasil backupnya ke S3.
Buat option terlebih dahulu:
- Masuk ke dashboard RDS
- Klik menu Option groups, klik Create group
- Pada Option group details, masukkan:
- Name: opt-sqlserver-backup-restore
- Description: opt-sqlserver-backup-restore
- Engine: sqlserver-se (sesuaikan dengan Engine RDS SQL Server kalian)
- Major Engine Version: 16.00 (sesuaikan dengan Versi RDS SQL Server kalian)
- Klik Create
- Setelah option group terbuat, masuk ke detail opt-sqlserver-backup-restore, Klik Add option
- Pada halaman Add option:
- Pilih Option Name: SQLSERVER_BACKUP_RESTORE
- Pilih IAM role: sqlserver-backup-restore-db (yang sudah kita buat ditahap sebelumnya)
- Secheduling: Immediately
- Klik Add option
- Option SQLSERVER_BACKUP_RESTORE berhasil ditambahkan ke Option opt-sqlserver-backup-restore
Mengaitkan Option ke RDS SQL Server
Selanjutkan, option opt-sqlserver-backup-restore harus dikaitkan ke instance database RDS SQL Server. Disini nama instancenya adalah database-1-test
- Masih di dashboard RDS
- Pilih database-1-test, lalu klik Modify
- Scroll kebawah, pada bagian Additional configuration > Database options, ganti Option group ke opt-sqlserver-backup-restore (sebelumnya default:sqlserver-se-16-00)
- Klik Continue.
- Pada halaman selanjutnya > Schedule modifications, pilih Apply Immediately, klik Modify DB Instance
- Setelah itu statusnya akan Modifying. Tunggu sampai statusnya Available, maka selanjutnya kita bisa menjalankan command backup dan restore melalui aplikasi SQL Server Management Studio.
Menjalankan command backup di aplikasi SQL Server Management Studio
Disini saya sudah mempunyai database dengan nama mydb_test dan 1 table yaitu users. Kita akan mencoba membackup database tersebut ke S3.
Berikut langkah-langkahnya:
- Connect ke database melalui aplikasi SQL Server Management Studio
- Jalankan command berikut untuk membackup database:
exec msdb.dbo.rds_backup_database
@source_db_name='mydb_test',
@s3_arn_to_backup_to='arn:aws:s3:::sqlserver-s3/mydb_test_26112024.bak',
@overwrite_s3_backup_file=1,
@type='FULL';
Catatan:
- Silahkan ganti mydb_test dengan database kalian
- Silahkan ganti sqlserver-s3 dengan nama bucket S3 kalian
- Silahkan ganti mydb_test_26112024.bak dengan nama file backup yang kalian inginkan
- Perlu diketahui, proses backup ini dilakukan secara asychronous, jadi cek secara berkala di S3 kalian apakah file mydb_test_26112024.bak sudah terbuat
- Atau bisa kita cek juga sudah berapa persen proses backup ke S3, menggunakan command:
exec msdb.dbo.rds_task_status
@db_name='mydb_test',
@task_id=1;
Dimana mydb_test merupakan database yang sedang dibackup dan task_id=1 didapat dari hasil command backup diatas (exec msdb.dbo.rds_backup_database
)
Menjalankan command restore di aplikasi SQL Server Management Studio
Contoh disini kita akan merestore file mydb_test_26112024.bak mejadi database dengan nama mydb_test_restore. *Catatan: database mydb_test_restore tidak perlu dibuat diawal. Saat menjalankan command restore, database tersebut otomatis sudah terbuat.
- Masih di aplikasi SQL Server Management Studio, jalankan command berikut untuk merestore database
exec msdb.dbo.rds_restore_database
@restore_db_name='mydb_test_restore',
@s3_arn_to_restore_from='arn:aws:s3:::sqlserver-s3/mydb_test_26112024.bak';
- Proses restore dilakukan secara asynchronous
- Untuk melihat proses restore apakah sudah selesai atau ada error, bisa jalankan command berikut:
exec msdb.dbo.rds_task_status
@db_name='mydb_test_restore',
@task_id=6;
Catatan: task_id 6 didapat dari hasil menjalankan command rds_restore_database sebelumnya.
- Pada gambar diatas, lifecycle = SUCCESS, artinya restore sudah berhasil
- Refresh database-1-test.c0oo0keppbz8.ap-xx (klik kanan), maka akan ada database baru mydb_test_restore dan table users