Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dołącz do klienta MySQL całkowicie przez FIFO

Problem z FIFO polega na tym, że kiedy każdy proces, który wprowadza dane, kończy działanie, sygnalizuje to procesy, które czytają (w tym przypadku mysql ), że to koniec danych, więc się kończy.

Sztuczka polega na upewnieniu się, że istnieje proces, który utrzymuje przy życiu wejście FIFO przez cały czas. Możesz to zrobić, uruchamiając plik sleep 999999999 > fifofile w tle.

Przykład:

#!/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

W końcu kończymy sleep proces, aby całkowicie zwolnić wejście FIFO. Zasygnalizuje to mysql że wejście się zakończyło i w konsekwencji automatycznie umrze.

Istnieje również alternatywa, która nie wymaga FIFO, ale będziesz potrzebować dwóch skryptów:

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 Kopiuj bazę danych z serwera na serwer jednym poleceniem

  2. MySQL:Wybierz poprzedni miesiąc i miesiąc przed

  3. Zamawianie w przedsprzedaży zestawienia GROUP BY

  4. Mysql_real_escape_string() Nie można ustanowić połączenia z serwerem

  5. Transakcja MySQL z aplikacją księgową