<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://noctkj.net/index.php?action=history&amp;feed=atom&amp;title=Linux_%3A_MariaDB_Dasar_%28Cara_Kerja_Database_Server%29</id>
	<title>Linux : MariaDB Dasar (Cara Kerja Database Server) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://noctkj.net/index.php?action=history&amp;feed=atom&amp;title=Linux_%3A_MariaDB_Dasar_%28Cara_Kerja_Database_Server%29"/>
	<link rel="alternate" type="text/html" href="https://noctkj.net/index.php?title=Linux_:_MariaDB_Dasar_(Cara_Kerja_Database_Server)&amp;action=history"/>
	<updated>2026-11-11T17:45:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://noctkj.net/index.php?title=Linux_:_MariaDB_Dasar_(Cara_Kerja_Database_Server)&amp;diff=1720&amp;oldid=prev</id>
		<title>Maintenance script: Protected &quot;Linux : MariaDB Dasar (Cara Kerja Database Server)&quot;: Proteksi editorial: edit/move sysop ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://noctkj.net/index.php?title=Linux_:_MariaDB_Dasar_(Cara_Kerja_Database_Server)&amp;diff=1720&amp;oldid=prev"/>
		<updated>2026-11-09T00:03:02Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/index.php/Linux_:_MariaDB_Dasar_(Cara_Kerja_Database_Server)&quot; title=&quot;Linux : MariaDB Dasar (Cara Kerja Database Server)&quot;&gt;Linux : MariaDB Dasar (Cara Kerja Database Server)&lt;/a&gt;&amp;quot;: Proteksi editorial: edit/move sysop ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:03, 9 November 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://noctkj.net/index.php?title=Linux_:_MariaDB_Dasar_(Cara_Kerja_Database_Server)&amp;diff=1719&amp;oldid=prev</id>
		<title>Maintenance script: Artikel baru: konsep database server MariaDB — socket vs TCP, akun user@host, InnoDB, dump konsisten</title>
		<link rel="alternate" type="text/html" href="https://noctkj.net/index.php?title=Linux_:_MariaDB_Dasar_(Cara_Kerja_Database_Server)&amp;diff=1719&amp;oldid=prev"/>
		<updated>2026-11-09T00:02:53Z</updated>

		<summary type="html">&lt;p&gt;Artikel baru: konsep database server MariaDB — socket vs TCP, akun user@host, InnoDB, dump konsisten&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;MariaDB&amp;#039;&amp;#039;&amp;#039; adalah database server yang paling sering kamu temui di server Debian dan Ubuntu. Halaman ini membahas &amp;#039;&amp;#039;&amp;#039;cara kerjanya&amp;#039;&amp;#039;&amp;#039;, bukan sekadar daftar perintah instalasi.&lt;br /&gt;
&lt;br /&gt;
== 🎯 Tujuan ==&lt;br /&gt;
Setelah membaca dan mencoba halaman ini, kamu bisa:&lt;br /&gt;
* menjelaskan beda &amp;#039;&amp;#039;&amp;#039;server&amp;#039;&amp;#039;&amp;#039; dan &amp;#039;&amp;#039;&amp;#039;client&amp;#039;&amp;#039;&amp;#039; di MariaDB;&lt;br /&gt;
* menentukan kapan koneksi lewat &amp;#039;&amp;#039;socket&amp;#039;&amp;#039; dan kapan lewat &amp;#039;&amp;#039;port&amp;#039;&amp;#039; 3306;&lt;br /&gt;
* membedakan &amp;#039;&amp;#039;&amp;#039;user sistem operasi&amp;#039;&amp;#039;&amp;#039; dan &amp;#039;&amp;#039;&amp;#039;akun MariaDB&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* membuat akun aplikasi dengan hak seperlunya, bukan memakai root;&lt;br /&gt;
* memilih &amp;#039;&amp;#039;&amp;#039;dump&amp;#039;&amp;#039;&amp;#039; sebagai cara backup, bukan menyalin folder data.&lt;br /&gt;
&lt;br /&gt;
== 📍 Konteks nyata ==&lt;br /&gt;
Bayangkan koperasi sekolah. Ada lemari besi berisi buku besar, ada petugas loket, dan ada jam layanan.&lt;br /&gt;
&lt;br /&gt;
Kamu tidak membuka lemari besi sendiri. Kamu menulis di formulir, menyerahkannya ke petugas, lalu petugas yang mencatat ke buku besar dan mengembalikan jawabannya.&lt;br /&gt;
&lt;br /&gt;
MariaDB bekerja persis begitu. Aplikasi (PHP, Python, aplikasi kasir) adalah pengunjung loket. &amp;lt;code&amp;gt;mariadbd&amp;lt;/code&amp;gt; adalah petugasnya. Folder &amp;lt;code&amp;gt;/var/lib/mysql&amp;lt;/code&amp;gt; adalah lemari besinya.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Aplikasi tidak pernah menyentuh file nilai.&amp;#039;&amp;#039;&amp;#039; Ia hanya mengirim pertanyaan SQL ke server.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Server yang memutuskan boleh atau tidak.&amp;#039;&amp;#039;&amp;#039; Bukan aplikasi, bukan file konfigurasi PHP.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Lemari besi dipegang satu petugas.&amp;#039;&amp;#039;&amp;#039; Kalau kamu salin sendiri saat loket buka, isinya bisa setengah jadi.&lt;br /&gt;
&lt;br /&gt;
🔥 &amp;#039;&amp;#039;&amp;#039;Kasus nyata:&amp;#039;&amp;#039;&amp;#039; Sebuah SMK punya aplikasi nilai berbasis PHP. Suatu sore admin menyalin folder &amp;lt;code&amp;gt;/var/lib/mysql&amp;lt;/code&amp;gt; ke flashdisk sebagai &amp;quot;backup&amp;quot;, padahal server sedang melayani input nilai. Arsipnya terlihat rapi, sekitar 400 MB. Dua bulan kemudian arsip itu dicoba dipulihkan dan InnoDB menolak membukanya, karena salinan diambil di tengah transaksi. Nilai satu kelas harus direkap manual dari kertas.&lt;br /&gt;
&lt;br /&gt;
== 🧠 Konsep singkat ==&lt;br /&gt;
=== 🔹 Satu paket, dua program ===&lt;br /&gt;
Paket &amp;lt;code&amp;gt;mariadb-server&amp;lt;/code&amp;gt; memasang &amp;#039;&amp;#039;&amp;#039;server&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;mariadbd&amp;lt;/code&amp;gt;. Paket klien memasang &amp;#039;&amp;#039;&amp;#039;client&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;mariadb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nama &amp;lt;code&amp;gt;mysqld&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt; masih ada sebagai symlink supaya skrip lama tetap jalan. Mengutip manpage Debian: &amp;lt;code&amp;gt;mysqld&amp;lt;/code&amp;gt; sekarang adalah symlink ke &amp;lt;code&amp;gt;mariadbd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Server yang memegang data, aturan, dan riwayat transaksi. Client hanya mengirim pertanyaan dan menampilkan jawaban. Karena itu client bisa dimatikan kapan saja tanpa merusak data.&lt;br /&gt;
&lt;br /&gt;
=== 🔹 Dua loket: socket dan port ===&lt;br /&gt;
Ada dua pintu masuk ke server yang sama:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Socket&amp;#039;&amp;#039;&amp;#039; — file &amp;lt;code&amp;gt;/run/mysqld/mysqld.sock&amp;lt;/code&amp;gt;. Hanya untuk proses di mesin itu. Cepat, tidak lewat jaringan.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;TCP&amp;#039;&amp;#039;&amp;#039; — port &amp;lt;code&amp;gt;3306&amp;lt;/code&amp;gt;. Bisa dari mesin lain, tergantung &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Di Debian dan Ubuntu, &amp;lt;code&amp;gt;/etc/mysql/mariadb.conf.d/50-server.cnf&amp;lt;/code&amp;gt; berisi &amp;lt;code&amp;gt;bind-address = 127.0.0.1&amp;lt;/code&amp;gt;. Artinya port 3306 hanya menerima sambungan dari mesin itu sendiri.&lt;br /&gt;
&lt;br /&gt;
📊 &amp;#039;&amp;#039;&amp;#039;Angka penting:&amp;#039;&amp;#039;&amp;#039; port bawaan &amp;lt;code&amp;gt;3306&amp;lt;/code&amp;gt;, socket &amp;lt;code&amp;gt;/run/mysqld/mysqld.sock&amp;lt;/code&amp;gt;, datadir &amp;lt;code&amp;gt;/var/lib/mysql&amp;lt;/code&amp;gt;, dan &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; bawaan &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Client memilih pintu secara otomatis. Kalau kamu menulis &amp;lt;code&amp;gt;-h localhost&amp;lt;/code&amp;gt;, client memakai socket. Kalau menulis &amp;lt;code&amp;gt;-h 127.0.0.1&amp;lt;/code&amp;gt;, client memakai TCP. Dua-duanya menuju server yang sama, tetapi jejaknya berbeda.&lt;br /&gt;
&lt;br /&gt;
=== 🔹 Tiga lapis yang harus lolos ===&lt;br /&gt;
Kegagalan koneksi database hampir selalu salah satu dari tiga lapis ini:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Proses hidup dan mendengar.&amp;#039;&amp;#039;&amp;#039; Ada proses &amp;lt;code&amp;gt;mariadbd&amp;lt;/code&amp;gt;, ada file socket atau port yang listen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Akun MariaDB cocok.&amp;#039;&amp;#039;&amp;#039; Nama user dan alamat asal cocok dengan akun yang terdaftar.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Hak cukup.&amp;#039;&amp;#039;&amp;#039; Akun itu punya izin pada database dan tabel yang dituju.&lt;br /&gt;
&lt;br /&gt;
Aturannya: &amp;#039;&amp;#039;&amp;#039;berhenti di lapis pertama yang gagal&amp;#039;&amp;#039;&amp;#039;. Jangan mengubah hak akses kalau servernya saja belum jalan.&lt;br /&gt;
&lt;br /&gt;
=== 🔹 Dua nama yang sering tertukar ===&lt;br /&gt;
MariaDB menyimpan akun sebagai pasangan &amp;lt;code&amp;gt;user@host&amp;lt;/code&amp;gt;. Titik koma terpenting: &amp;lt;code&amp;gt;&amp;#039;app&amp;#039;@&amp;#039;localhost&amp;#039;&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;&amp;#039;app&amp;#039;@&amp;#039;%&amp;#039;&amp;lt;/code&amp;gt; adalah &amp;#039;&amp;#039;&amp;#039;dua akun berbeda&amp;#039;&amp;#039;&amp;#039;, bukan satu akun dengan dua izin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fungsi !! Arti !! Contoh hasil&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;USER()&amp;lt;/code&amp;gt; || nama yang dikirim client || &amp;lt;code&amp;gt;app_nilai@localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CURRENT_USER()&amp;lt;/code&amp;gt; || akun yang benar-benar dipakai server || &amp;lt;code&amp;gt;app_nilai@localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SHOW GRANTS&amp;lt;/code&amp;gt; || hak milik akun yang sedang aktif || daftar GRANT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kalau dua nilai itu berbeda, artinya server mencocokkan permintaanmu ke akun lain. Itu petunjuk pertama saat muncul pesan &amp;quot;Access denied&amp;quot; yang membingungkan.&lt;br /&gt;
&lt;br /&gt;
Aturan pencocokan host: yang &amp;#039;&amp;#039;&amp;#039;paling spesifik menang&amp;#039;&amp;#039;&amp;#039;. Alamat persis lebih kuat daripada wildcard, dan &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; paling lemah.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Pola host !! Untuk apa !! Catatan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; || aplikasi di mesin yang sama || lewat socket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; || aplikasi di mesin yang sama || lewat TCP&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;192.168.100.%&amp;lt;/code&amp;gt; || aplikasi di LAN || wildcard satu segmen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; || semua alamat || hindari bila tidak perlu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 🔹 Di mana datanya benar-benar tinggal ===&lt;br /&gt;
Semua database dan tabel disimpan di &amp;#039;&amp;#039;&amp;#039;datadir&amp;#039;&amp;#039;&amp;#039;, biasanya &amp;lt;code&amp;gt;/var/lib/mysql&amp;lt;/code&amp;gt;, dimiliki user &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;. Di dalamnya ada &amp;lt;code&amp;gt;ibdata1&amp;lt;/code&amp;gt;, file &amp;lt;code&amp;gt;.ibd&amp;lt;/code&amp;gt; per tabel, dan berkas log.&lt;br /&gt;
&lt;br /&gt;
Ini bukan dokumen yang bisa dibuka dengan Word atau Notepad. Isinya struktur biner yang hanya masuk akal bagi server. Karena itu &amp;quot;backup&amp;quot; versi salin folder bukan sekadar kurang rapi, tetapi sering tidak bisa dipakai.&lt;br /&gt;
&lt;br /&gt;
=== 🔹 InnoDB dan arti transaksi ===&lt;br /&gt;
Storage engine bawaan MariaDB adalah &amp;#039;&amp;#039;&amp;#039;InnoDB&amp;#039;&amp;#039;&amp;#039;. Ia yang mengurus transaksi, kunci per baris, dan pemulihan setelah listrik padam lewat redo log.&lt;br /&gt;
&lt;br /&gt;
Transaksi berarti sekumpulan perubahan dianggap satu paket: semua berhasil, atau semua dibatalkan. Kalau server mati di tengah jalan, InnoDB memutar ulang log untuk menyelesaikan atau membatalkan paket itu.&lt;br /&gt;
&lt;br /&gt;
Karena itu:&lt;br /&gt;
* Menyalin file saat server hidup bisa menangkap paket yang setengah selesai.&lt;br /&gt;
* Backup yang benar memakai alat yang &amp;#039;&amp;#039;&amp;#039;meminta potret konsisten&amp;#039;&amp;#039;&amp;#039; ke server, bukan mencuri file di belakangnya.&lt;br /&gt;
&lt;br /&gt;
== 🧩 Istilah penting ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Istilah !! Arti sederhana !! Analogi&lt;br /&gt;
|-&lt;br /&gt;
| Instance || satu proses server yang mengelola satu datadir || satu petugas, satu lemari&lt;br /&gt;
|-&lt;br /&gt;
| datadir || folder induk semua data || lemari besi&lt;br /&gt;
|-&lt;br /&gt;
| Socket || jalur komunikasi lokal berbentuk file || loket dalam gedung&lt;br /&gt;
|-&lt;br /&gt;
| bind-address || alamat yang boleh dihubungi lewat TCP || pintu mana yang dibuka&lt;br /&gt;
|-&lt;br /&gt;
| user@host || akun beserta alamat asal yang diizinkan || kartu anggota + lokasi&lt;br /&gt;
|-&lt;br /&gt;
| Privilege || hak baca, tulis, ubah, hapus || tingkat akses kunci&lt;br /&gt;
|-&lt;br /&gt;
| Storage engine || mesin penyimpanan tabel || rak kayu atau rak besi&lt;br /&gt;
|-&lt;br /&gt;
| Transaksi || paket perubahan all-or-nothing || setoran tunai sekali hitung&lt;br /&gt;
|-&lt;br /&gt;
| Dump || berkas SQL berisi struktur dan isi || fotokopi buku besar&lt;br /&gt;
|-&lt;br /&gt;
| Consistent snapshot || potret data pada satu titik waktu || foto, bukan video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Istilah lain yang akan kamu temui: &amp;lt;code&amp;gt;max_connections&amp;lt;/code&amp;gt; (jumlah sambungan bersamaan, bawaan 151), &amp;lt;code&amp;gt;max_allowed_packet&amp;lt;/code&amp;gt; (ukuran kiriman terbesar, bawaan 16 MB), dan &amp;lt;code&amp;gt;tmpdir&amp;lt;/code&amp;gt; (folder kerja sementara saat mengolah query besar).&lt;br /&gt;
&lt;br /&gt;
== 🔧 Praktik: menyiapkan database untuk aplikasi sekolah ==&lt;br /&gt;
Latihan ini memakai VM Debian atau Ubuntu, &amp;#039;&amp;#039;&amp;#039;bukan server produksi&amp;#039;&amp;#039;&amp;#039;. Pakai aplikasi nilai sekolah sebagai contoh supaya konteksnya terasa.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Potret keadaan awal.&amp;#039;&amp;#039;&amp;#039; Catat versi, layanan, dan jalur:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status mariadb --no-pager | head -5&lt;br /&gt;
mariadb --version&lt;br /&gt;
ss -lntp | grep 3306&lt;br /&gt;
ls -ld /var/lib/mysql&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Baca identitas server yang sebenarnya.&amp;#039;&amp;#039;&amp;#039; Jangan menebak dari file konfigurasi saja:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo mariadb -e &amp;quot;SELECT @@version, @@port, @@socket, @@datadir, @@bind_address;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Hasilnya adalah gabungan konfigurasi default dan isi &amp;lt;code&amp;gt;mariadb.conf.d&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Buktikan dua lapis identitas.&amp;#039;&amp;#039;&amp;#039; Jalankan sebagai user OS biasa, lalu bandingkan:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
sudo -u www-data mariadb -e &amp;quot;SELECT USER(), CURRENT_USER();&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Baris pertama menjawab &amp;quot;siapa OS-nya&amp;quot;, baris kedua menjawab &amp;quot;akun MariaDB mana yang dipakai&amp;quot;.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Buat database dan akun aplikasi.&amp;#039;&amp;#039;&amp;#039; Akun khusus, bukan root:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo mariadb &amp;lt;&amp;lt;&amp;#039;SQL&amp;#039;&lt;br /&gt;
CREATE DATABASE nilai_smk&lt;br /&gt;
  CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;&lt;br /&gt;
