我有兩個用於我的網站的MySQL數據庫 - 一個用於生產環境,另一個用於測試/開發環境。兩者都有相同的模式(當然,除非我正在測試我打算改變的東西)。表少數是國際化的目的:將MySQL表的內容複製到另一個(本地)數據庫的表中
TransLanguage - 非英語語言
TransModule - 模塊(短語翻譯束,可分別由PHP腳本加載)
TransPhrase - 在個別短語,在英語中,潛在的翻譯
TranslatedPhrase - 由志願者提交的短語翻譯
ChosenTranslatedPhrase - SCRE詞組的翻譯。
翻譯志願者都是在生產現場工作,因爲他們是普通用戶。
我想創建一個存儲過程,可用於將這些表中的四個(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不願讓這位用戶同時在兩個數據庫上行使其權限。怎麼回事,有沒有辦法解決這個問題?