1. 개요
MySQL Version : 5.1.x
MySQL Server / Application Client 환경(C/S 환경)
MySQL 서버와 서버에 접속하는 클라이언트가 분리되어 있는 환경에서, 클라이언트 측에서 대용량의 쿼리 파일을 입력하기 위해 흔히 사용하는 쿼리가 LOAD DATA 쿼리이다.
해당 쿼리를 사용하다 발생하는 에러 중에 The used command is not allowed with this MySQL Version 이란 에러가 있다.
이 에러를 발생시키는 방법으론 클라이언트 동작 중에 서버의 MySQL 을 동작 중지 후, 재실행 시키면 클라이언트 프로그램에서 다시 서버에 연결하였을 때 LOAD DATA 쿼리에서 에러를 내뱉는다.
본 에러는 클라이언트가 서버에 접속할 때 local-infile 옵션이 해제가 되어 발생하는 문제로 흔히 mysql -u root -p --local-infile=1 database 와 같은 형태로 해결이 가능하다.
2. C/C++ 기반 Application 조치
개요에서 제시한 해결 방법은 mysql.exe 를 사용하여 접속할 때나 사용 할 수 있는 방법이지, Application 접속에서는 다른 방법을 사용하여야 한다.
mysql에서는 connection 전에 설정 값을 추가 할 수 있는 mysql_option 이란 함수가 존재한다.
본 함수는 mysql_init()와 mysql_real_connect() 사이에 호출하여야 한다.
// mysql_options int mysql_options(MYSQL *mysql, enum mysql_option option, const void *argument) /* 인수 */ // mysql : MYSQL 핸들 // option : 사용자가 설정하고자 하는 옵션 // argument: 옵션 값(정수 일 경우, 포인터로 가리킨다) /* 리턴 */ // 성공 : 0 // 실패 : Non-zero
infile-local 옵션을 주기 위해서는 다음과 같이 설정하면 된다
int nOption = 1; mysql_init( &Mysql ); mysql_options(&Mysql, MYSQL_OPT_LOCAL_INFILE, &nOption); mysql_real_connect(...)
이 외의 다른 옵션들에 대해서는 http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html 를 참조한다.
'Database > Mysql' 카테고리의 다른 글
processlist unauthenticated user 해결 방법 (0) | 2013.07.03 |
---|