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

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

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

Сообщение vadv55 » 19.11.2014 21:19:12

При попытке загрузки текстового файла в СУБД 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, пока не удалось выяснить. Буду благодарен за любой совет по данной проблеме.
vadv55
новенький
 
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

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

Сообщение Ism » 20.11.2014 01:11:46

Насколько я знаю, чтоб так грузить файл нужно выполнить ряд требований. Например загрузка из файла может быть только на машине, где mysql
Также если не хватает прав может такое быть
Права проверить на файл и у самого аккаунта mysql
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

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

Сообщение SSerge » 20.11.2014 07:13:06

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


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

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

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

Сообщение Vapaamies » 20.11.2014 14:27:18

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

Есть уверенность, что используется то же самое клиентское ПО, что и из командной строки, а не его другая копия и/или версия другой разрядности? Настройки правильные?
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 291
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

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

Сообщение vadv55 » 20.11.2014 18:45:24

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, но где там необходимо настраивать данный запуск - мне неизвестно. Функционально аналогичный ему второй запрос, в котором загрузка каждого поля производится из разных источников, работает безукоризненно.
vadv55
новенький
 
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

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

Сообщение Vapaamies » 20.11.2014 20:45:39

А с настройками клиента и сервера что?
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 291
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

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

Сообщение vadv55 » 21.11.2014 14:55:25

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
vadv55
новенький
 
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

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

Сообщение Vapaamies » 21.11.2014 19:02:37

Странно. Могу посоветовать лишь поискать другую версию/сборку клиентских библиотек MySQL, в них время от времени случаются странные глюки. Даже тут на форуме что-то было.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 291
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru