проблема с load data local infile

RigVan

Постоянный член клуба
проблема с load data local infile

Простите если не по адресу вопрос задаю, но очень уж хочется проблему решить, а на этом форуме мне часто помогали. Проблема c загрузкой данных из *.txt файла в базу MySQL на бесплатном хосте h15.ru (Agava)
Опция "load data infile " на сервере отключена, поэтому решил использовать "load data local infile"

Указываю ключ и подсоединяюсь к базе:
mysql --local-infile=1 -u flopar -p -h database flopar3

Указываю пароль:
************

Пытаюсь загрузить файл (лежит на моем компе на диске D ):
load data local infile "D://1807a.txt" into table kvart;

Получаю ответ:
ERROR:
File 'D:/1807a.txt' not found (Errcode: 2)

Мучаюсь уже целый день. Не пойму в чем причина. Вроде бы уже и слэши и кавычки все перепробовал и в разном количестве и в разные стороны....

Помогите, пожалуйста решить эту проблему.... Мозги уже плавятся, а ни чего не могу придумать :((((
 

tony2001

TeaM PHPClub
т.е. ты выполняешь команду в шелле на удаленном сервере, а файл лежит у тебя локально и ты думаешь, что файл волшебным образом прочтется ?
я правильно понимаю ?
 

RigVan

Постоянный член клуба
"А разве load data LOCAL infile" используется не для этого?
(ну я это... только учусь, так что если можно объясни, что я не так делаю и самое главное как надо, буду весьма признателен)
 

tony2001

TeaM PHPClub
ну ты сам подумай - каким волшебным образом удалённый сервер может прочесть данные в твоём локальном файле?
конечно, нет.

делается элементарно:
1) грузишь данные в свой локальный MySQL
2) делаешь дамп таблицы (mysqldump)
3) аплоадишь дамп на сервер
4) после чего на сервере делаешь mysql -u flopar -p -h database flopar3 < /path/to/uploaded/dump.file
всё.

сообщай на каком этапе у тебя возникли проблемы.
 

Апельсин

Оранжевое создание
Автор оригинала: tony2001
т.е. ты выполняешь команду в шелле на удаленном сервере, а файл лежит у тебя локально и ты думаешь, что файл волшебным образом прочтется ?
я правильно понимаю ?
Тони, не гони и почитай документацию лучше:

If the LOCAL keyword is specified, it is interpreted with respect to the client end of the connection:

- If LOCAL is specified, the file is read by the client program on the client host and sent to the server. The file can be given as a full pathname to specify its exact location. If given as a relative pathname, the name is interpreted relative to the directory in which the client program was started.

- If LOCAL is not specified, the file must be located on the server host and is read directly by the server.
Если он сначала лезет ssh-ем, а потом коннектится локально к MySQL серверу, тогда конечно у него ничего работать не будет.
А если сразу удаленно соединяться с MySQL, то работать должно.
 

RigVan

Постоянный член клуба
Автор оригинала: Апельсин
Тони, не гони и почитай документацию лучше:


Если он сначала лезет ssh-ем, а потом коннектится локально к MySQL серверу, тогда конечно у него ничего работать не будет.
А если сразу удаленно соединяться с MySQL, то работать должно.
я использую "putty". Порядок моих действий таков:
1) запуск "putty"
2) конект по ssh2 к серверу
3) ввод login, pass...
4) и дальше проделываю, те действия которые я описал выше
т.е подключение к своей базе MySQL (с указанием ключа "--local-infile=1" включающего опцию "load data LOCAL infile) и собственно выполнение самой опции load data LOCAL infile....
Но сервер не находит файл который я хотел передвть....

А как надо, в каком порядке?
 

Profic

just Profic (PHP5 BetaTeam)
Апельсинка
Ага, прямо так агава дала коннектиться к своей муське любому встречному-поперечному :)
 

Апельсин

Оранжевое создание
Profic, ну мало ли :)

RigVan, ну тогда смотри что тебе tony2001 сказал.
Потому что к MySQL серверу ты коннектишься не удаленно, а локально и он знать не знает откуда ты ssh-ем зашел.

собственно ты можешь загрузить этот-же файл на сервер и попробовать использовать LOAD DATA LOCAL, но указать путь к файлу уже на машине где MySQL сервер находится. Естесственно для этого должен работать LOAD DATA LOCAL.
 

RigVan

Постоянный член клуба
уже пробовал закачивать файл в директорию, куда установлены скрипты, страницы. Может еще куда засунуть его? (только не надо непристойных предложений :)...)
путь указывал и относительный и прямой. Все без толку...

На письмо в Agava, мне отвечать не хотят....

То, что сказал tony2001, я обязательно попробую, но вот ведь засада у меня не получается выполнить "mysqldump"!!! Не работает даже "mysqldump --help" :) Мануал уже наизусть перечитал, ссылок кучу просмотрел. Пришел к выводу, что очевидно я как то не так MySQL установил. Буду переустанавливать заново сейчас...

Если и это не поможет, придется наверное скрипт на PHP писать, используя функцию INSERT....

Вобщем тема НЕ закрыта, если кто подскажет в чем я "косячу",
буду очень благодарен....
 

vovanium

Новичок
RigVan
Если и это не поможет, придется наверное скрипт на PHP писать, используя функцию INSERT
А зачем? Всё уже написано до нас :)

Юзай дампер (для базы любого размера)
либо phpMyAdmin (если у тебя база в пределах нескольких метров)
 

Апельсин

Оранжевое создание
> путь указывал и относительный и прямой. Все без толку...

проверь права на файл.

> но вот ведь засада у меня не получается выполнить "mysqldump"

что значит не получается? телепатов тут нет и никто не знает что ты делал и что в результате получил.
 

DiTHER

bang bang
> А зачем? Всё уже написано до нас
чтобы симитировать select into outfile нужно сделать файл вида "abc";"abc";"abc" (а-ля fields enclosed by '"' separated by ';' lines separated by '\n')
уж велико сложный скрипт наверно? =)

потом тащим файлик на сервак - и обычным способом load data infile...

[the offtopiest offtop from all existent offtops]
tips:
*по скорости (descending)
1. select into outfile...; load data infile..;
2. mysqldump -e...; mysql .. < /path/to/file.sql
3. mysqldump...; mysql .. < /path/to/file.sql

смею заметить что первый способ в несколько десятков рас быстрее последнего при совсем слабой машине (цел2000, 180мб база, 1 час против 3 минут)
[/offtop]
 

vovanium

Новичок
DiTHER
select into outfile...; load data infile..;
Да, вариант быстрый, но есть недостатки:
- для каждой таблицы нужно создавать отдельный файл + еще файл со структурами таблиц;
- проблемы со сжатием, придется сначала создать все файлы, потом сжимать их, а перед загрузкой в базу нужно сначала всё распаковать, чтобы скормить его мускулю.

ИМХО, наиболее удобен дамп типа mysqldump, сделанный с использованием Extended Inserts. Для этой цели отлично подходит SKDumper:
- в отличии от других скриптов не пихает весь дамп в пямять, поэтому ему всё равно какой размер бекапа.
- использует Extended Inserts, что обеспечивает высокую скорость работы. Причем разбивает большие запросы на части если необходимо (из-за ограничения на размер запроса в настройках MySQL)
- налету работает со сжатыми дампами (Gzip и Bzip2)
- отображает прогресс бекапа и восстановления
- ну и кроме того имеет небольшой размер и удобный интерфейс.
 
Сверху