CREATE USER &amp;#039;app_nilai&amp;#039;@&amp;#039;localhost&amp;#039; IDENTIFIED BY &amp;#039;GantiDenganSandiPanjang&amp;#039;;&lt;br /&gt;
GRANT SELECT, INSERT, UPDATE, DELETE ON nilai_smk.* TO &amp;#039;app_nilai&amp;#039;@&amp;#039;localhost&amp;#039;;&lt;br /&gt;
SQL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;code&amp;gt;utf8mb4&amp;lt;/code&amp;gt; penting agar nama siswa dengan karakter khusus tidak rusak.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Uji dari sudut pandang aplikasi.&amp;#039;&amp;#039;&amp;#039; Masuk sebagai &amp;lt;code&amp;gt;app_nilai&amp;lt;/code&amp;gt;, buat tabel, lalu coba hapus database:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mariadb -u app_nilai -p nilai_smk -e &amp;quot;&lt;br /&gt;
CREATE TABLE siswa (id INT PRIMARY KEY AUTO_INCREMENT, nama VARCHAR(80));&lt;br /&gt;
INSERT INTO siswa (nama) VALUES (&amp;#039;Rina&amp;#039;), (&amp;#039;Bagas&amp;#039;);&amp;quot;&lt;br /&gt;
mariadb -u app_nilai -p -e &amp;quot;DROP DATABASE nilai_smk;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Perintah terakhir &amp;#039;&amp;#039;&amp;#039;harus ditolak&amp;#039;&amp;#039;&amp;#039;. Pesannya kurang lebih &amp;lt;code&amp;gt;Access denied ... to database &amp;#039;nilai_smk&amp;#039;&amp;lt;/code&amp;gt;. Itu tanda hak sudah benar.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Bandingkan socket dan TCP.&amp;#039;&amp;#039;&amp;#039; Perhatikan akun mana yang tercatat di masing-masing jalur:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo mariadb -e &amp;quot;SELECT USER(), CURRENT_USER();&amp;quot;&lt;br /&gt;
sudo mariadb -h 127.0.0.1 -e &amp;quot;SELECT USER(), CURRENT_USER();&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Jangan berasumsi. Baca hasilnya, lalu cocokkan dengan &amp;lt;code&amp;gt;SHOW GRANTS&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Periksa engine tabel.&amp;#039;&amp;#039;&amp;#039; Pastikan tabel baru benar-benar InnoDB:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo mariadb -e &amp;quot;SHOW ENGINES\G&amp;quot; | grep -E &amp;quot;InnoDB|DEFAULT&amp;quot;&lt;br /&gt;
sudo mariadb -e &amp;quot;SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES&lt;br /&gt;
  WHERE TABLE_SCHEMA=&amp;#039;nilai_smk&amp;#039;;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Ambil dump yang konsisten.&amp;#039;&amp;#039;&amp;#039; Opsi &amp;lt;code&amp;gt;--single-transaction&amp;lt;/code&amp;gt; membuat potret tanpa mengunci tabel InnoDB:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir -p /srv/backup-db&lt;br /&gt;
sudo mariadb-dump --single-transaction --routines --events \&lt;br /&gt;
  nilai_smk &amp;gt; /srv/backup-db/nilai-$(date +%F).sql&lt;br /&gt;
head -20 /srv/backup-db/nilai-$(date +%F).sql&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Restore ke database uji, bukan ke aslinya.&amp;#039;&amp;#039;&amp;#039; Ini kebiasaan yang membedakan admin rapi dan admin panik:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo mariadb -e &amp;quot;CREATE DATABASE nilai_uji&amp;quot;&lt;br /&gt;
sudo mariadb nilai_uji &amp;lt; /srv/backup-db/nilai-$(date +%F).sql&lt;br /&gt;
sudo mariadb -e &amp;quot;SELECT COUNT(*) FROM nilai_uji.siswa;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Jumlah barisnya harus sama dengan database asal.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Bandingkan dengan cara yang salah.&amp;#039;&amp;#039;&amp;#039; Coba salin datadir saat server hidup, lalu lihat hasilnya:&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp -a /var/lib/mysql /srv/backup-db/salinan-datadir&lt;br /&gt;
ls -l /srv/backup-db/salinan-datadir | head&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ukurannya bisa besar, tetapi isinya tidak dijamin konsisten. Simpan sebagai pembanding, lalu hapus.&lt;br /&gt;
&lt;br /&gt;
💡 &amp;#039;&amp;#039;&amp;#039;Tips:&amp;#039;&amp;#039;&amp;#039; Beri nama akun sesuai aplikasinya, misalnya &amp;lt;code&amp;gt;app_nilai&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;app_kasir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;app_absensi&amp;lt;/code&amp;gt;. Saat ada masalah, kamu langsung tahu aplikasi mana yang harus diperiksa.&lt;br /&gt;
&lt;br /&gt;
⚠️ &amp;#039;&amp;#039;&amp;#039;Hati-hati:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;FLUSH PRIVILEGES&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;tidak wajib&amp;#039;&amp;#039;&amp;#039; setelah &amp;lt;code&amp;gt;CREATE USER&amp;lt;/code&amp;gt; atau &amp;lt;code&amp;gt;GRANT&amp;lt;/code&amp;gt;. Perintah itu hanya perlu kalau kamu mengubah tabel hak akses secara langsung dengan &amp;lt;code&amp;gt;INSERT&amp;lt;/code&amp;gt; atau &amp;lt;code&amp;gt;UPDATE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== 🏭 Dipakai di dunia kerja ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sekolah:&amp;#039;&amp;#039;&amp;#039; aplikasi ujian berbasis komputer dan e-rapor menyimpan soal serta nilai di MariaDB. Akun aplikasi wajib terbatas, karena satu salah &amp;lt;code&amp;gt;GRANT&amp;lt;/code&amp;gt; bisa membuat nilai satu angkatan bisa dihapus dari halaman web.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Kantor:&amp;#039;&amp;#039;&amp;#039; aplikasi kasir dan stok distributor memakai satu database untuk beberapa cabang. &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; dan akun per cabang menentukan siapa boleh masuk dari mana.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Klinik dan puskesmas:&amp;#039;&amp;#039;&amp;#039; rekap kunjungan dan stok obat disimpan di database. Data ini termasuk data pribadi, jadi akses dan backup-nya diatur ketat.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ISP dan warnet:&amp;#039;&amp;#039;&amp;#039; aplikasi billing mencatat sesi dan pembayaran pelanggan. Server yang tumbang berarti transaksi tidak tercatat, jadi backup dan uji restore masuk rutinitas.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Industri:&amp;#039;&amp;#039;&amp;#039; mesin produksi mengirim data ke database untuk laporan harian. Beban tulis tinggi menuntut pemahaman transaksi dan index, bukan hanya perintah SELECT.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hosting dan pengembang aplikasi:&amp;#039;&amp;#039;&amp;#039; banyak aplikasi PHP, Laravel, dan WordPress memakai MariaDB. Kemampuan membaca pesan error dan hak akses mempercepat pekerjaan sehari-hari.&lt;br /&gt;
&lt;br /&gt;
== ✅ Verifikasi ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Yang dicek !! Perintah !! Hasil yang benar&lt;br /&gt;
|-&lt;br /&gt;
| Layanan hidup || &amp;lt;code&amp;gt;systemctl is-active mariadb&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Port dan socket || &amp;lt;code&amp;gt;ss -lntp &amp;amp;#124; grep 3306&amp;lt;/code&amp;gt; || listen di 127.0.0.1:3306&lt;br /&gt;
|-&lt;br /&gt;
| Identitas server || &amp;lt;code&amp;gt;SELECT @@datadir, @@socket;&amp;lt;/code&amp;gt; || jalur sesuai kenyataan&lt;br /&gt;
|-&lt;br /&gt;
| Akun terpakai || &amp;lt;code&amp;gt;SELECT CURRENT_USER();&amp;lt;/code&amp;gt; || akun yang kamu buat&lt;br /&gt;
|-&lt;br /&gt;
| Hak akun || &amp;lt;code&amp;gt;SHOW GRANTS FOR &amp;#039;app_nilai&amp;#039;@&amp;#039;localhost&amp;#039;;&amp;lt;/code&amp;gt; || hanya SELECT, INSERT, UPDATE, DELETE&lt;br /&gt;
|-&lt;br /&gt;
| Uji tolak hak || &amp;lt;code&amp;gt;DROP DATABASE nilai_smk;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ERROR 1044&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Engine tabel || &amp;lt;code&amp;gt;SELECT ENGINE FROM information_schema.TABLES ...&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;InnoDB&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Isi dump || &amp;lt;code&amp;gt;grep -c &amp;quot;CREATE TABLE&amp;quot; file.sql&amp;lt;/code&amp;gt; || jumlah tabel sesuai&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
🧪 &amp;#039;&amp;#039;&amp;#039;Uji cepat:&amp;#039;&amp;#039;&amp;#039; satu baris untuk memastikan server benar-benar melayani, bukan hanya prosesnya ada.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mariadb -e &amp;quot;SELECT 1 AS hidup, NOW() AS waktu_server;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ⚠️ Kesalahan umum &amp;amp; troubleshooting ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Gejala !! Penyebab !! Perbaikan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Can&amp;#039;t connect ... socket&amp;lt;/code&amp;gt; || layanan mati atau socket beda jalur || cek &amp;lt;code&amp;gt;systemctl status&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;@@socket&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Connection refused&amp;lt;/code&amp;gt; ke 127.0.0.1 || hanya socket yang aktif || periksa &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;skip-networking&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Access denied for user&amp;lt;/code&amp;gt; || sandi salah atau akun beda host || baca &amp;lt;code&amp;gt;CURRENT_USER()&amp;lt;/code&amp;gt;, cek &amp;lt;code&amp;gt;SHOW GRANTS&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Host ... is not allowed&amp;lt;/code&amp;gt; || tidak ada akun untuk alamat asal || buat akun &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; yang tepat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ERROR 1044&amp;lt;/code&amp;gt; || akun ada, hak kurang || tambah &amp;lt;code&amp;gt;GRANT&amp;lt;/code&amp;gt; seperlunya&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Unknown database&amp;lt;/code&amp;gt; || nama salah atau belum dibuat || &amp;lt;code&amp;gt;SHOW DATABASES;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Too many connections&amp;lt;/code&amp;gt; || sambungan menumpuk || tutup koneksi aplikasi, cek &amp;lt;code&amp;gt;max_connections&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;No space left on device&amp;lt;/code&amp;gt; || disk penuh || cek &amp;lt;code&amp;gt;df -h&amp;lt;/code&amp;gt;, bersihkan log dan dump lama&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Table ... is marked as crashed&amp;lt;/code&amp;gt; || server mati keras saat menulis || hentikan layanan, periksa dengan alat recovery InnoDB&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Can&amp;#039;t create/write to file&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;tmpdir&amp;lt;/code&amp;gt; penuh atau izin salah || cek ruang dan pemilik folder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
⚠️ &amp;#039;&amp;#039;&amp;#039;Hati-hati:&amp;#039;&amp;#039;&amp;#039; pesan &amp;quot;Access denied&amp;quot; tidak selalu berarti sandi salah. Di banyak kasus, sandi benar tetapi server mencocokkan ke akun lain karena alamat asalnya berbeda.&lt;br /&gt;
&lt;br /&gt;
🔥 &amp;#039;&amp;#039;&amp;#039;Kasus nyata:&amp;#039;&amp;#039;&amp;#039; Sebuah kantor distributor memindahkan aplikasi kasir ke server baru. Aplikasi menulis &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;, tetapi pustaka kliennya menerjemahkan itu ke TCP.&lt;br /&gt;
&lt;br /&gt;
Akun yang dibuat hanya &amp;lt;code&amp;gt;&amp;#039;kasir&amp;#039;@&amp;#039;localhost&amp;#039;&amp;lt;/code&amp;gt;, sehingga koneksi ditolak setiap pagi selama tiga hari. Tim menuduh jaringan, padahal penyebabnya satu baris pola host. Solusinya bukan memberi &amp;lt;code&amp;gt;&amp;#039;%&amp;#039;&amp;lt;/code&amp;gt;, tetapi membuat akun untuk alamat yang benar-benar dipakai.&lt;br /&gt;
&lt;br /&gt;
== 🔐 Catatan keamanan &amp;amp; etika ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Jangan pakai root untuk aplikasi.&amp;#039;&amp;#039;&amp;#039; Akun aplikasi cukup SELECT, INSERT, UPDATE, DELETE pada satu database. Root hanya untuk pekerjaan administrasi di mesin itu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Biarkan &amp;lt;code&amp;gt;bind-address&amp;lt;/code&amp;gt; tetap 127.0.0.1&amp;#039;&amp;#039;&amp;#039; kalau tidak ada aplikasi dari mesin lain. Membukanya ke &amp;lt;code&amp;gt;0.0.0.0&amp;lt;/code&amp;gt; tanpa firewall sama dengan menaruh loket di pinggir jalan.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sandi di file konfigurasi&amp;#039;&amp;#039;&amp;#039; harus dibaca hanya oleh pemiliknya. File &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; dengan mode 644 dan isi sandi database adalah kebocoran yang menunggu waktu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dump berisi data pribadi.&amp;#039;&amp;#039;&amp;#039; Nilai, nomor telepon, dan riwayat pembayaran ada di dalamnya. Simpan dengan izin ketat, jangan di folder web yang bisa diunduh, dan jangan dikirim ke grup chat.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Autentikasi &amp;lt;code&amp;gt;unix_socket&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; tidak memakai sandi; kekuatannya adalah keamanan user OS. Dokumentasi resmi menegaskan: siapa pun yang bisa menjadi user OS itu bisa masuk. Jadi jagalah &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; dan akun sistem.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Etika:&amp;#039;&amp;#039;&amp;#039; data nilai, pasien, dan pelanggan bukan bahan latihan. Uji di VM sendiri, dan jangan pernah mencoba memulihkan dump produksi ke server orang lain tanpa izin.&lt;br /&gt;
&lt;br /&gt;
📊 &amp;#039;&amp;#039;&amp;#039;Angka penting:&amp;#039;&amp;#039;&amp;#039; di instalasi baru paket Debian dan Ubuntu, &amp;lt;code&amp;gt;root@localhost&amp;lt;/code&amp;gt; dibuat memakai plugin &amp;lt;code&amp;gt;unix_socket&amp;lt;/code&amp;gt;. Kalau seseorang pernah menjalankan &amp;lt;code&amp;gt;mysql_secure_installation&amp;lt;/code&amp;gt;, plugin itu bisa berubah menjadi autentikasi sandi. Karena itu selalu periksa, jangan mengandalkan asumsi.&lt;br /&gt;
&lt;br /&gt;
== 📌 Kesimpulan ==&lt;br /&gt;
MariaDB adalah &amp;#039;&amp;#039;&amp;#039;layanan&amp;#039;&amp;#039;&amp;#039;, bukan aplikasi yang dibuka: satu proses memegang datadir, dan semua permintaan lewat loket socket atau port 3306.&lt;br /&gt;
&lt;br /&gt;
Kunci memahami masalahnya ada tiga lapis: proses, akun &amp;lt;code&amp;gt;user@host&amp;lt;/code&amp;gt;, lalu hak. Berhenti di lapis pertama yang gagal, dan baca &amp;lt;code&amp;gt;CURRENT_USER()&amp;lt;/code&amp;gt; sebelum menebak.&lt;br /&gt;
&lt;br /&gt;
Backup yang sah adalah dump yang pernah direstore, bukan folder yang berhasil disalin.&lt;br /&gt;
&lt;br /&gt;
Langkah berikutnya: ambil satu database latihan, buat akun aplikasi dengan hak terbatas, lalu buktikan dump-nya bisa dipulihkan ke database uji.&lt;br /&gt;
&lt;br /&gt;
== 🔗 Materi terkait ==&lt;br /&gt;
* [[Linux : Manajemen Paket dan Repositori Debian]] — cara memasang dan memeriksa paket &amp;lt;code&amp;gt;mariadb-server&amp;lt;/code&amp;gt;.&lt;br /&gt;
* [[Linux : Membuat Service Sendiri dengan systemd]] — memahami mengapa &amp;lt;code&amp;gt;mariadb.service&amp;lt;/code&amp;gt; bisa gagal start.&lt;br /&gt;
* [[Linux : Log dan journalctl untuk Troubleshooting]] — membaca jejak kegagalan layanan database.&lt;br /&gt;
* [[Linux : Backup Otomatis dengan rsync, tar, dan cron]] — menjadwalkan dump dan menyimpan salinannya.&lt;br /&gt;
* [[Linux : Praktikum Uji Restore dan Verifikasi Arsip Backup]] — membuktikan arsip benar-benar bisa dipulihkan.&lt;br /&gt;
* [[Linux : Nginx Dasar dan Virtual Host]] — memasang aplikasi web yang akan berbicara ke database ini.&lt;br /&gt;
* [[Debian : Database Server]] dan [[Shell Scripting : Mariadb dan PhpMyAdmin]] — panduan instalasi dan skrip pemasangan.&lt;br /&gt;
&lt;br /&gt;
== 📚 Referensi ==&lt;br /&gt;
* MariaDB Documentation — &amp;#039;&amp;#039;Authentication Plugin - Unix Socket&amp;#039;&amp;#039;.&lt;br /&gt;
* MariaDB Documentation — &amp;#039;&amp;#039;Differences in MariaDB in Debian (and Ubuntu)&amp;#039;&amp;#039;.&lt;br /&gt;
* MariaDB Documentation — &amp;#039;&amp;#039;mariadb-dump&amp;#039;&amp;#039;.&lt;br /&gt;
* Debian Manpages bookworm — &amp;lt;code&amp;gt;mariadbd(8)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mariadb(1)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mariadb-dump(1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Berkas konfigurasi &amp;lt;code&amp;gt;/etc/mysql/mariadb.conf.d/50-server.cnf&amp;lt;/code&amp;gt; pada MariaDB 10.11 (Ubuntu 24.04), diperiksa langsung: &amp;lt;code&amp;gt;bind-address = 127.0.0.1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;socket = /run/mysqld/mysqld.sock&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;datadir = /var/lib/mysql&amp;lt;/code&amp;gt;, engine bawaan &amp;lt;code&amp;gt;InnoDB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:TKJ]]&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Database]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
</feed>