Migrasi database dari MySQL ke MariaDB merupakan langkah yang sering dilakukan untuk meningkatkan performa server, memanfaatkan fitur engine tambahan, dan memastikan kompatibilitas aplikasi.
MariaDB merupakan fork MySQL dengan kompatibilitas tinggi sehingga sebagian besar query, struktur tabel, dan stored procedure dapat langsung berjalan. Namun, migrasi langsung tanpa prosedur yang benar dapat menyebabkan data corrupt, transaksi hilang, atau downtime yang panjang.
Panduan ini membahas langkah-langkah praktis, per-database, dan aman, dengan MySQL dihentikan terlebih dahulu, backup per-database, restore MariaDB, optimasi konfigurasi, verifikasi, dan rollback plan.
Artikel ini mendukung SEO dengan keyword seperti migrasi MySQL ke MariaDB, backup MariaDB, restore database, optimasi MariaDB, dan rollback plan.
Contents
1. Persiapan Migrasi
1.1 Identifikasi Database
Sebelum migrasi, tentukan database yang akan dipindahkan. Jalankan:
SHOW DATABASES;
Database sistem MySQL seperti mysql, performance_schema, dan information_schema tidak perlu dimigrasi. Fokus pada database aplikasi seperti:
app_db1(transaksi)reporting_db(analitik)inventory_db(logistik)
1.2 Inventarisasi Database
- Ukuran database
- Engine tabel (InnoDB, MyISAM)
- Karakter set dan collation
- Stored procedure, triggers, view
- Query kritikal yang sering dijalankan oleh aplikasi
Informasi ini akan menentukan konfigurasi buffer dan thread pool MariaDB setelah migrasi.
2. Backup Per-Database
Backup per-database adalah langkah wajib. Jangan menggunakan --all-databases karena risiko kehilangan seluruh database jika restore gagal.
2.1 Backup Logical dengan mysqldump
mysqldump -u root -p --single-transaction --quick app_db1 | gzip > /backup/app_db1.sql.gz
mysqldump -u root -p --single-transaction --quick reporting_db | gzip > /backup/reporting_db.sql.gz
--single-transaction: backup InnoDB konsisten tanpa mengunci tabel--quick: membaca row per row, mengurangi penggunaan RAMgzip: menghemat storage
2.2 Verifikasi Backup
gzip -dc /backup/app_db1.sql.gz | mysql -u root -p --dry-run app_db1_test
gzip -dc /backup/app_db1.sql.gz | md5sum
Pastikan dump dapat direstore tanpa error. Simpan checksum untuk memastikan integritas.
2.3 Backup Fisik (Opsional untuk Database Besar)
Untuk database >50GB, gunakan mariabackup:
mariabackup --backup --target-dir=/backup/mysql_physical --user=root --password=YOUR_PASSWORD
mariabackup --prepare --target-dir=/backup/mysql_physical
Physical backup lebih cepat daripada mysqldump untuk database besar.
3. Hentikan MySQL
Sebelum restore ke MariaDB, MySQL harus dihentikan:
sudo systemctl stop mysql
- Semua transaksi selesai atau rollback
- Tidak ada data yang berubah saat restore
Ini merupakan langkah krusial untuk menghindari corrupt data.
4. Instalasi MariaDB
4.1 Linux
sudo apt update
sudo apt install mariadb-server mariadb-client -y
4.2 Windows
- Download installer MariaDB dari mariadb.org
- Pilih Typical Installation
- Atur password root
- Jalankan service MariaDB
5. Restore Database Per-Database
Restore dilakukan satu per satu, bukan sekaligus.
gzip -dc /backup/app_db1.sql.gz | mariadb -u root -p
gzip -dc /backup/reporting_db.sql.gz | mariadb -u root -p
5.1 Verifikasi
USE app_db1;
SHOW TABLES;
SELECT COUNT(*) FROM tabel1;
CHECK TABLE tabel1;
- Pastikan tabel dan data sesuai backup
- Jika ada error, gunakan backup per-database untuk rollback
6. Konfigurasi MariaDB Pasca-Migrasi
6.1 Buffer dan Thread Pool
Untuk server dengan RAM terbatas dan banyak koneksi:
[mysqld]
innodb_buffer_pool_size = 15-20% dari total RAM
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
key_buffer_size = 16M
plugin_load_add = thread_pool.so
thread_handling = pool-of-threads
thread_pool_size = 16
thread_pool_oversubscribe = 2
max_connections = 500
6.2 Karakter Set dan Collation
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
6.3 Monitoring
SHOW STATUS LIKE 'Thread_pool%';
Slow query log:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
7. Rollback Plan
Jika restore atau aplikasi gagal:
- Stop MariaDB
- Restore backup per-database MySQL
- Start MySQL
- Investigasi error dan ulangi migrasi jika perlu
Backup per-database memudahkan rollback hanya untuk database bermasalah.
8. Studi Kasus
8.1 Website CMS (30GB)
- Downtime: 15 menit
- Backup per-database → restore MariaDB server baru
- Hasil: data konsisten, aplikasi berjalan normal
8.2 ERP/CRM Production (200GB)
- Stop MySQL → backup per-database
- Restore MariaDB → verifikasi tabel dan row
- Downtime total: 30–45 menit
- Data konsisten, aplikasi siap live
8.3 Database Analitik Read-Only (500GB)
- Gunakan physical backup
- Restore MariaDB ColumnStore
- Restore memakan 1–2 jam, query analitik stabil
9. Optimasi Query dan Index
- Cek query lambat:
EXPLAIN SELECT * FROM tabel1 WHERE kondisi;
- Tambahkan index jika perlu
- Gunakan
ANALYZE TABLEuntuk optimasi statistik query
Kesimpulan
- MySQL harus dihentikan sebelum restore MariaDB
- Backup per-database → restore per-database → verifikasi
- Optimasi buffer, thread pool, charset
- Rollback plan siap → rollback per-database jika terjadi masalah
- Verifikasi query dan aplikasi sebelum live
Langkah-langkah ini menjamin migrasi aman, terukur, dan dapat diterapkan di server produksi dengan database kecil hingga besar.