mysql - 设置了只读的从属服务器上存储过程中的临时表

标签 mysql stored-procedures replication innodb

我们已经设置了一个主/从复制方案,但最近我们遇到了一些问题,因为一些用户直接在从服务器而不是主服务器上写入,导致整个设置不一致。

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

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

The MySQL server is running with the --read-only option so it cannot execute this statement (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 ;

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

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

提前致谢,这个问题真的快把我逼疯了。

最佳答案

对于 6.0 beta,似乎有一个关于此的错误:

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

[3 Jan 2008 19:26] Philip Stoev

Description: When the server is started with --read-only, updates to Falcon temporary tables are not allowed.

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

关于mysql - 设置了只读的从属服务器上存储过程中的临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828376/

相关文章:

mysql - 对数据库的故障转移支持

key 级别的 Redis 复制

mysql - 我怎样才能group_concat这个?

php - 如何在 SQL 数据库中基于来自 php 的两个参数进行过滤

mysql - 在 mysql 过程中传递架构名称

SQL Split - 插入分层表结构

c# - 具有 IsIDenity 和 cmd.Parameters.Add 的存储过程

php - MySQL 查询委托(delegate)/传输

MySQL:唯一,但默认为 NULL - 通过创建表允许。允许插入 1 个以上的 NULL。为什么?

MySql : How can i split the string on single "\" backslash