Panduan Lengkap: Cara Install dan Konfigurasi MySQL 8.4 LTS di AlmaLinux 9

Panduan Lengkap: Cara Install dan Konfigurasi MySQL 8.4 LTS di AlmaLinux 9

Pendahuluan

MySQL 8.4 LTS adalah versi Long Term Support dari MySQL yang dirancang khusus untuk penggunaan jangka panjang, terutama di lingkungan server produksi. Berbeda dengan versi reguler yang lebih sering berubah, MySQL 8.4 LTS menawarkan stabilitas lebih tinggi, dukungan keamanan yang konsisten, serta performa yang sudah teruji untuk menangani aplikasi web dan sistem database skala kecil hingga besar. Inilah alasan kenapa banyak administrator server dan developer memilih MySQL 8.4 LTS, karena selain aman dan stabil, versi ini juga meminimalkan risiko error saat update, sehingga sangat cocok digunakan pada server yang membutuhkan keandalan dan uptime tinggi.

Mengenal MySQL 8.4 LTS

MySQL 8.4 LTS merupakan bagian dari skema rilis baru MySQL yang membedakan antara LTS (Long Term Support) dan Innovation Release. Versi LTS difokuskan pada stabilitas dan dukungan jangka panjang, sehingga sangat cocok untuk server produksi yang membutuhkan sistem database andal dan minim perubahan besar. Sementara itu, Innovation Release lebih sering mendapatkan pembaruan fitur terbaru, namun siklus dukungannya lebih singkat dan umumnya ditujukan untuk kebutuhan pengembangan atau pengujian.

Dari sisi fitur, MySQL 8.4 LTS membawa berbagai peningkatan penting seperti performa InnoDB yang lebih optimal, sistem keamanan yang lebih ketat secara default, serta penggunaan character set UTF8MB4 sebagai standar. Selain itu, MySQL 8.4 LTS mendapatkan update keamanan dan perbaikan bug secara berkala dalam jangka waktu panjang, sehingga administrator server tidak perlu sering melakukan upgrade mayor yang berisiko. Dengan siklus dukungan yang jelas dan fokus pada keamanan, MySQL 8.4 LTS menjadi pilihan ideal untuk sistem database yang digunakan secara terus-menerus di lingkungan produksi

Persiapan Sistem AlmaLinux 9

  • CPU: Minimal 1 Core (2 Core lebih disarankan)
  • RAM: Minimal 2 GB
  • Storage: Minimal 10 GB (SSD lebih baik)
  • OS: AlmaLinux 9.x 64-bit
  • Akses: Root atau sudo
  • Koneksi: Internet aktif
Catatan: MySQL 8.4 LTS bisa berjalan di resource kecil, tetapi performanya terbatas dan tidak disarankan untuk produksi.

Update Sistem dan Persiapan Akses Server

  1. Update Sistem Operasi AlmaLinux
    Pastikan sistem dalam kondisi terbaru sebelum instalasi MySQL agar tidak terjadi konflik dependensi.
    sudo dnf update -y
    
  2. Cek Versi AlmaLinux

    • Pastikan server menggunakan AlmaLinux 9.
      cat /etc/almalinux-release
      

      Output :

      [root@lab ~]# cat /etc/almalinux-release
      AlmaLinux release 9.7 (Moss Jungle Cat)
  3. Konfigurasi Akses Root / Sudo
    Pastikan kamu login sebagai root atau menggunakan user dengan hak sudo.

    • Cek hak sudo:

      sudo -v
      
      Catatan : Jika tidak ada error, berarti user sudah memiliki akses sudo.

Menambahkan Repository Resmi MySQL

  1. Menghapus Repository MySQL Lama (Jika Ada)
    • Jika sebelumnya pernah menginstall MySQL atau MariaDB, sebaiknya bersihkan repository lama untuk menghindari konflik versi.
      sudo dnf remove mysql* mariadb* -y
      sudo dnf clean all
      
    • Cek repository MySQL yang masih aktif (opsional):
      sudo dnf repolist | grep mysql
      

      Output :

      [root@lab ~]# sudo dnf repolist | grep mysql
      mysql-8.4-lts-community                 MySQL 8.4 LTS Community Server
      mysql-connectors-community              MySQL Connectors Community
      mysql-tools-8.4-lts-community           MySQL Tools 8.4 LTS Community
  2. Install MySQL Community Repository
    • Unduh dan install repository resmi MySQL untuk AlmaLinux 9 (RHEL 9 compatible).
      sudo dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
      
    • Mengaktifkan Repository MySQL 8.4 LTS
      Nonaktifkan repository MySQL lain dan pastikan hanya MySQL 8.4 yang aktif.
      sudo dnf repolist all | grep mysql
      

      Output :

    • Verifikasi repository aktif:
      sudo dnf repolist enabled | grep mysql
      

      Output :

      [root@Lab ~]# sudo dnf repolist enabled | grep mysql
      mysql-8.4-lts-community                 MySQL 8.4 LTS Community Server
      mysql-connectors-community              MySQL Connectors Community
      mysql-tools-8.4-lts-community           MySQL Tools 8.4 LTS Community

