Cara Aman Mengatur Folder ‘/var/lib/mysql-files/’ agar Bisa Diakses MySQL dan Web Server

Cara Aman Mengatur Folder ‘/var/lib/mysql-files/’ agar Bisa Diakses MySQL dan Web Server

Saat bekerja dengan MySQL, khususnya fitur seperti LOAD DATA INFILE atau SELECT INTO OUTFILE, Anda mungkin menemui error:

the upload destination folder does not appear to be writable

Jika folder yang dimaksud adalah:

/var/lib/mysql-files/

maka masalah ini biasanya terkait permission (izin) dan kepemilikan folder, karena folder ini bersifat internal MySQL dan secara default sangat dibatasi demi keamanan.

Artikel ini akan menjelaskan secara lengkap cara mengatur folder ini agar MySQL bisa menulis file dan web server (PHP/Apache/Nginx) bisa menaruh file di sana.


1. Apa Itu Folder /var/lib/mysql-files/?

  • Folder ini digunakan oleh MySQL untuk menyimpan file sementara ketika menggunakan fitur:
    • LOAD DATA INFILE 'file_path' → membaca file ke dalam tabel MySQL
    • SELECT ... INTO OUTFILE 'file_path' → menulis hasil query ke file
  • Secara default, folder ini hanya bisa diakses oleh user MySQL (mysql) dan biasanya permission-nya 700:
drwx------ 2 mysql mysql 4096 Jan 10 10:00 /var/lib/mysql-files
  • Permission ini menjamin keamanan karena mencegah user atau aplikasi lain menulis file sembarangan di folder MySQL.

2. Mengapa Error “Folder Not Writable” Muncul?

Error ini muncul ketika:

  1. User yang mencoba menulis bukan user MySQL.
  2. Folder /var/lib/mysql-files/ tidak memiliki permission yang memadai.
  3. Folder tidak dimiliki oleh group atau user yang relevan dengan aplikasi.

3. Solusi Aman: mysql:www-data

Jika Anda ingin aplikasi web (misal PHP yang dijalankan oleh www-data) bisa menaruh file supaya MySQL bisa membacanya, langkah yang aman adalah:

  1. Ubah kepemilikan folder menjadi:
    • Owner: mysql → MySQL tetap bisa mengelola folder
    • Group: www-data → Web server bisa menulis ke folder

Perintah:

sudo chown mysql:www-data /var/lib/mysql-files/
  1. Ubah permission folder sehingga group juga bisa menulis:
sudo chmod 770 /var/lib/mysql-files/

Hasilnya akan terlihat seperti ini:

drwxrwx--- 2 mysql www-data 4096 Jan 10 10:00 /var/lib/mysql-files/

Penjelasan Permission:

EntitasPermission
Owner (mysql)baca, tulis, eksekusi ✅
Group (www-data)baca, tulis, eksekusi ✅
Lainnyatidak bisa ✖

Dengan setup ini, MySQL dan web server bisa menulis file, sementara user lain tidak memiliki akses.


4. Contoh Penggunaan MySQL dengan Folder Ini

a. Menulis File dari Query MySQL

SELECT * FROM your_table
INTO OUTFILE '/var/lib/mysql-files/output.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
  • File akan dibuat oleh MySQL sendiri, sehingga tidak ada masalah permission.
  • Pastikan folder /var/lib/mysql-files/ sudah memiliki owner mysql dan permission cukup.

b. Menggunakan LOAD DATA INFILE dari Web Server

Jika aplikasi web menaruh file CSV yang ingin di-import MySQL:

  1. Upload file ke /var/lib/mysql-files/ (web server memiliki akses via group www-data).
  2. Jalankan query:
LOAD DATA INFILE '/var/lib/mysql-files/your_upload.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
  • File akan dibaca MySQL tanpa error izin.

5. Catatan Keamanan

  • Jangan gunakan chmod 777 pada folder ini → membahayakan server karena semua user bisa menulis file.
  • Selalu batasi akses hanya pada:
    • Owner: mysql
    • Group: www-data (atau user web server yang sah)
  • Folder ini tidak boleh diakses publik, karena bisa dimanfaatkan untuk menyisipkan file berbahaya.

6. Ringkasan Langkah Aman

LangkahPerintah
Ubah owner foldersudo chown mysql:www-data /var/lib/mysql-files/
Ubah permission foldersudo chmod 770 /var/lib/mysql-files/
Cek hasills -ld /var/lib/mysql-files/
  • Pastikan aplikasi web termasuk dalam group www-data.
  • File yang dibuat MySQL dapat dibaca/tulis oleh web server sesuai kebutuhan.

Kesimpulan:
Mengatur folder /var/lib/mysql-files/ dengan owner mysql dan group www-data plus permission 770 adalah cara paling aman dan efektif agar:

  1. MySQL tetap bisa menggunakan folder untuk LOAD DATA INFILE atau SELECT INTO OUTFILE.
  2. Web server bisa menaruh file untuk diproses MySQL.
  3. Keamanan server tetap terjaga.