Функция LOAD_FILE () не будет читать каталоги. Он читает только обычные файлы.
Вот ссылка на указанную строку кода c, которая проверяет, является ли файл, который вы пытались открыть, обычным файлом, и, если это не так, возвращает ошибку. https://github.com/mysql/mysql-server/blob/8.0/sql/item_strfunc.cc#L3498
if (!MY_S_ISREG(stat_info.st_mode)) {
my_error(ER_TEXTFILE_NOT_READABLE, MYF(0), file_name->c_ptr());
mysql_file_close(file, MYF(0));
DBUG_ASSERT(maybe_null);
return error_str();
}
Мы также можем продемонстрировать. Я создал файл "/ tmp / world" и поместил в него слово "hello".
Я могу прочитать файл:
MySQL localhost:33060+ ssl SQL > select load_file('/tmp/world');
+-------------------------+
| load_file('/tmp/world') |
+-------------------------+
| hello
|
+-------------------------+
1 row in set (0.0007 sec)
Но я не могу прочитать каталог:
MySQL localhost:33060+ ssl SQL > select load_file('/tmp');
ERROR: 1085: The file '/tmp' must be in the database directory or be readable by all
Эта ошибка не ясна относительно реальной причины, по которой он не может прочитать файл. Он просто возвращает общую ошибку, соответствующую кодовой константе ER_TEXTFILE_NOT_READABLE
.