我的网站有两个MySQL数据库 - 一个用于生产环境,另一个用于测试/开发环境。两者都有相同的模式(当我正在测试我打算改变的东西时,当然)。少数表用于国际化目的:
TransLanguage - 非英语语言
TransModule - 模块(用于翻译的短语包,可以通过PHP脚本单独加载)
TransPhrase - 用于潜在翻译的英语单个短语
TranslatedPhrase - 志愿者提交的短语翻译
ChosenTranslatedPhrase - 短语的筛选翻译。
翻译的志愿者都在生产网站上工作,因为他们是普通用户。
我想创建一个存储过程,用于将其中四个表的内容 - 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不愿让这个用户同时在两个数据库上行使其权限。怎么来,有办法解决这个问题吗?
答案 0 :(得分:1)
这个问题的答案非常简单,与我打字的时间不成比例。我的问题只是一个区分大小写的问题。没错,我把我不应该拥有的数据库的名称大写。 MySQL的错误消息,声明我被拒绝执行我发出的命令的权限,而不是通知我我试图访问的数据库不存在,误导了我的问题的性质。我保留这个问题,以防某人某某某某方面具有某种指导意义。