본문 바로가기
  • AI (Artificial Intelligence)
Skills/Unix, Linux

리눅스 환경에서 mysql 연동하기

by 로샤스 2015. 9. 23.


리눅스 환경의 JAVA에서 MySQL 연결을 위한 드라이버 설정


1. 드라이버 다운로드

자신이 사용하는 MySQL 버전에 맞게 다운로드

- MySQL 5.0 하위 버전

- MySQL 5.1 이상(현재 최신버전)

- 다른 버전 선택

위 링크로 이동하면, 'mysql-connector-java-x.x.x.tar.gz'(또는 *.zip) 파일을 다운로드 받을 수 있다. 단, 오라클 계정으로 로그인을 해야한다.
(오라클 계정 하나면 오라클, 자바, MySQL 관련 자료를 쉽게 얻을 수 있으니 계정이 없는 사람은 이번 기회에 만들어 두는게 좋을 듯)

2. 드라이버 설치(압축풀기)

설치라고 해봐야 별거 없다. tar 명령으로 압축풀어주면 끝
(jdk가 설치 되어있고, JAVA_HOME 환경변수 설정이 완료된 상태로 가정)

<ex>
# tar zxvf mysql-connector-java-5.1.26.tar.gz
# cd mysql-connector-java-5.1.26
# mv mysql-connector-java-5.1.26-bin.jar $JAVA_HOME/lib/

3. 환경변수 추가(classpath)

# vi /etc/profile
...
export CLASSPATH=.:$JAVA_HOME/lib/mysql-connector-java-5.1.26-bin.jar
(위와 같이 입력 후 저장)

# sh /etc/profile
(프로파일 변경 내용이 적용 되도록 해줌)

4. 연동확인

- 서버 호스트 : MySQL 서버의 아이피
- 포트 : MySQL 서버에 설정된 포트번호
- DB명 : 접속 할 DB명
- mysql 계정 : mysql DB의 user 테이블에 설정된 계정
- 패스워드 : mysql 계정에 설정된 패스워드

각자 환경 및 설정에 맞게 입력 후 java 파일을 컴파일 하여 실행했을 때 에러 또는 예외 메시지가 나오지 않았다면, 연동 성공
(위 소스를 컴파일 했을 때 발생되는 경고는 'conn' 객체를 사용하는 곳이 없어서 나는 경고 이므로 무시해도됨)

* 'Class.forName("com.mysql.jdbc.Driver");'
이 부분은 'org.gjt.mm.mysql.Driver'으로 넣어줘도 상관 없음
하지만 'com.mysql.jdbc.Driver' 로 넣어주는 것을 권장.
'org.gjt.mm.mysql.Driver'는 예전 버전에서 사용하던 방식이고, 지금은 'com.mysql.jdbc.Driver' 로 많이 사용함. (기능적인 차이는 없음)


5. Exception 해결방법

- 예외 1
Exception in thread "main" java.lang.NoClassDefFoundError: java.util.concurrent.ConcurrentHashMap
   at com.mysql.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java:83)
   at java.lang.Class.initializeClass(libgcj.so.7rh)
   at java.lang.Class.initializeClass(libgcj.so.7rh)
   at java.lang.Class.forName(libgcj.so.7rh)
   at java.lang.Class.forName(libgcj.so.7rh)
   at CheckMySQL.main(CheckMySQL.java:14)

(MySQL 버전보다 높은 드라이버를 사용할 때 발생)

- 예외 2
Exception in thread "main" java.lang.NoClassDefFoundError: CheckMySQL.class
   at gnu.java.lang.MainThread.run(libgcj.so.7rh)
Caused by: java.lang.ClassNotFoundException: CheckMySQL.class not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./,file:/usr/local/jdk1.6.0_45/lib/mysql-connector-java-3.1.0-alpha-bin.jar,file:/usr/local/tomcat-7.0.29/lib/servlet-api.jar,file:/home/tomcat/web/WEB-INF/classes/], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at gnu.java.lang.MainThread.run(libgcj.so.7rh)

(잘못된 방법으로 클래스 파일을 실행했을 때 발생, 실행시 class 확장자를 넣어줬을 경우)

* 컴파일은?
# javac CheckMySQL.java

* 실행은?
#java CheckMySQL

- 예외 3
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./,file:/usr/local/tomcat-7.0.29/lib/servlet-api.jar,file:/home/tomcat/web/WEB-INF/classes/], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.Class.forName(libgcj.so.7rh)
   at java.lang.Class.forName(libgcj.so.7rh)
   at CheckMySQL.main(CheckMySQL.java:14)

(드라이버를 찾을 수 없으므로, 환경변수 설정 적용이 되지 않은 경우이거나 적용은 되었으나 jar파일이 해당 위치에 없어서 불러오지 못했을 수도 있다. 처음부터 천천히 다시 해보는 것이 좋음. 여기서 중요한 부분은 '/etc/profile'에 classpath 를 잡아주고  '/etc/profile'을 다시 불러오게 해줘야 한다는 점 - 다시 불러온다는 의미가 이해하기 어렵다면 리눅스 로그아웃 후 다시 로그인 하면됨)

* 위 예외 3가지에 대한 해결 방법이 각자 환경에 따라 달라질 수 있으므로 참고만 할 것!









출처 : http://jino8752.blogspot.kr/2013/09/java-mysql.html


레퍼런스 :

1. http://confluence.goldpitcher.co.kr/display/GPJIRA/Configuring+database+connection+results+in+Error%3A+Host+%27xxxxxxx%27+is+not+allowed+to+connect+to+this+MySQL+server
2. 
http://noon.tistory.com/1477
3. 
http://www.mkyong.com/jdbc/how-to-connect-to-mysql-with-jdbc-driver-java/
4. http://ra2kstar.tistory.com/120#recentTrackback










댓글