具有只读设置的从属服务器上的存储过程中的临时表

时间:2009-05-06 07:06:38

标签: mysql stored-procedures replication innodb

我们已经建立了一个复制方案主/从,我们最近遇到了问题,因为有些用户直接写在奴隶而不是主人,这使得整个设置不一致。

为了防止这些问题再次发生,我们决定从访问从属设备的用户中删除插入,删除,更新等权限。问题是某些存储过程(用于读取)需要临时表。

我读到将全局变量read_only更改为true将执行我想要的操作并允许存储过程正常工作(http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_read_only)但我一直收到错误:

  

MySQL服务器使用--read-only选项运行,因此它不能   执行此声明(1290)

我使用的存储过程(用于测试)是这样的:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test_readonly` $$
CREATE DEFINER=`dbuser`@`%` PROCEDURE `test_readonly`()
BEGIN

CREATE TEMPORARY TABLE IF NOT EXISTS temp
(
`BT_INDEX` int(11),
`BT_DESC` VARCHAR(10)
);

INSERT INTO temp (BT_INDEX, BT_DESC) VALUES (222,'walou'), (111,'bidouille');

DROP TABLE temp;

END $$

DELIMITER ;

创建临时表和删除表与readonly标志一起正常工作 - 如果我注释INSERT行,它运行正常 - 但每当我想从该临时表插入或删除时,我都会收到错误消息。

我使用Mysql 5.1.29-rc。我的默认存储引擎是InnoDB。

先谢谢,这个问题真让我疯狂。

1 个答案:

答案 0 :(得分:0)

对于6.0测试版似乎有一个错误:

  

http://bugs.mysql.com/bug.php?id=33669

     

[2008年1月3日19:26] Philip Stoev

     

描述:当服务器是   以--read-only开头,更新到   Falcon临时表不是   允许的。

您可能希望在那里添加您的发现。