我们在系统上使用 AWS 进行复制。
对于不修改数据的查询,这会自动切换到复制数据库。
但是,我们有一个查询调用 MySQL 函数,该函数会修改数据库。该函数仅创建一个具有唯一 ID 的占位符记录,并通过 select 语句返回该记录。类似于:
“选择生成唯一ID()”
函数定义:
SELECT MAX(lngInvoiceID)
INTO @lngMaxInvoiceID
FROM invoice_table
WHERE GlobalConfigID=in_GlobalConfigID
FOR UPDATE;
SET @lngNewInvoiceID=COALESCE(@lngMaxInvoiceID+1,1);
INSERT INTO invoice_table(datCreated,GlobalConfigID,lngInvoiceID)
VALUES(CURDATE(),in_GlobalConfigID,@lngNewInvoiceID);
RETURN @lngNewInvoiceID;
但是,这将失败,并出现 MySQL 错误“MySQL 服务器正在使用 --read-only 选项运行,因此无法执行此语句”。
MySQL 中的 GenerateUniqueID 函数将其“数据访问”属性设置为“修改 SQL 数据”,这似乎没有什么区别。
数据库连接明确连接到负载均衡器。
是否有某种方法可以强制查询在非复制的节点上运行?
最佳答案
我绕过负载均衡器并直接连接到主服务器。这似乎阻止了连接转移到复制。这不是一个理想的解决方案,但它确实解决了我的问题。
关于php - 强制 AWS 允许查询在复制时不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037081/