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