Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पूरी तरह से FIFOs के माध्यम से MySQL क्लाइंट से अटैच करें

FIFO के साथ समस्या यह है कि जब डेटा इनपुट करने वाली प्रत्येक प्रक्रिया समाप्त हो जाती है, तो यह पढ़ने वाली प्रक्रियाओं को संकेत देती है (इस मामले में mysql ) कि यह डेटा का अंत है, इसलिए यह समाप्त हो जाता है।

चाल यह सुनिश्चित करने के लिए है कि फीफो इनपुट को हर समय जीवित रखने की एक प्रक्रिया है। आप 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 . को समाप्त कर देते हैं फीफो इनपुट को पूरी तरह से जारी करने की प्रक्रिया। यह mysql . को संकेत देगा कि इनपुट समाप्त हो गया है और यह स्वतः ही परिणाम में मर जाएगा।

एक विकल्प यह भी है कि फीफो की आवश्यकता नहीं है, लेकिन आपको दो लिपियों की आवश्यकता होगी:

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 -99.99999999 से आगे नहीं जाएगा

  2. MySQL में चुनें काम नहीं कर रहा

  3. CURRENT_TIMESTAMP उदाहरण – MySQL

  4. MySQL में इमोजी (UTF8 4 बाइट कैरेक्टर) कैसे डालें <5.5

  5. PHP 7 को MySQLi नहीं मिल रहा है