MySQL 8.4 kini berjalan rapi di samping PostgreSQL, dan tabel peta di akhir chapter sebelumnya sudah membocorkan arah berikutnya: MariaDB. Namanya memang tidak sepopuler dua tetangga besarnya, tetapi keberadaannya sulit dihindari — MariaDB adalah database bawaan di banyak distribusi Linux besar dan diklaim kompatibel dengan protokol MySQL. Bagi kita sebagai pemegang docker run, klaim itu layak diuji dalam hitungan menit: kalau MariaDB benar-benar drop-in, menjalankannya seharusnya terasa seperti mengulang chapter sebelumnya dengan ganti nama image dan awalan variabel. Chapter ini membuktikannya, sekaligus membedah bagian yang justru tidak identik — dari klien yang berganti nama menjadi mariadb sampai satu aturan keras soal volume yang tidak boleh saling dipertukarkan.
Menjalankan MariaDB dengan Variabel MARIADB_* #
Perintah ini adalah saudara kembar dari docker run MySQL kita, dengan awalan variabel yang menyebut namanya sendiri:
$ docker run -d --name db-maria \
-e MARIADB_ROOT_PASSWORD=rahasia123 \
-e MARIADB_DATABASE=katalog \
-e MARIADB_USER=katalog \
-e MARIADB_PASSWORD=rahasia123 \
-v db-data-maria:/var/lib/mysql \
mariadb:11.4Output yang Dihasilkan:
Unable to find image 'mariadb:11.4' locally
11.4: Pulling from library/mariadb
...
Digest: sha256:a7a6ed6e1d3c4ffad8c093e36c918cfa1504bdae4112b227e2c5528c0156c62d
Status: Downloaded newer image for mariadb:11.4
7040085109c3e705de68b369cf3e2f4193779cbdf837102f579ede50250f58d7Baris-baris layer di tengah dipotong agar ringkas — pertama kalinya di section ini daemon menarik image baru, karena mesin cerita kita belum pernah memakai MariaDB. Mari kita telaah bagian-bagian yang berbeda dari MySQL:
MARIADB_ROOT_PASSWORD— padanan langsungMYSQL_ROOT_PASSWORDdan sama-sama wajib; kata sandi root untuk inisialisasi pertama.MARIADB_DATABASE,MARIADB_USER,MARIADB_PASSWORD— padanan ketiga variabel opsional; database awalkatalogdan userkatalogdiciptakan dengan hak penuh atas database itu, persis pola MySQL.-v db-data-maria:/var/lib/mysql— direktori data MariaDB memang masih/var/lib/mysql, warisan leluhur bersama; namanya volume sengaja kita bedakan (db-data-maria, bukandb-data-mysql) agar dua mesin ini tidak pernah tertukar barang — alasan pentingnya menyusul di bawah.mariadb:11.4— seri 11.4, versi yang tercatat pada riset Course ini; angka versinya memang melompat jauh dari penomoran MySQL, salah satu tanda bahwa keduanya sudah berkembang terpisah selama lebih dari satu dasawarsa.
Image MariaDB sebenarnya menerima kedua awalan — MYSQL_ROOT_PASSWORD pun dibaca sebagai kompatibilitas — tetapi menuliskan MARIADB_* lebih jujur: variabel itu tegas milik MariaDB dan tidak meninggalkan keraguan saat berkas konfigurasi dibaca orang lain. Tabel berikut merangkum padanannya:
| Variabel MySQL | Padanan MariaDB | Peran |
|---|---|---|
MYSQL_ROOT_PASSWORD | MARIADB_ROOT_PASSWORD | kata sandi root — wajib |
MYSQL_DATABASE | MARIADB_DATABASE | database awal |
MYSQL_USER | MARIADB_USER | user aplikasi |
MYSQL_PASSWORD | MARIADB_PASSWORD | kata sandi user aplikasi |
Log Startup bermerek mariadb.org #
Riwayat penyalaan pertama MariaDB mengikuti koreografi yang sudah kita kenal dari MySQL — inisialisasi berkas, server sementara, lalu server sungguhan:
$ docker logs db-mariaOutput yang Dihasilkan:
2026-10-13 21:07:44+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server started.
2026-10-13 21:07:44+00:00 [Note] [Entrypoint]: Initializing MariaDB
...
2026-10-13 21:07:48+00:00 [Note] [Entrypoint]: Starting temporary server
2026-10-13 21:07:50+00:00 [Note] [Entrypoint]: Temporary server stopped.
2026-10-13 21:07:50+00:00 [Note] [Entrypoint]: MariaDB init process done. Ready for start up.
...
2026-10-13 21:07:52.214933Z 0 [Note] Starting MariaDB 11.4.5-MariaDB source revision c8f2a9d3e1b7 as process 1
...
2026-10-13 21:07:53.104512Z 0 [Note] mariadbd: ready for connections.
Version: '11.4.5-MariaDB' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distributionBaris-baris menengah dipotong agar ringkas. Mari kita telaah tiga penanda identitas di dalamnya:
Starting MariaDB 11.4.5-MariaDB ... as process 1— proses servernya bernamamariadbd, dan versinya kini ditulis dengan akhiran-MariaDB, kebiasaan penamaan yang membedakannya darimysqldmilik MySQL sejak era fork.Version: '11.4.5-MariaDB' socket: '/run/mysqld/mysqld.sock' port: 3306— struktur kalimat siapnya nyaris identik dengan MySQL: socket lokal, port 3306, siap menerima koneksi; inilah kompatibilitas protokol yang kita dengar — klien MySQL lama pun bisa menyapa server ini.mariadb.org binary distribution— tanda tangan distribution resmi dari MariaDB Foundation; pada MySQL tempat yang sama diisi klaim Oracle. Kalimat penutup inilah cara paling cepat memastikan mesin mana yang sedang berbicara kepada kita.
Sesi mariadb sebagai User katalog #
Klien resmi image ini bernama mariadb — nama baru untuk program yang dulu bernama mysql:
$ docker exec -it db-maria mariadb -ukatalog -prahasia123Output yang Dihasilkan:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.4.5-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| katalog |
+--------------------+
2 rows in set (0.000 sec)
MariaDB [(none)]> USE katalog;
Database changed
MariaDB [katalog]> CREATE TABLE produk (nama VARCHAR(100), harga INT);
Query OK, 0 rows affected (0.012 sec)
MariaDB [katalog]> INSERT INTO produk VALUES ('Kopi Torabika', 15000);
Query OK, 1 row affected (0.002 sec)
MariaDB [katalog]> SELECT * FROM produk;
+---------------+-------+
| nama | harga |
+---------------+-------+
| Kopi Torabika | 15000 |
+---------------+-------+
1 row in set (0.000 sec)
MariaDB [katalog]> exit
ByeSesi ini sengaja singkat karena memang tidak ada yang baru: perintah SQL-nya identik, jawaban servernya identik, dan Kopi Torabika masuk dengan cara yang persis sama. Mari kita telaah tiga detail kecil yang membedakan:
- Prompt
MariaDB [(none)]>— klien menampilkan identitasnya di prompt; label(none)berarti belum ada database kerja yang dipilih, berganti[katalog]setelahUSE. - Tanpa peringatan sandi — berbeda dari klien
mysql, klienmariadbtidak mencetak peringatan keamanan untuk-ppada baris perintah; kebiasaan menjauhkan sandi dari terminal tetap disarankan. 2 rows in set (0.000 sec)— presisi waktu MariaDB mencatat tiga angka desimal, sedikit berbeda gaya dari0.00 secmilik MySQL; detail kosmetik yang membuat output kedua mesin mudah dibedakan sekilas.
MariaDB atau MySQL #
Uji drop-in kita lulus: aplikasi yang ditulis untuk MySQL akan menyambung ke MariaDB tanpa perubahan kode. Lalu kapan memilih yang mana? Jawaban jujurnya kembali ke sejarah — MariaDB lahir pada 2009 dari tangan pencipta MySQL setelah proyeknya dibeli Oracle, dan sejak itu keduanya berkembang sebagai dua pohon yang berbeda akar sama. MariaDB menjual lisensi GPL penuh untuk seluruh komponennya tanpa edisi komersial terpisah, menjadi database bawaan sejumlah distribusi Linux besar, dan mengembangkan fitur-fiturnya sendiri — mesin penyimpanan tambahan sampai perbaikan sintaks SQL. MySQL di sisi lain ditunggangi Oracle dengan ekosistem cloud yang sangat luas dan fitur enterprise yang terus bertambah. Untuk proyek baru, keduanya sama-sama layak: pilihlah berdasarkan stack yang sudah dipakai tim, kenyamanan soal lisensi dan sponsor komersialnya, serta fitur spesifik yang benar-benar dibutuhkan — bukan berdasarkan dendam sejarah. Yang tidak boleh dicampuradukkan hanyalah satu hal berikut.
Jangan Menukar Volume antar Mesin #
Kompatibilitas protokol menipu kita tepat di satu tempat: isi direktori data. Format internal MySQL dan MariaDB sudah lama berpisah — struktur tabel sistem berbeda, dan format binlog yang dicatat kedua mesin pun tidak lagi saling mengerti.
Itulah alasan volume kita sejak awal diberi nama yang menyebut mesinnya: db-data-mysql dan db-data-maria. Nama yang jujur adalah pagar paling murah di dunia yang serba bertukar-tukar ini.
Reset Bersih untuk Mencoba Ulang #
Ada satu pelajaran praktis dari sifat inisialisasi-sekali yang sudah kita catat di PostgreSQL: variabel MARIADB_* hanya dibaca saat volume masih kosong. Mencoba ulang inisialisasi — misalnya setelah mengubah kata sandi di flag -e — menuntut volume yang dikosongkan lebih dulu, dan ritual lengkapnya berbunyi:
$ docker rm -f db-maria
$ docker volume rm db-data-mariaOutput yang Dihasilkan:
db-maria
db-data-mariaDua baris itu adalah konfirmasi bahwa container dan volumenya benar-benar pergi — docker volume rm menolak bekerja selama masih ada container yang memasang volumenya, sehingga urutan perintahnya tidak bisa dibalik. Menjalankan ulang perintah docker run yang sama kini melahirkan cluster baru:
$ docker run -d --name db-maria \
-e MARIADB_ROOT_PASSWORD=rahasia123 \
-e MARIADB_DATABASE=katalog \
-e MARIADB_USER=katalog \
-e MARIADB_PASSWORD=rahasia123 \
-v db-data-maria:/var/lib/mysql \
mariadb:11.4Output yang Dihasilkan:
053e984d295fd1df56308f63a9315faa289801d445e0cf2dfa4ce51b9c45dfccLog container baru kembali diawali Initializing MariaDB — dan tabel produk bersama Kopi Torabika-nya tidak ikut pindah, karena cluster lama ikut volume lama yang barusan kita buang. Reset bersih memang selalu bermakna factory reset; untuk data yang berharga, jalan satu-satunya adalah backup, bukan harapan.
Tiga mesin kini berdiri di mesin Budi — PostgreSQL, MySQL, MariaDB — dan semuanya relational: tabel, baris, kolom, join. Keluarga database yang kita panggil berikutnya menolak seluruh kosakata itu. Redis menyimpan pasangan kunci-nilai di memori, tanpa tabel dan tanpa bahasa SQL, dan justru karena itu menjadi pelengkap favorit aplikasi web modern: cache, sesi, hitungan, antrian ringan. Chapter Menjalankan Redis menggeser cara pandang kita dari skema ke kunci, sekaligus membawa kita ke konfigurasi yang tidak lagi lewat environment variable.
Referensi #
- MariaDB — Docker Hub — daftar variabel MARIADB_, kompatibilitas MYSQL_, dan perilaku inisialisasi first-run.
- docker volume — CLI Reference
— perintah
rmdan aturannya tentang volume yang masih terpasang. - docker container run — CLI Reference
— flag
-edan-vuntuk menjalankan image MariaDB.