Вставлять данные в данные таблицы mysql из канала FIFO в Linux непрерывно

Я хочу вставить данные из fifo pipe в таблицу mysql, прямо сейчас для меня это возможно, пока процесс fifo pipe не будет убит,

команда :

$>mkfifo /path/to/pipe
$>sudo chmod 666 /path/to/pipe
$>find \ -sl > /path/to/pipe & msql db1 -e"LOAD DATA INFILE '/path/to/pipe' INTO TABLE T1 " &

данные в канале fifo вставляются до тех пор, пока процесс mysql не будет отключен процессом kill.

Возможно ли вставить данные без уничтожения процесса данных канала fifo?

Спасибо!!


person guifarro    schedule 20.01.2011    source источник
comment
Вы хотите, чтобы команда mysql продолжала работать даже после завершения команды find?   -  person nos    schedule 21.01.2011
comment
может быть, вы можете попробовать sleep() в mysql   -  person ajreal    schedule 21.01.2011
comment
Нет, я имею в виду одновременную запись данных, которые передаются из канала fifo в mysql, я искал решение, я нашел mysql: slurp, я пытаюсь с этим.   -  person guifarro    schedule 21.01.2011
comment
аджреал, спать()? как это может мне помочь?   -  person guifarro    schedule 21.01.2011
comment
Вы пытаетесь сделать что-то вроде: $ mkfifo /path/to/pipe $ sudo chmod 666 /path/to/pipe $ tail -f /path/to/pipe | msql db1 & find \ -sl › /path/to/pipe & ?   -  person Julien Palard    schedule 20.03.2011


Ответы (2)


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

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

Оболочка 1: вывод

$ mkfifo mypipe # create a named pipe
$ chmod 666 mypipe # Give all users read-write access to the pipe
$ tail -f mypipe | mysql -umyName -p mySchema # pipe mypipe into mysql

Последняя строка выше сообщает именованному каналу, что он должен постоянно передавать данные в процесс mysql. Всякий раз, когда вы выводите что-то в mypipe, это будет отправлено процессу mysql в качестве стандартного ввода.

После этого вы не получите нового приглашения, потому что ваша команда tail будет выполняться до тех пор, пока вы не завершите ее процесс.

Держите эту оболочку открытой и ее процесс tail работающим, пока вы используете другой процесс оболочки (Shell 2: ввод) для отправки команд в mysql.

Оболочка 2: ввод

$ echo 'show tables;' > mypipe # this will print output onto your *other* shell (Shell 1: output)
$ echo 'insert into mytable (1,2,3);' > mypipe # this performs an insertion
person JellicleCat    schedule 13.05.2015

Сообщает ли системный журнал mysql какие-либо ошибки? Я бы посмотрел на http://www.mysqlperformanceblog.com/2008/07/03/how-to-load-large-files-safely-into-innodb-with-load-data-infile/

person asterisk    schedule 01.02.2011