“MySQL sunucusu -secure-file-priv ile çalışıyor” Hatasını Çözme

mysqld sunucusunu başlatırken, seçenekler dosyasında veya komut satırında program seçeneklerini belirtebilirsiniz. Bu seçenekler diğer MySQL özelliklerinin kilidini açmak, değişkenleri değiştirmek veya kısıtlamalar getirmek içindir.

MySQL sunucusunda seçenekler bu şekilde okunur:

kullanarak MySQL tarafından desteklenen seçeneklerin kısa bir özetini görebilirsiniz:

$ mysqld --help

Tam listeyi görmek için şu komutu kullanın:

$ mysqld --verbose --help

Sunucu başlangıcında ayarlanabilen bu sistem değişkenlerinden biri mysqld_secure-file-priv’dir

mysqld_secure-file-priv değişkeni nedir?

Veri alma ve verme işlemlerinin etkisini sınırlamak içinecure_file_priv değişkeni kullanılır. Etkilenen işlemlere örnek olarak LOAD DATA veSELECT … INTO OUTFILE deyimleri veLOAD_FILE() işlevi tarafından gerçekleştirilen işlemler verilebilir. Bu işlemlere yalnızca FILE ayrıcalığına sahip kullanıcılar izin verir.

Çalışma zamanında geçerli ayarı görmek için SHOW VARIABLES deyimini kullanın.

MySQL kabuğuna root kullanıcısı olarak giriş yapın

$ mysql -u root -p

Sonra aşağıdaki komutu çalıştırın

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set
Time: 0.023s

Dizin kümesinin şu şekilde olduğunu görebilirsiniz

secure-file-priv değişken dizininin değiştirilmesi

Bu değer MySQL seçenekler dosyasında [mysqld] bölümü altında değiştirilebilir.

sudo vim /etc/my.cnf

Değişkeni [mysqld] bölümü altında ayarlayın

[mysqld]
secure-file-priv=/mysqlfiles

Ardından yapılandırılmış dizini oluşturun

sudo mkdir /mysqlfiles
sudo chown -R mysql:mysql  /mysqlfiles/

Değişikliklerin etkili olması için MySQL hizmetini yeniden başlatın

sudo systemctl restart mysqld

Yeni ayarı onaylamak için tekrar giriş yapın

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+--------------+
| Variable_name    | Value        |
+------------------+--------------+
| secure_file_priv | /mysqlfiles/ |
+------------------+--------------+
1 row in set (0.00 sec)

Belirtilen yola dışa aktarabileceğimizi doğrulamak için test edelim.

mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

Doğru yola yazmayı tekrar deneyelim.

mysql> SELECT * FROM information_schema.processlist into outfile '/mysqlfiles/mysql_processes.txt';
Query OK, 1 row affected (0.00 sec)

secure-file-priv değişkenini devre dışı bırakma

Devre dışı bırakmak için değişkeni NULL değerine ayarlayın.

[mysqld]
secure-file-priv = ""

mysqld hizmetini yeniden başlat

sudo systemctl restart mysqld

Hizmeti yeniden başlattıktan sonra onaylayın

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)

SORGU içeriğini farklı bir yola kaydetmeyi deneyin

mysql> SELECT * FROM information_schema.processlist into outfile '/tmp/mysql_processes.txt';
Query OK, 1 row affected (0.00 sec)

Yazının orijinalini buradan okuyabilirsiniz.