2010-05-14 123 views
0

我有兩個用於我的網站的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不願讓這位用戶同時在兩個數據庫上行使其權限。怎麼回事,有沒有辦法解決這個問題?

回答

1

這個問題的答案非常簡單,與我花在打字時間上的時間不成比例。我的問題僅僅是一個區分大小寫的問題。沒錯,我使用了我不應該擁有的數據庫名稱。 MySQL的錯誤消息,聲明我被拒絕執行我發佈的命令的許可,而不是通知我我試圖訪問的數據庫不存在,誤導了我關於問題的性質。我留下了這個問題,以防某人在某種程度上對某人有指導意義。

相關問題