gpt4 book ai didi

mysql - 在 Bash 脚本中避免 MySQL 读取竞争条件

转载 作者:行者123 更新时间:2023-11-29 02:31:34 26 4
gpt4 key购买 nike

我有一个应用程序可以将数据复制到外部磁盘上。复制请求存储在 MySQL 数据库中,将从多台复制机读取,这些复制机运行 bash 脚本来接收请求。一旦接收到请求,它就会在数据库中设置为“进行中”。但是,我试图避免多台机器一起读取请求并开始复制相同数据的情况。

我打算使用表锁定来执行此操作,但我很挣扎,因为表锁会在 session 过期时过期,所以如果我这样做:

mysql="mysql -h dbhost -u user -pPassword diskcopydb"
echo "LOCK tables diskcopy WRITE;" | $mysql
echo "SELECT SQL_NO_CACHE * FROM diskcopy WHERE status=\"request\"" | $mysql

当它收到请求时,锁实际上已经过期,所以竞争条件仍然存在。这里有个问题:

MySQL from the command line - can I practically use LOCKs?

其中 SQL 命令被打包到一个 block 中,它们一起通过管道传输到 MySQL 中,但我需要从 MySQL 中途获取输出以接收请求。有人有这方面的食谱吗?它似乎应该是一个相当常见的用例......

最佳答案

这个问题实际上在这里得到了回答:

Bulk insert of MySQL related tables from bash

换句话说,使用 Bash 与 MySQL 的双向通信很棘手,使用“适当的”编程语言(如 Perl 或 Python)更容易,您可以在其中打开和保持连接。

关于mysql - 在 Bash 脚本中避免 MySQL 读取竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com