レプリケーションスキームのマスター/スレーブを設定しましたが、最近、一部のユーザーがマスターではなくスレーブに直接書き込んだため、設定全体に一貫性がないため、問題が発生しました。
これらの問題が再発しないようにするために、スレーブにアクセスするユーザーから挿入、削除、更新などの権限を削除することにしました。問題は、一部のストアドプロシージャ(読み取り用)に一時テーブルが必要なことです。
グローバル変数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 ;
一時テーブルの作成と削除テーブルは読み取り専用フラグで正常に機能します-INSERT行にコメントを付けると、正常に実行されます-しかし、その一時テーブルに挿入または削除したいときはいつでも、エラーメッセージが表示されます。
Mysql5.1.29-rcを使用しています。私のデフォルトのストレージエンジンはInnoDBです。
事前のおかげで、この問題は本当に私を夢中にさせています。