相关疑难解决方法(0)

完全通过FIFO附加到MySQL客户端

在Bash脚本上,我想让MySQL会话在多个顺序访问中保持开放状态; 访问MySQL的常用方法是为每个SQL命令或一组命令打开一个单独的会话,例如

mysql -u user -e "show tables;"
Run Code Online (Sandbox Code Playgroud)

此方法的限制是需要双重的那些事务的原子性和锁定状态的丢失:例如,T在以下双重操作的整个长度上,不可能在表上保留锁定状态:

### Minimalistic example
data=$(mysql -e "\
    lock table T write;
    select col from T;
")
# ...
# parse 'data' and compute 'output' variable
# ...
mysql -e "insert into T values ($output);"
Run Code Online (Sandbox Code Playgroud)

我的解决方案是使用两个FIFO在多个访问中保持MySQL会话开放,并在后台挂起进程.


建议的解决方案:
创建一对FIFO : mkfifo IN OUT.
将MySQL客户端实例设置到位,并使用虚拟对象while来保持管道打开并防止SIGPIPE信号:

mysql --xml --batch --raw --skip-column-names \
    -h "$hostname" -u "$username" "$db" >IN <OUT &
while :; do sleep 1; done               <IN >OUT & …
Run Code Online (Sandbox Code Playgroud)

mysql bash pipe fifo

5
推荐指数
2
解决办法
1618
查看次数

标签 统计

bash ×1

fifo ×1

mysql ×1

pipe ×1