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:

ini
; 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      = 151

Baris ; 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 operasiLokasi konfigurasi yang umum
Linux/etc/my.cnf, /etc/mysql/my.cnf, ~/.my.cnf
WindowsC:\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:

VariabelDefaultFungsi
port3306Nomor port TCP yang didengarkan server
bind-address*Alamat IP yang diikat; * berarti semua antarmuka jaringan
datadirbervariasiFolder tempat seluruh data database disimpan
character-set-serverutf8mb4Character set bawaan untuk database dan koneksi baru
max_connections151Jumlah 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:

sql
SHOW VARIABLES LIKE 'port';

Output yang Dihasilkan:

text
+---------------+-------+
| 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:

sql
SHOW VARIABLES LIKE 'character_set_server';

Output yang Dihasilkan:

text
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| character_set_server | utf8mb4 |
+----------------------+---------+
1 row in set (0.00 sec)
sql
SHOW VARIABLES LIKE 'max_connections';

Output yang Dihasilkan:

text
+-----------------+-------+
| 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:

sql
SET GLOBAL max_connections = 200;

Output yang Dihasilkan:

text
Query OK, 0 rows affected (0.00 sec)

Perubahan langsung terlihat bila kita membaca ulang variabelnya:

sql
SHOW VARIABLES LIKE 'max_connections';

Output yang Dihasilkan:

text
+-----------------+-------+
| 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:

sql
SET GLOBAL max_connections = 151;

Output yang Dihasilkan:

text
Query OK, 0 rows affected (0.00 sec)

Bentuk SET PERSIST untuk perubahan yang permanen tampak seperti ini:

sql
-- @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:

bash
sudo systemctl restart mysql    # Linux (Debian/Ubuntu)
bash
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 #

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.