2010-05-14 4 views
0

사이트 용 MySQL 데이터베이스가 두 개 있습니다. 하나는 프로덕션 환경 용이고 다른 하나는 테스트/개발 환경 용입니다. 둘 다 똑같은 스키마를 가지고 있습니다 (물론 내가 바꿀 무언가를 테스트 할 때 제외). 테이블 소수의 국제화 목적 :MySQL 테이블의 내용을 다른 (로컬) 데이터베이스의 테이블에 복사

TransLanguage - 영어 이외의 언어

TransModule - 모듈

TransPhrase (PHP 스크립트에 의해 개별적으로로드 할 수 있습니다 번역 문구의 번들) - 자원 봉사자들에 의해 제출 된 문구의 번역

ChosenTranslatedPhrase - - scre 가능성 번역

TranslatedPhrase을위한 영어 개인 문구, 문구의 ened 번역.

번역을 수행하는 지원자는 일반 사용자와 마찬가지로 프로덕션 사이트에서 모두 작업하고 있습니다.

프로덕션 데이터베이스에서 테스트 데이터베이스로이 네 개의 테이블 (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'" 내 첫 번째 노력은 테스트 데이터베이스에서 다음 절차를 만드는 것이 었습니다. 또한 다른 방법으로 작업 할 프로 시저를 만들려고했습니다. 즉, 테스트 데이터베이스가 아닌 프로덕션 데이터베이스에 대한 데이터 사전의 일부로 존재했습니다. 내가 그렇게한다면, 그것은 SELECT가 아니라 DELETE 명령이 거부되었다는 것을 제외하고는 동일한 메시지를 얻습니다.

내 사용자가 두 데이터베이스 모두에 대해 INSERT, DELETE, SELECT, UPDATE 및 CREATE ROUTINE 권한을 가지고 있는지 확인했습니다. 그러나 MySQL이이 사용자가 동시에 두 데이터베이스에 대한 권한을 행사하는 것을 꺼려하는 것처럼 보입니다. 왜 이리 와서 거기에 방법이 있을까요?

답변

1

이 질문에 대한 답은 내가 입력 한 시간의 양에 비례하여 매우 간단합니다. 내 문제는 단순히 대소 문자를 구분하는 문제였습니다. 맞습니다. 나는 갖고 있지 않아야하는 데이터베이스의 이름을 대문자로 사용했습니다. MySQL의 오류 메시지는 내가 액세스하려고 시도한 데이터베이스가 존재하지 않는다는 사실을 알려주지 않고 발행 한 명령을 수행 할 수있는 권한이 거부되었다고 말하면서 문제의 본질을 오해했습니다. 누군가 어딘가에 유익한 경우를 대비하여 질문을 떠납니다.

관련 문제