Instalasi MySQL 8.4 LTS di AlmaLinux 9

  1. Proses Install MySQL Server
    Setelah repository MySQL 8.4 LTS aktif, lakukan instalasi MySQL Server menggunakan perintah berikut:
    sudo dnf install -y mysql-community-server
    
  2. Verifikasi Versi MySQL
    Setelah instalasi selesai, pastikan MySQL yang terpasang adalah versi 8.4 LTS:
    mysqld --version
    
    Output :
    [root@lab ~]# mysqld --version
    /usr/sbin/mysqld  Ver 8.4.8 for Linux on x86_64 (MySQL Community Server - GPL)
  3. Struktur Direktori MySQL
    Secara default, MySQL 8.4 LTS di AlmaLinux 9 menggunakan struktur direktori berikut:
    • /var/lib/mysql
      Menyimpan seluruh data database MySQL
    • /etc/my.cnf
      File konfigurasi utama MySQL
    • /etc/my.cnf.d/
      Direktori konfigurasi tambahan
    • /var/log/mysqld.log
      Log error dan aktivitas MySQL Server
    • /usr/bin/mysql
      Binary client MySQL
      Catatan : Struktur ini penting untuk diketahui agar memudahkan proses konfigurasi, troubleshooting, dan maintenance MySQL di server.

Menjalankan dan Mengamankan MySQL Server

  1. Menjalankan Service MySQL
    Setelah instalasi selesai, jalankan service MySQL dengan perintah berikut:
    sudo systemctl start mysqld
    
  2. Pastikan MySQL berjalan normal:
    sudo systemctl status mysqld
    
  3. Mengaktifkan MySQL Saat Boot
    Agar MySQL otomatis berjalan setiap server dinyalakan ulang, aktifkan service MySQL:
    sudo systemctl enable mysqld
    
  4. Inisialisasi Password Root MySQL 8.4
    • Cek temporary password:
      sudo grep 'temporary password' /var/log/mysqld.log
      
      Output :
      A temporary password is generated for root@localhost: Abc#123!xyz
      
      Catatan : Simpan Password Abc#123!xyz untuk dapat login kedalam mysql
    • Login pertama kali ke MySQL
      mysql -u root -p
      
      Catatan : Masukkan temporary password dari log.
    • Set password root baru (WAJIB)
      ALTER USER 'root'@'localhost'
      IDENTIFIED BY 'PasswordBaru_Kuat123!';
      EXIT;
      
  5. Menjalankan mysql_secure_installation
    MySQL 8.4 LTS menyediakan script bawaan untuk melakukan konfigurasi keamanan dasar. Jalankan perintah berikut:
    sudo mysql_secure_installation
    

    Selama proses ini, kamu akan diminta untuk:

    • Mengatur password root MySQL
    • Menghapus user anonim
    • Menonaktifkan login root secara remote
    • Menghapus database test
    • Reload privilege table
    • Disarankan menjawab YES (Y) untuk semua opsi demi keamanan server.

