Mysql
 sql >> база данни >  >> RDS >> Mysql

Прикрепете към MySQL клиента изцяло чрез FIFO

Проблемът с FIFO е, че когато всеки процес, който въвежда данни, приключи, той сигнализира за процесите, които четат (в този случай mysql ), че това е краят на данните, така че приключва.

Номерът е да се уверите, че има процес, поддържащ FIFO входа жив през цялото време. Можете да направите това, като стартирате sleep 999999999 > fifofile във фонов режим.

Пример:

#!/bin/sh

mkfifo /tmp/sqlpipe

sleep 2147483647 > /tmp/sqlpipe &
PID=$!

mysql -B -uUSER -pPASSWORD < /tmp/sqlpipe &

# all set up, now just push the SQL queries to the pipe, exemple:
echo "INSERT INTO table VALUES (...);" > /tmp/sqlpipe
echo "INSERT INTO table VALUES (...);" > /tmp/sqlpipe
echo "INSERT INTO table VALUES (...);" > /tmp/sqlpipe
cat "mysqldump.sql" > /tmp/sqlpipe
echo "DELETE FROM table WHERE ...;" > /tmp/sqlpipe

# done! terminate pipe
kill -s SIGINT $PID
rm /tmp/sqlpipe

В крайна сметка прекратяваме sleep процес, за да освободите напълно FIFO входа. Той ще сигнализира за mysql че въвеждането е приключило и след това автоматично ще умре.

Има и алтернатива, която не изисква FIFO, но ще ви трябват два скрипта:

run.sh:

#!/bin/sh
./querygenerator.sh | mysql -B -uUSER -pPASSWORD

querygenerator.sh:

#!/bin/sh
echo "INSERT INTO table VALUES (...);"
echo "INSERT INTO table VALUES (...);"
echo "INSERT INTO table VALUES (...);"
cat "mysqldump.sql"
echo "DELETE FROM table WHERE ...;"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Архивирайте MySQL база данни с CodeIgniter

  2. MySQL не се стартира при надграждане на OSX до Yosemite или El Capitan

  3. Копиране/дублиране на SQL ред с blob/текст, как да направите това?

  4. изпълнете *.sql файл с python MySQLdb

  5. Как да разбера дали MySQLnd е активният драйвер?