Проблема с загрузкой файлов в СУБД MySQL 5.1

Модератор: Модераторы

Ответить
vadv55
новенький
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение vadv55 »

При попытке загрузки текстового файла в СУБД MySQL 5.1 на ОС ALT Linux 6.0 Centaurus с помощью запроса LOAD DATA LOCAL INFILE вначале выдавалось следующее сообщение:
The used command is not allowed with this MySQL version
После добавления в раздел [client] конфигурационного файла my.cnf строки local-infile=1 данное сообщение пропало, а файл стал загружаться, но только для пользователя root - для обычного пользователя всё оставалось по-прежнему.
После добавления в раздел [mysql] конфигурационного файла пользователя .my.cnf этой же строки эффект возобновился - загрузка стала производиться нормально, но когда указанный запрос был использован для формы в приложении IDE Lazarus, описанная ситуация с этим запросом опять повторилась для оператора SQLQuery1.ExecSQL, в то время как аналогичный запрос INSERT INTO работает без нареканий. В чём причина такого странного поведения запроса в указанной IDE, пока не удалось выяснить. Буду благодарен за любой совет по данной проблеме.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение Ism »

Насколько я знаю, чтоб так грузить файл нужно выполнить ряд требований. Например загрузка из файла может быть только на машине, где mysql
Также если не хватает прав может такое быть
Права проверить на файл и у самого аккаунта mysql
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение SSerge »

vadv55 писал(а):о когда указанный запрос был использован для формы в приложении IDE Lazarus, описанная ситуация с этим запросом опять повторилась для оператора SQLQuery1.ExecSQL, в то время как аналогичный запрос INSERT INTO работает без нареканий. В чём причина такого странного поведения запроса в указанной IDE


Что значит "аналогичный запрос"? Оператор INSERT вообще то не подразумевает вставки чего-то из файла. Оба запроса в студию что ли, чтобы можно было что-то сравнивать.

Обратите внимание на то, как именно вы задаете имя этого самого файла. Также, стоит проверить через FileExists его существование перед загрузкой. Ну и не полагаться на то, что файл будет взят, скажем, из того каталога, в котором располагается ваша откомпилированная программа. Лазарус, ЕМНИП, каталогом запуска ставит корневой каталог проекта.
Аватара пользователя
Vapaamies
постоялец
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург
Контактная информация:

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение Vapaamies »

vadv55 писал(а):В чём причина такого странного поведения запроса в указанной IDE, пока не удалось выяснить.

Есть уверенность, что используется то же самое клиентское ПО, что и из командной строки, а не его другая копия и/или версия другой разрядности? Настройки правильные?
vadv55
новенький
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение vadv55 »

1. Запрос по команде LOAD DATA LOCAL INFILE:

Код: Выделить всё

const
  tc: Char='''';
  tv: Char='+';
  imk: String='/pub/htmlx.txt';
      ...
  lz:=False;
  SQLQuery1.SQL.Clear;
   SQLQuery1.SQL.Add('LOAD DATA LOCAL INFILE '+tc+imk+tc+' INTO TABLE tstr ');
   SQLQuery1.SQL.Add('FIELDS TERMINATED BY '+tc+tv+tc+' LINES ');
   SQLQuery1.SQL.Add('TERMINATED BY '+tc+tv+tc+' (ind1,ind2,sods);');
   try
    SQLQuery1.ExecSQL;
   except
    ShowMessage('SQLI!');
    lz:=True
   end;
   if lz then goto z;
       ...

2. Запрос по команде INSERT INTO:

Код: Выделить всё

   lz:=False;
   SQLQuery1.SQL.Clear;
   SQLQuery1.SQL.Add('SET NAMES utf8');
   try
    SQLQuery1.ExecSQL;
   except
    ShowMessage('SQLN!');
    lz:=True
   end;
   if lz then goto z;
   SQLQuery1.SQL.Clear;
   SQLQuery1.SQL.Add('SET CHARACTER SET utf8');
   try
    SQLQuery1.ExecSQL;
   except
    ShowMessage('SQLC!');
    lz:=True
   end;
   if lz then goto z;
   SQLQuery1.SQL.Clear;
   SQLQuery1.SQL.Add('INSERT INTO tstr (ind1,ind2,sods) VALUES');
   SQLQuery1.SQL.Add('(:pind1,:pind2,:psods);');
   SQLQuery1.Params.ParamByName('pind1').Value:=Edit1.Text;
   SQLQuery1.Params.ParamByName('pind2').Value:=Edit2.Text;
   SQLQuery1.Params.CreateParam(ftMemo,'psods',ptInput);
   SQLQuery1.Params.ParamByName('psods').LoadFromFile(imk1,ftMemo);
   try
    SQLQuery1.ExecSQL;
   except
    ShowMessage('SQLI!');
    lz:=True
   end;
   if lz then goto z;
     ...

При этом первый запрос загружает в таблицу tstr содержащий три поля (ind1, ind2, sods) файл из консоли в программе mysql нормально, аварийное сообщение при запуске этого же запроса в указанном коде выдаётся в IDE Lazarus, но где там необходимо настраивать данный запуск - мне неизвестно. Функционально аналогичный ему второй запрос, в котором загрузка каждого поля производится из разных источников, работает безукоризненно.
Аватара пользователя
Vapaamies
постоялец
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург
Контактная информация:

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение Vapaamies »

А с настройками клиента и сервера что?
vadv55
новенький
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение vadv55 »

1. /var/lib/mysql/my.cnf

Код: Выделить всё

[mysqld]
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
# FIXME! bdb maybe work on x86/Linux and amd64/Linux
#skip-bdb
chroot=/var/lib/mysql
datadir=/db
#bdb-logdir=/log
#log=/log/queries
pid-file=/mysqld.pid
skip-locking
#skip-networking
port=3306
socket=/mysql.sock
tmpdir=/tmp
default-character-set=utf8
local-infile=1
character_set_filesystem=utf8
user=mysql
[client]
local-infile=1
default-character-set=utf8

2. /home/user/.my.cnf

Код: Выделить всё

[mysql]
local-infile=1
default-character-set=utf8
Аватара пользователя
Vapaamies
постоялец
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург
Контактная информация:

Re: Проблема с загрузкой файлов в СУБД MySQL 5.1

Сообщение Vapaamies »

Странно. Могу посоветовать лишь поискать другую версию/сборку клиентских библиотек MySQL, в них время от времени случаются странные глюки. Даже тут на форуме что-то было.
Ответить