Konfigurasi Dasar MySQL 8.4

  1. Lokasi File Konfigurasi (my.cnf)
    • File konfigurasi utama MySQL berada di:
      /etc/my.cnf
      
    • Selain itu, MySQL juga membaca konfigurasi tambahan dari direktori:
      /etc/my.cnf.d/
      
      Catatan : Disarankan melakukan perubahan konfigurasi pada file custom di direktori ini agar tidak tertimpa saat update.
  2. Pengaturan Port dan Bind Address
    • Secara default, MySQL berjalan pada port 3306 dan hanya bisa diakses secara lokal. Contoh konfigurasi dasar:
      [mysqld]
      port = 3306
      bind-address = 127.0.0.1
      
      Catatan : Gunakan 127.0.0.1 untuk server lokal. Jika MySQL perlu diakses dari luar server, sesuaikan bind address dengan kebutuhan dan pastikan firewall dikonfigurasi dengan benar.
    • Setelah melakukan perubahan, restart MySQL:
      sudo systemctl restart mysqld
      
  3. Konfigurasi Timezone
    • Untuk memastikan waktu database sesuai dengan waktu server, set timezone MySQL:
      [mysqld]
      default-time-zone = '+07:00'
      

      Atau sesuaikan dengan timezone server kamu.

    • Reload service MySQL setelah perubahan:

      sudo systemctl restart mysqld
      
  4. Set Character Set dan Collation (UTF8MB4)
    • Agar MySQL mendukung karakter lengkap (emoji, simbol, multibahasa), gunakan UTF8MB4 sebagai default:
      [mysqld]
      character-set-server = utf8mb4
      collation-server = utf8mb4_unicode_ci
      
    • Untuk client:
      [client]
      default-character-set = utf8mb4
      
    • Restart MySQL setelah konfigurasi:
      sudo systemctl restart mysqld
      

Manajemen User dan Hak Akses

  1. Membuat User MySQL Baru
    • Disarankan tidak menggunakan user root untuk aplikasi. Login ke MySQL terlebih dahulu:
      mysql -u root -p
      
    • Buat user baru:
      CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'passwordkuat';
      
  2. Grant Privileges
    Berikan hak akses sesuai kebutuhan aplikasi (prinsip least privilege):
    GRANT ALL PRIVILEGES ON nama_database.* TO 'appuser'@'localhost';
    FLUSH PRIVILEGES;
    
    Jika hanya membutuhkan akses tertentu, sesuaikan privilege yang diberikan.
  3. Praktik Keamanan User Database
    Beberapa praktik keamanan yang disarankan:
    • Gunakan password yang kuat dan unik
    • Pisahkan user admin dan user aplikasi
    • Berikan privilege seminimal mungkin
    • Hindari penggunaan user root untuk koneksi aplikasi
    • Langkah ini membantu menjaga keamanan database dari akses yang tidak diinginkan.
  4. Remote Access MySQL (Opsional)
    Secara default, MySQL hanya menerima koneksi lokal. Jika perlu akses dari server lain:
    Buat user dengan host % atau IP tertentu:

    CREATE USER 'appuser'@'%' IDENTIFIED BY 'passwordkuat';
    GRANT ALL PRIVILEGES ON nama_database.* TO 'appuser'@'%';
    FLUSH PRIVILEGES;
    

    Pastikan juga:

    • bind-address sudah disesuaikan
    • Firewall membuka port MySQL (3306)
    • Akses remote hanya diberikan jika benar-benar diperlukan

Optimasi Awal Performa MySQL

  1. Masuk kedalam File berikut
    nano /etc/my.cnf
    
  2. Pengaturan InnoDB Buffer Pool
    InnoDB Buffer Pool berfungsi menyimpan data dan index di memori agar akses database lebih cepat.
    [mysqld]
    innodb_buffer_pool_size = 512M
    
    Catatan : Gunakan nilai sesuai RAM server. Untuk server kecil, 512 MB–1 GB sudah cukup.
  3. Max Connections
    Menentukan jumlah maksimal koneksi MySQL secara bersamaan.
    [mysqld]
    max_connections = 150
    
    Catatan : Nilai ini aman untuk kebanyakan server aplikasi. Jangan terlalu besar agar RAM tidak cepat habis.
  4. Query Cache dan Table Cache
    Pada MySQL 8.4 LTS, Query Cache sudah tidak digunakan lagi, sehingga tidak perlu konfigurasi tambahan.
    Untuk table cache, gunakan pengaturan sederhana berikut:

    [mysqld]
    table_open_cache = 400
    
  5. Setelah Edit File
    WAJIB restart MySQL:
    systemctl restart mysqld
    

