我需要一个数据库级同步。为此,我使用GET_LOCK('prefix.some_id',0)。 在某些时刻,GET_LOCK在不同主机上的不同脚本中为相同的密钥返回1。可能是什么问题呢?我需要很多这些锁,大约5-7k。
有什么想法吗?
答案 0 :(得分:4)
MySQL 5.7.5和MariaDB 10.0.2现在都支持你的用例。
对于MySQL,请参阅:http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_get-lock
对于MariaDB,请参阅:https://mariadb.com/kb/en/mariadb/documentation/functions-and-operators/miscellaneous-functions/get_lock/
答案 1 :(得分:2)
根据documentation,您无法通过GET_LOCK()
为每个连接保留多个锁定(强调添加):
如果您使用GET_LOCK()获得了锁,则在执行RELEASE_LOCK(),执行新的GET_LOCK()时释放,或者您的连接终止(正常或异常)
正如丹尼尔所说,这个功能有feature request,但它是在2003年提交的,没有任何活动。
根据您的使用情况,您可以使用MySQL的表或行级锁定来实现您的目标。
答案 2 :(得分:1)