Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INTO OUTFILE и блокировка файла / 21 сообщений из 21, страница 1 из 1
25.06.2015, 00:08:35
    #38992119
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
Пример запроса:
SELECT * INTO OUTFILE '/files/big_data.txt' FROM `big_table`;

Есть процесс, который читает файлы из папки files и перекидывает их на другой сервер.
Вероятна ошибка, при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу.

Как можно исправить эту ошибку?
...
Рейтинг: 0 / 0
25.06.2015, 01:47:23
    #38992156
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
ArtemeeyКак можно исправить эту ошибку?Имхо, только дополнительной сигнализацией. Например, созданием флагового файла после окончания основного процесса. Копирующий процесс не должен начинать свою работу без наличия флагового файла. Причем оба процесса первым же действием должны удалять этот файл.
...
Рейтинг: 0 / 0
25.06.2015, 08:48:54
    #38992231
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
ArtemeeyЕсть процесс, который читает файлы из папки files и перекидывает их на другой сервер.
Вероятна ошибка, при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу.

Как можно исправить эту ошибку?
Исправьте ошибку, "при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу".
...
Рейтинг: 0 / 0
25.06.2015, 09:00:37
    #38992241
login_sqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
Artemeey,

если процесс в линухе, попробуй такой вариант:
if [ "`/usr/sbin/lsof ${output_file}`" ];
then
scp ${output_file} ${v_jerdin_bir_jerovo}
fi

естественно, по времени надо отрегулировать. или условие в while поставить, и файл скопируется как только файл будет закрыт.
...
Рейтинг: 0 / 0
25.06.2015, 11:35:41
    #38992406
login_sqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
login_sqlruArtemeey,

если процесс в линухе, попробуй такой вариант:
if [ "`/usr/sbin/lsof ${output_file}`" ];
then
scp ${output_file} ${v_jerdin_bir_jerovo}
fi

естественно, по времени надо отрегулировать. или условие в while поставить, и файл скопируется как только файл будет закрыт.
упс, там ключ -z должен быть, а то сработает наоборот.
if [ -z "`/usr/sbin/lsof ${output_file}`" ];
...
Рейтинг: 0 / 0
25.06.2015, 12:48:50
    #38992493
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
login_sqlruкак только файл будет закрыт.А есть гарантия, что файл не закрывается на середине выгрузки?
...
Рейтинг: 0 / 0
25.06.2015, 13:16:13
    #38992556
login_sqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
miksoftlogin_sqlruкак только файл будет закрыт.А есть гарантия, что файл не закрывается на середине выгрузки?
программер из меня никакой, и на исходный код mysql я не заглядывал, но обычно файл закрывает после записи данных.
...
Рейтинг: 0 / 0
25.06.2015, 17:13:05
    #38992961
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
miksoftlogin_sqlruкак только файл будет закрыт.А есть гарантия, что файл не закрывается на середине выгрузки?

Конечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его.
...
Рейтинг: 0 / 0
25.06.2015, 17:15:56
    #38992962
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
Artemeeymiksoftпропущено...
А есть гарантия, что файл не закрывается на середине выгрузки?

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

Проверяя не процессы, а EOF.
...
Рейтинг: 0 / 0
25.06.2015, 17:24:47
    #38992972
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
Artemeeymiksoftпропущено...
А есть гарантия, что файл не закрывается на середине выгрузки?

Конечно в любой момент MySql может упасть.Почему обязательно "упасть" ? Может там запись устроена так, что закрывает/открывает файл после каждой строки. Не представляю зачем так делать, но и гарантии обратного нет. По крайней мере, пока в исходники не посмотрите.

Artemeey(MySql не завершил свою операцию в течение часа)А у вас есть этот час на ожидание?
...
Рейтинг: 0 / 0
25.06.2015, 17:24:59
    #38992973
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
ArtemeeyПроверяя не процессы, а EOF.Это как?
...
Рейтинг: 0 / 0
25.06.2015, 17:28:38
    #38992978
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
Я остановился на варианте с флагом в имени файла.

Код: php
1.
2.
3.
4.
$name= date('H_i_s').'.txt';
$filename_temp = $folder.'/_'.$filename;
$filename = $folder.'/'.$filename;
unset($name);



Код: sql
1.
SELECT ... INTO OUTFILE ... '$filename_dump_temp' ...



Код: php
1.
rename($filename_temp, $filename);



При чтении папки пропускаю имена файлов, которые начинаются на "_".
...
Рейтинг: 0 / 0
25.06.2015, 17:30:21
    #38992981
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
miksoft,

https://ru.wikipedia.org/wiki/EOF