Monitoring dan Troubleshooting Dasar MySQL

  1. Cek Status MySQL
    • Cek status service (systemd)
      systemctl status mysqld
      
      Output :

  2. Log Error MySQL
    Log error sangat penting untuk troubleshooting ketika MySQL gagal start atau terjadi error runtime.I
    • Lokasi default di AlmaLinux 9:
      /var/log/mysqld.log
      
    • Melihat isi log:
      tail -n 50 /var/log/mysqld.log
      
      Output :
      2026-02-02T04:22:34.998647Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
      2026-02-02T04:22:35.066497Z 0 [System] [MY-015015] [Server] MySQL Server - start.
      2026-02-02T04:22:35.337895Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.4.8) starting as process 2316
      2026-02-02T04:22:35.353010Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
      2026-02-02T04:22:36.390290Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
      2026-02-02T04:22:37.228908Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
      2026-02-02T04:22:37.229009Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
      2026-02-02T04:22:37.318691Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
      2026-02-02T04:22:37.318857Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.4.8'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
      2026-02-02T05:42:01.282579Z 36 [Warning] [MY-010055] [Server] IP address '198.235.' could not be resolved: Name or service not known
      2026-02-02T05:47:24.484468Z 37 [Warning] [MY-010055] [Server] IP address '103.165' could not be resolved: Name or service not known
      2026-02-02T06:34:55.739503Z 40 [Warning] [MY-010056] [Server] Host name 'ce57f6dd6d.research-scanner.com' could not be resolved: Name or service not known
      2026-02-02T06:37:58.014404Z 41 [Warning] [MY-010056] [Server] Host name 'centos7134233.aspadmin.net' could not be resolved: Name or service not known
    • Memantau log secara real-time:
      tail -f /var/log/mysqld.log
      
      Output :
      2026-02-02T04:22:37.228908Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
      2026-02-02T04:22:37.229009Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
      2026-02-02T04:22:37.318691Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
      2026-02-02T04:22:37.318857Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.4.8'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
      2026-02-02T05:42:01.282579Z 36 [Warning] [MY-010055] [Server] IP address '198.237' could not be resolved: Name or service not known
      2026-02-02T05:47:24.484468Z 37 [Warning] [MY-010055] [Server] IP address '103.12' could not be resolved: Name or service not known
      2026-02-02T06:34:55.739503Z 40 [Warning] [MY-010056] [Server] Host name 'ce57f6dd6d.research-scanner.com' could not be resolved: Name or service not known
      2026-02-02T06:37:58.014404Z 41 [Warning] [MY-010056] [Server] Host name 'centos7134233.aspadmin.net' could not be resolved: Name or service not known
  3. Mengecek Koneksi MySQL yang Aktif
    • Untuk melihat jumlah koneksi yang sedang terhubung ke MySQL:
      SHOW STATUS LIKE 'Threads_connected';
      

      Output :

      mysql> SHOW STATUS LIKE 'Threads_connected';
      +-------------------+-------+
      | Variable_name     | Value |
      +-------------------+-------+
      | Threads_connected | 1     |
      +-------------------+-------+
      1 row in set (0.01 sec)
    • Melihat detail user dan host yang sedang terkoneksi:
      SHOW PROCESSLIST;
      

      Output :

      mysql> SHOW PROCESSLIST;
      +----+-----------------+-----------+------+---------+------+------------------------+------------------+
      | Id | User            | Host      | db   | Command | Time | State                  | Info             |
      +----+-----------------+-----------+------+---------+------+------------------------+------------------+
      |  5 | event_scheduler | localhost | NULL | Daemon  | 9294 | Waiting on empty queue | NULL             |
      | 42 | root            | localhost | NULL | Query   |    0 | init                   | SHOW PROCESSLIST |
      +----+-----------------+-----------+------+---------+------+------------------------+------------------+
      2 rows in set, 1 warning (0.00 sec)
      Jika koneksi terlalu banyak, bisa jadi perlu penyesuaian max_connections.
  4. Perintah Dasar Diagnostik MySQL
    Beberapa perintah penting untuk diagnosis awal performa dan kondisi server:

    • Cek uptime MySQL:

      SHOW STATUS LIKE 'Uptime';
      

      Output :

      mysql> SHOW STATUS LIKE 'Uptime';
      +---------------+-------+
      | Variable_name | Value |
      +---------------+-------+
      | Uptime        | 8944  |
      +---------------+-------+
      1 row in set (0.01 sec)
    • Cek penggunaan InnoDB buffer:
      SHOW ENGINE INNODB STATUS\G
      

      Output :

      mysql> SHOW ENGINE INNODB STATUS\G
      *************************** 1. row ***************************
        Type: InnoDB
        Name:
      Status:
      =====================================
      2026-02-02 12:22:29 140647435560512 INNODB MONITOR OUTPUT
      =====================================
      Per second averages calculated from the last 38 seconds
      -----------------
      BACKGROUND THREAD
      -----------------
      srv_master_thread loops: 3 srv_active, 0 srv_shutdown, 8988 srv_idle
      srv_master_thread log flush and writes: 0
      ----------
      SEMAPHORES
      ----------
      OS WAIT ARRAY INFO: reservation count 13
      OS WAIT ARRAY INFO: signal count 8
      RW-shared spins 0, rounds 0, OS waits 0
      RW-excl spins 0, rounds 0, OS waits 0
      RW-sx spins 0, rounds 0, OS waits 0
      Spin rounds per wait: 0.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx
      ------------
      TRANSACTIONS
      ------------
      Trx id counter 1297
      Purge done for trx's n:o < 1296 undo n:o < 0 state: running but idle
      History list length 0
      LIST OF TRANSACTIONS FOR EACH SESSION:
      ---TRANSACTION 422122566036696, not started
      0 lock struct(s), heap size 1128, 0 row lock(s)
      ---TRANSACTION 422122566035888, not started
      0 lock struct(s), heap size 1128, 0 row lock(s)
      ---TRANSACTION 422122566035080, not started
      0 lock struct(s), heap size 1128, 0 row lock(s)
      --------
      FILE I/O
      --------
      I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
      I/O thread 1 state: waiting for completed aio requests (read thread)
      I/O thread 2 state: waiting for completed aio requests (read thread)
      I/O thread 3 state: waiting for completed aio requests (read thread)
      I/O thread 4 state: waiting for completed aio requests (read thread)
      I/O thread 5 state: waiting for completed aio requests (write thread)
      I/O thread 6 state: waiting for completed aio requests (write thread)
      I/O thread 7 state: waiting for completed aio requests (write thread)
      I/O thread 8 state: waiting for completed aio requests (write thread)
      Pending normal aio reads: [0, 0, 0, 0] , aio writes: [0, 0, 0, 0] ,
       ibuf aio reads:
      Pending flushes (fsync) log: 0; buffer pool: 0
      871 OS file reads, 601 OS file writes, 188 OS fsyncs
      0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
      -------------------------------------
      INSERT BUFFER AND ADAPTIVE HASH INDEX
      -------------------------------------
      Ibuf: size 1, free list len 0, seg size 2, 0 merges
      merged operations:
       insert 0, delete mark 0, delete 0
      discarded operations:
       insert 0, delete mark 0, delete 0
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      Hash table size 34679, node heap has 0 buffer(s)
      0.00 hash searches/s, 0.00 non-hash searches/s
      ---
      LOG
      ---
      Log capacity                 104857600
      Log capacity used            104857600
      Log sequence number          19313804
      Log buffer assigned up to    19313804
      Log buffer completed up to   19313804
      Log written up to            19313804
      Log flushed up to            19313804
      Added dirty pages up to      19313804
      Pages flushed up to          19313804
      Last checkpoint at           19313804
      Log minimum file id is       5
      Log maximum file id is       5
      281 log i/o's done, 0.00 log i/o's/second
      ----------------------
      BUFFER POOL AND MEMORY
      ----------------------
      Total large memory allocated 0
      Dictionary memory allocated 520939
      Buffer pool size   8192
      Free buffers       7186
      Database pages     1006
      Old database pages 351
      Modified db pages  0
      Pending reads      0
      Pending writes: LRU 0, flush list 0, single page 0
      Pages made young 160, not young 1542
      0.00 youngs/s, 0.00 non-youngs/s
      Pages read 846, created 164, written 281
      0.00 reads/s, 0.00 creates/s, 0.00 writes/s
      No buffer pool page gets since the last printout
      Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
      LRU len: 1006, unzip_LRU len: 0
      I/O sum[0]:cur[0], unzip sum[0]:cur[0]
      --------------
      ROW OPERATIONS
      --------------
      0 queries inside InnoDB, 0 queries in queue
      0 read views open inside InnoDB
      Process ID=2316, Main thread ID=140646891386432 , state=sleeping
      Number of rows inserted 0, updated 0, deleted 0, read 0
      0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
      Number of system rows inserted 442, updated 340, deleted 168, read 5542
      0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
      ----------------------------
      END OF INNODB MONITOR OUTPUT
      ============================
      
      1 row in set (0.01 sec)
    • Cek variabel konfigurasi tertentu:
      SHOW VARIABLES LIKE 'max_connections';
      

      Output :

      mysql> SHOW VARIABLES LIKE 'max_connections';
      +-----------------+-------+
      | Variable_name   | Value |
      +-----------------+-------+
      | max_connections | 151   |
      +-----------------+-------+
      1 row in set (0.02 sec)
      

