将MySQL表的内容复制到另一个(本地)数据库中的表

时间:2010-05-14 00:54:11

标签: mysql sql mysql-error-1142

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

1 个答案:

答案 0 :(得分:1)

这个问题的答案非常简单,与我打字的时间不成比例。我的问题只是一个区分大小写的问题。没错,我把我不应该拥有的数据库的名称大写。 MySQL的错误消息,声明我被拒绝执行我发出的命令的权限,而不是通知我我试图访问的数据库不存在,误导了我的问题的性质。我保留这个问题,以防某人某某某某方面具有某种指导意义。