代码之家  ›  专栏  ›  技术社区  ›  Hammerite

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

  •  0
  • Hammerite  · 技术社区  · 15 年前

    我的站点有两个MySQL数据库——一个用于生产环境,另一个更小的数据库用于测试/开发环境。两者都有相同的模式(当然,当我测试我打算改变的东西时除外)。少数表格用于国际化:

    翻译-非英语语言

    Transmodule-模块(翻译用的成堆短语,可由PHP脚本单独加载)

    Transphrase-英语中的个别短语,用于潜在翻译

    翻译短语-志愿者提交的短语翻译

    chosentranslatedphrase-筛选短语翻译。

    做翻译的志愿者都在制作现场工作,因为他们是经常使用的人。

    我想创建一个存储过程,用于将这些表中的四个内容从生产数据库同步到测试数据库,以使测试环境保持最新,并防止测试时出现“未知短语”错误。NG。我的第一个工作是在测试数据库中创建以下过程:

    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'" . 我还尝试创建另一种方法的过程(即,作为生产数据库的数据字典的一部分而不是测试数据库存在)。如果我这样做,我会收到一条相同的消息,除了它告诉我删除命令而不是选择被拒绝。

    我已经确保我的用户在这两个数据库上都有插入、删除、选择、更新和创建例行特权。然而,MySQL似乎不愿意让这个用户同时在两个数据库上行使自己的特权。怎么会这样呢?有什么办法可以解决这个问题吗?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Hammerite    15 年前

    这个问题的答案非常简单,与我花在打字上的时间不成比例。我的问题只是一个区分大小写的问题。是的,我用了我不应该用的数据库的名字。MySQL的错误消息,声明我被拒绝执行我发出的命令,而不是通知我试图访问的数据库不存在,误导了我问题的性质。我把这个问题留到一边,以防它对某个人或某个地方有所启发。