0

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

4

1 回答 1

1

这个问题的答案非常简单,与我输入它所花费的时间不成比例。我的问题只是区分大小写的问题。没错,我在不应该拥有的数据库名称中大写了。MySQL 的错误消息指出我被拒绝执行我发出的命令,而不是通知我我试图访问的数据库不存在,这误导了我对问题的性质。我把这个问题留了下来,以防它对某个地方的某个人有启发性。

于 2010-05-14T01:08:33.107 回答