2010-05-14 35 views
0

我有两个用于我的网站的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不愿让这位用户同时在两个数据库上行使其权限。怎么回事,有没有办法解决这个问题?

回答

1

这个问题的答案非常简单,与我花在打字时间上的时间不成比例。我的问题仅仅是一个区分大小写的问题。没错,我使用了我不应该拥有的数据库名称。 MySQL的错误消息,声明我被拒绝执行我发布的命令的许可,而不是通知我我试图访问的数据库不存在,误导了我关于问题的性质。我留下了这个问题,以防某人在某种程度上对某人有指导意义。

相关问题