我的站点有两个MySQL数据库——一个用于生产环境,另一个更小的数据库用于测试/开发环境。两者都有相同的模式(当然,当我测试我打算改变的东西时除外)。少数表格用于国际化:
翻译-非英语语言
Transmodule-模块(翻译用的成堆短语,可由PHP脚本单独加载)
Transphrase-英语中的个别短语,用于潜在翻译
翻译短语-志愿者提交的短语翻译
chosentranslatedphrase-筛选短语翻译。
做翻译的志愿者都在制作现场工作,因为他们是经常使用的人。
我想创建一个存储过程,用于将这些表中的四个内容从生产数据库同步到测试数据库,以使测试环境保持最新,并防止测试时出现“未知短语”错误。NG。我的第一个工作是在测试数据库中创建以下过程:
CREATE PROCEDURE `SynchroniseTranslations` ()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
DELETE FROM `TransLanguage`;
DELETE FROM `TransModule`;
INSERT INTO `TransLanguage` SELECT * FROM `PRODUCTION_DB`.`TransLanguage`;
INSERT INTO `TransModule` SELECT * FROM `PRODUCTION_DB`.`TransModule`;
INSERT INTO `TransPhrase` SELECT * FROM `PRODUCTION_DB`.`TransPhrase`;
INSERT INTO `ChosenTranslatedPhrase` SELECT * FROM `PRODUCTION_DB`.`ChosenTranslatedPhrase`;
END
当我尝试运行此时,会收到一条错误消息:
"SELECT command denied to user 'username'@'localhost' for table 'TransLanguage'"
. 我还尝试创建另一种方法的过程(即,作为生产数据库的数据字典的一部分而不是测试数据库存在)。如果我这样做,我会收到一条相同的消息,除了它告诉我删除命令而不是选择被拒绝。
我已经确保我的用户在这两个数据库上都有插入、删除、选择、更新和创建例行特权。然而,MySQL似乎不愿意让这个用户同时在两个数据库上行使自己的特权。怎么会这样呢?有什么办法可以解决这个问题吗?