Server MySQL yang baru terpasang tidak selalu berperilaku persis seperti yang kita butuhkan: port yang didengarkannya, jumlah koneksi maksimum, sampai character set default semuanya bisa kita atur. Pengaturan tersebut dikenal sebagai variabel server, dan MySQL menyediakan dua jalur untuk mengelolanya: file konfigurasi yang dibaca saat server menyala, serta perintah SQL yang mengubah nilai variabel selagi server berjalan. Pada Chapter ini kita akan membongkar isi file my.cnf/my.ini, mengenali variabel yang paling sering diubah, lalu membaca dan mengubah konfigurasi aktif langsung dari sesi MySQL.
File Konfigurasi my.cnf dan my.ini #
Saat mysqld menyala, server mencari file konfigurasi di beberapa lokasi baku dan membacanya berurutan. Di Linux dan macOS file tersebut bernama my.cnf, sedangkan di Windows bernama my.ini. Isinya adalah daftar section dalam kurung siku, dan masing-masing section diikuti pasangan nama = nilai. Section yang paling penting bagi kita adalah [mysqld] karena seluruh pengaturan server berada di sana, sementara section [client] dan [mysql] hanya mengatur perilaku program client. Contoh isinya seperti berikut:
; Contoh my.cnf / my.ini — bagian server
[mysqld]
port = 3306
bind-address = 127.0.0.1
datadir = /var/lib/mysql
character-set-server = utf8mb4
max_connections = 151Baris ; Contoh ... adalah komentar; file opsi MySQL menerima komentar dengan awalan titik koma (;) maupun tanda pagar (#). Lima baris di bawahnya mengatur lima variabel: port TCP, alamat IP yang diikat server, lokasi folder data, character set default, dan batas jumlah koneksi. Lokasi file konfigurasi berbeda tiap sistem operasi, dan MySQL membaca semuanya bila ada sehingga nilai dari file yang dibaca terakhir menang:
| Sistem operasi | Lokasi konfigurasi yang umum |
|---|---|
| Linux | /etc/my.cnf, /etc/mysql/my.cnf, ~/.my.cnf |
| Windows | C:\ProgramData\MySQL\MySQL Server 8.4\my.ini |
| macOS (Homebrew) | /opt/homebrew/etc/my.cnf atau $(brew --prefix)/etc/my.cnf |
Setiap baris di section [mysqld] berfungsi sebagai nilai awal satu variabel server. Tabel berikut merangkum variabel yang paling sering kita temui beserta nilai defaultnya:
| Variabel | Default | Fungsi |
|---|---|---|
port | 3306 | Nomor port TCP yang didengarkan server |
bind-address | * | Alamat IP yang diikat; * berarti semua antarmuka jaringan |
datadir | bervariasi | Folder tempat seluruh data database disimpan |
character-set-server | utf8mb4 | Character set bawaan untuk database dan koneksi baru |
max_connections | 151 | Jumlah koneksi simultan maksimum yang diterima server |
Membaca Konfigurasi Aktif dengan SHOW VARIABLES #
File konfigurasi bisa berisi banyak nilai, tetapi yang benar-benar berlaku saat server berjalan bisa kita tanyakan langsung ke server. Statement SHOW VARIABLES menampilkan seluruh variabel aktif; pola LIKE memfilter nama variabel yang kita cari. Kita mulai dari variabel port:
SHOW VARIABLES LIKE 'port';Output yang Dihasilkan:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.00 sec)Nilai di lingkungan latihan course ini adalah 3306 karena server latihan sengaja dijalankan pada port tersebut agar tidak bentrok dengan instalasi MySQL lain di komputer. Pada instalasi standar yang tidak diubah-ubah, nilai variabel port adalah 3306. Selanjutnya kita periksa character set dan batas koneksi:
SHOW VARIABLES LIKE 'character_set_server';Output yang Dihasilkan:
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| character_set_server | utf8mb4 |
+----------------------+---------+
1 row in set (0.00 sec)SHOW VARIABLES LIKE 'max_connections';Output yang Dihasilkan:
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.00 sec)Nilai utf8mb4 pada character_set_server menegaskan server kita mampu menyimpan karakter Unicode lengkap, termasuk emoji, tanpa konfigurasi tambahan. Nilai 151 pada max_connections adalah batas bawaan MySQL 8.4 untuk jumlah koneksi yang berjalan bersamaan. Sebagai alternatif SHOW VARIABLES, kita juga bisa membaca satu variabel memakai sintaks @@nama_variabel di statement SELECT — misalnya SELECT @@port; menghasilkan hal yang sama dengan filter port di atas.
Mengubah Nilai dengan SET GLOBAL, SESSION, dan PERSIST #
MySQL membedakan tiga ruang lingkup perubahan variabel. SET SESSION (penulisan singkatnya SET) hanya mengubah nilai untuk koneksi kita saat ini dan kembali normal begitu sesi ditutup. SET GLOBAL mengubah nilai untuk seluruh koneksi baru di server, tetapi nilainya kembali ke nilai file konfigurasi atau default begitu server di-restart. SET PERSIST mengubah nilai runtime sekaligus menuliskannya ke file mysqld-auto.cnf di dalam datadir sehingga nilainya bertahan lintas restart. Mari kita coba SET GLOBAL pada max_connections:
SET GLOBAL max_connections = 200;Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)Perubahan langsung terlihat bila kita membaca ulang variabelnya:
SHOW VARIABLES LIKE 'max_connections';Output yang Dihasilkan:
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 200 |
+-----------------+-------+
1 row in set (0.00 sec)Nilai sekarang 200 — server bersedia menerima 200 koneksi simultan sejak perintah tersebut dijalankan. Kita kembalikan nilainya ke 151 supaya server latihan kembali ke kondisi semula:
SET GLOBAL max_connections = 151;Output yang Dihasilkan:
Query OK, 0 rows affected (0.00 sec)Bentuk SET PERSIST untuk perubahan yang permanen tampak seperti ini:
-- @notest
SET PERSIST max_connections = 200;Statement tersebut mengubah nilai runtime dan menuliskan pengaturan ke file mysqld-auto.cnf, sehingga nilai 200 tetap berlaku setelah server mati dan menyala kembali. Bila kita berubah pikiran, statement RESET PERSIST menghapus catatan tersebut agar nilai kembali mengikuti my.cnf dan default internal.
Restart Server dan Kapan Restart Diperlukan #
Perubahan di file my.cnf/my.ini tidak dibaca ulang secara otomatis; file tersebut hanya diproses ketika mysqld menyala. Karena itu urutan kerjanya selalu: sunting file, restart server, lalu verifikasi dengan SHOW VARIABLES. Perintah restartnya mengikuti mekanisme service tiap sistem operasi:
sudo systemctl restart mysql # Linux (Debian/Ubuntu)brew services restart mysql # macOS (Homebrew)Di Windows, restart dilakukan dari jendela Services dengan memilih service MySQL lalu tombol Restart, atau lewat perintah administratif net stop MySQL84 dilanjutkan net start MySQL84 di terminal yang dibuka sebagai administrator. Sebagai ringkasan: gunakan SET SESSION untuk eksperimen sesi tunggal, SET GLOBAL untuk penyesuaian sementara selagi server hidup, dan file konfigurasi atau SET PERSIST bila nilainya harus bertahan setelah restart.
Referensi #
- Server System Variables — MySQL 8.4 Reference Manual
- SET Syntax for Variable Assignment — MySQL 8.4 Reference Manual
- Server Administration — MySQL 8.4 Reference Manual
Konfigurasi server kini berada dalam genggaman kita, dan server yang terpasang hanya berguna bila ada client yang berbicara dengannya. Chapter berikutnya memperkenalkan mysql client baris perintah: opsi koneksi, sesi interaktif, perintah backslash seperti \q dan \G, hingga mode batch untuk menjalankan file .sql.