Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đính kèm hoàn toàn vào máy khách MySQL thông qua FIFOs

Vấn đề với FIFOs là khi mọi quá trình nhập dữ liệu kết thúc, nó báo hiệu các quá trình đang đọc (trong trường hợp này là mysql ) rằng nó là phần cuối của dữ liệu, vì vậy nó sẽ kết thúc.

Bí quyết là đảm bảo rằng luôn có một quy trình giữ cho đầu vào FIFO luôn tồn tại. Bạn có thể làm điều đó bằng cách chạy sleep 999999999 > fifofile trong nền.

Thực hiện:

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

Cuối cùng, chúng tôi chấm dứt sleep quá trình giải phóng hoàn toàn đầu vào FIFO. Nó sẽ báo hiệu mysql rằng đầu vào đã kết thúc và hậu quả là nó sẽ tự động chết.

Ngoài ra còn có một giải pháp thay thế không yêu cầu FIFO, nhưng bạn sẽ cần hai tập lệnh:

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. CONVERT_TZ - Cách thay đổi múi giờ MySQL trong truy vấn

  2. TẢI DỮ LIỆU không được phép trong các thủ tục được lưu trữ

  3. Ví dụ về CURTIME () - MySQL

  4. Xử lý khởi động lại mysql trong SQLAlchemy

  5. Xem trước và tải lên hình ảnh bằng cách sử dụng cơ sở dữ liệu PHP và MySQL