Постоянно вставляйте данные в таблицу MySQL из канала FIFO в Linux
Я хочу вставить данные из канала fifo в таблицу 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 в?
Спасибо!!
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
Системный журнал mysql сообщает об ошибках? Я хотел бы посмотреть на http://www.mysqlperformanceblog.com/2008/07/03/how-to-load-large-files-safely-into-innodb-with-load-data-infile/