Backup dan Maintenance MySQL

  1. Backup dan Maintenance MySQL
    mysqldump adalah tool bawaan MySQL yang paling umum digunakan untuk melakukan backup database secara manual.
    • Backup satu database:
      mysqldump -u root -p nama_database > backup_nama_database.sql
      
    • Backup semua database:
      mysqldump -u root -p --all-databases > backup_semua_database.sql
      
    • Backup database beserta user dan privileges (disarankan):

      mysqldump -u root -p --all-databases --routines --triggers --events > full_backup.sql
      
    • Best Practice Maintenance Database
      Agar MySQL tetap stabil dan optimal di server produksi, lakukan maintenance rutin berikut:
      • Lakukan backup harian (otomatis via cron)
      • Simpan backup di server terpisah atau object storage
      • Monitor ukuran database dan log secara berkala
      • Hapus user dan database yang tidak digunakan
      • Jalankan update MySQL dan OS secara berkala
      • Uji restore backup secara berkala (jangan cuma backup saja)  

Best Practice Keamanan MySQL di Server Produksi

  1. Firewall dan Port Database
    Secara default MySQL berjalan di port 3306. Untuk server produksi, pastikan port ini tidak terbuka ke publik.
    • Rekomendasi:
      • Izinkan akses hanya dari IP tertentu (aplikasi/server internal)
      • Tutup port 3306 jika MySQL hanya digunakan lokal
    • Contoh cek port MySQL:
      ss -tulpn | grep 3306
      
      Catatan : Jika menggunakan firewall Buka port, hanya untuk IP tertentu, Hindari membuka 0.0.0.0/0
  2. Pembatasan Akses Root MySQL
    User root MySQL tidak disarankan digunakan oleh aplikasi.

    • Best practice:

      • Gunakan root hanya untuk administrasi
      • Batasi login root hanya dari localhost
      • Buat user terpisah untuk setiap aplikasi
      • Cek akses root:
        SELECT Host FROM mysql.user WHERE User='root';
        
        Jika ada akses selain localhost, sebaiknya dihapus.
  3.  Update dan Patch Berkala
    Keamanan MySQL sangat bergantung pada update rutin.
    dnf update mysql* -y
    dnf update -y
    
    Catatan : Selalu lakukan backup sebelum update besar.
  4. Audit User Database
    User yang tidak terpakai adalah celah keamanan.

    • Audit rutin yang disarankan:

      • Cek daftar user:

        SELECT User, Host FROM mysql.user;
        
    • Hapus user tidak aktif
      Pastikan setiap user hanya memiliki privilege yang dibutuhkan
      • Hindari privilege GRANT ALL tanpa alasan jelas
        SELECT User, Host FROM mysql.user;
        
        Catatan : Hapus user tidak aktif,Pastikan setiap user hanya memiliki privilege yang dibutuhkan,Hindari privilege GRANT ALL tanpa alasan jelas

Penutup

Sebagai penutup, panduan ini membahas instalasi dan konfigurasi MySQL 8.4 LTS di AlmaLinux 9 secara menyeluruh, mulai dari persiapan sistem, penggunaan repository resmi, instalasi server, pengamanan, optimasi performa, hingga backup dan monitoring dasar. Dengan konfigurasi yang tepat, MySQL 8.4 LTS sangat cocok digunakan sebagai database server untuk kebutuhan produksi karena stabil, aman, dan memiliki dukungan jangka panjang. Untuk skalabilitas ke depan, Anda dapat mulai memisahkan server aplikasi dan database, mengoptimalkan query serta resource server, dan menerapkan monitoring performa secara rutin. Ketika aplikasi membutuhkan uptime tinggi atau beban akses semakin besar, penerapan replikasi MySQL atau solusi high availability menjadi langkah yang tepat untuk menjaga ketersediaan dan keandalan sistem database dalam jangka panjang.


Artikel Lain

WhatsApp Kami

Support : +6282138153600

Admin Finance : +6285191239466