Полагаю, что если процесс не завершился, либо завершился с ошибкой, файл не будет иметь этого символа. Однако из-за сложности поиска и неуверенности, как именно MySql добавляет этот символ, этот вариант я отбросил.
...
Рейтинг: 0 / 0
25.06.2015, 17:30:42
    #38992982
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
ArtemeeyЯ остановился на варианте с флагом в имени файла.Тоже вариант.

Вот только если вы можете вызвать rename в нужный момент, почему бы там не сделать сразу копирование куда нужно?
...
Рейтинг: 0 / 0
25.06.2015, 17:32:54
    #38992983
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
Artemeeymiksoft,

https://ru.wikipedia.org/wiki/EOF

Полагаю, что если процесс не завершился, либо завершился с ошибкой, файл не будет иметь этого символа. Однако из-за сложности поиска и неуверенности, как именно MySql добавляет этот символ, этот вариант я отбросил.Сильно сомневаюсь, что он вообще его добавляет.
На практике употребления этого символа я не видел со времен DOS-а.
...
Рейтинг: 0 / 0
25.06.2015, 20:03:36
    #38993082
login_sqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
miksoftArtemeeyпропущено...


Конечно в любой момент MySql может упасть.Почему обязательно "упасть" ? Может там запись устроена так, что закрывает/открывает файл после каждой строки. Не представляю зачем так делать, но и гарантии обратного нет. По крайней мере, пока в исходники не посмотрите.

Исходники смотреть не стал, но на рабочем сервере проверил (уговор дороже денег):
файл не закрывает. таблица не очень большая около ~3Гб.
и я не знаю таких хитрых приемов, чтоб файл закрывать во время записи данных. как минимум это не логично.
...
Рейтинг: 0 / 0
25.06.2015, 20:30:27
    #38993098
login_sqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
ArtemeeyКонечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его.

Не легче ли узнать упал mysql или нет, чем "по дате создания файла можно смотреть, какой не был закрыт должны образом"

и можно ваш скрипт полностью, честно не понял что там делает $name или же $filename_temp.
разбираться в чужом коде не мой конек, ибо очень мало опыта.
...
Рейтинг: 0 / 0
25.07.2015, 16:25:15
    #39015987
Artemeey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
login_sqlruArtemeeyКонечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его.

Не легче ли узнать упал mysql или нет, чем "по дате создания файла можно смотреть, какой не был закрыт должны образом"

и можно ваш скрипт полностью, честно не понял что там делает $name или же $filename_temp.
разбираться в чужом коде не мой конек, ибо очень мало опыта.

Файл пишется в "_file.txt";
Затем переименовывается в "file.txt"
Раз в час (к примеру) файлы созданные более чем час назад и начинаются с подчеркивания удаляются (считаются не корректными в следствие остановки процесса экспорта по какой-то причине)
...
Рейтинг: 0 / 0
25.07.2015, 22:06:25
    #39016043
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
ArtemeeyПример запроса:
SELECT * INTO OUTFILE '/files/big_data.txt' FROM `big_table`;

Есть процесс, который читает файлы из папки files и перекидывает их на другой сервер.
Вероятна ошибка, при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу.

Как можно исправить эту ошибку?

в процессе открывать файл эксклюзивно.

Или писать в один файл, а читать другой, после окончания записи переименовывать.
...
Рейтинг: 0 / 0
27.07.2015, 20:25:42
    #39017123
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
я бы предложил решать задучу, не как довести до ума изначальную идею ТС, а как решить проблему...

для начала надо её оссознать.

итак, есть процес (не ТС процесс, а пускай будет - есть некое действие) - а именно селект инту файл - и это действие лепит в файл данные, и понятное дело что другие не должны этот файл трогать до окончания данного действия.

ну в базе мускла можно вешать локи, и если некий процес хочет начать выгрузку в файл с именем ххх, он вешает в мускле лок с именем lock_file_xxx
начинает выгрузку, после завершения снимает локк.

другой процес, перед троганьем любого файла из папки файлс, сначала вешает лок с улсовием если его нету, и если у него получилось повесить лок, то забирает от туда файл, лок снимает.

а то что вы..ну решите задачу, как не мешать процесу два делать первому выгрузку в файл... а дальше ведь не загорами следующая проблема...а как сделать так чтоб селект инту не портил файл который другой процес начал копировать, или только хочет.

сдесь два независимых процесса, имеют общий ресурс - доступ к нему нужен - ответ очевиден, что-то, что ведёт себя как симафор.
...
Рейтинг: 0 / 0
27.07.2015, 21:17:22
    #39017150
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INTO OUTFILE и блокировка файла
хотя вариант с переименованием тоже годиться! ибо тогда мы разделяем ресурсы - получаем цепочку действий, первая стадия, вторая. ток предварительно удостовериться что переименуя, мы не затрём другой...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INTO OUTFILE и блокировка файла / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]