Начиная с версии MySQL 3.23.49, LOAD DATA LOCAL по умолчанию запрещено по соображениям безопасности, и его надо специально включать.
MySQL-сервер у нас работает с включенным LOAD DATA LOCAL, но необходимо включение данной функциональности со стороны клиента.
Для утилиты mysql есть несколько вариантов включения данной опции:
Параметр —local-infile=1
Создать в домашней директории файл .my.cnfи в нем разрешить эту опцию для группы [mysql], которой пользуется данная утилита:
[mysql]
local-infile=1
Включение данного режима из perl’а: необходимо в dsn при подключении указать файл конфигурации mysql (т.к. библиотека libmysql по умолчанию никаких дополнительных файлов конфигурации не читает) и группу в нем, в файле создать эту группу, и для этой группы выставить local-infile=1:
Например, вписываем в ~/.my.cnf
[perl]
local-infile=1
а в скрипте подключение оформляем так:
my $dsn = "DBI:mysql:database:hostname;mysql_read_default_group=perl;". "mysql_read_default_file=~/.my.cnf";
my $dbh = DBI->connect($dsn, "username", "password") ||die "[err]: Can't connect to MySQL: $!";
Включение данного режима из PHP: у вас обязательно должен быть установлен свой собственный, скомпилированный интерпретатор PHP.
В функции mysql_connect() необходимо использовать аргумент 128 (значение константы CLIENT_LOCAL_FILES) в качестве пятого параметра.
Пример:
$dbh = mysql_connect($server, $user, $pass, false, 128);