我有两个用于我的网站的MySQL数据库 - 一个用于生产环境,另一个用于测试/开发环境。两者都有相同的模式(当然,除非我正在测试我打算改变的东西)。表少数是国际化的目的:将MySQL表的内容复制到另一个(本地)数据库的表中
TransLanguage - 非英语语言
TransModule - 模块(短语翻译束,可分别由PHP脚本加载)
TransPhrase - 在个别短语,在英语中,潜在的翻译
TranslatedPhrase - 由志愿者提交的短语翻译
ChosenTranslatedPhrase - SCRE词组的翻译。
翻译志愿者都是在生产现场工作,因为他们是普通用户。
我想创建一个存储过程,可用于将这些表中的四个(TransLanguage,TransModule,TransPhrase和ChosenTranslatedPhrase)的内容从生产数据库同步到测试数据库,以保持测试环境到目前为止,并防止“未知短语”错误在测试中出现问题。我的第一个工作是建立在测试数据库中执行以下步骤:
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'"
。我还尝试创建过程以反向工作(即,作为生产数据库的数据字典而不是测试数据库的一部分存在)。如果我这样做,方式,我得到一个相同的消息,除了它告诉我我拒绝DELETE命令而不是SELECT。
我已经确保我的用户对两个数据库都有INSERT,DELETE,SELECT,UPDATE和CREATE ROUTINE权限。但是,似乎MySQL不愿让这位用户同时在两个数据库上行使其权限。怎么回事,有没有办法解决这个问题?