ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker MySQL 연결과 IntelliJ Heap Size
    DevOps/Docker 2024. 9. 6. 11:37

     

    들어가기 전에

    Docker MySQL을 사용하며 만나게 된 이슈와 IntelliJ vmoptions 설정 이슈를 작성

     

    docker compose up → Exited

    아래 URL을 기준으로 Docker MySQL 설치 후 compose 파일을 만들고 실행을 하는 데 빌드가 되다가 종료가되는 상황이 발생했다.

     

    mysql docker download

     

    docker logs CLI 명령으로 확인해 보니 이렇게 오류가 출력되는 데 원인은 유효한 data 디렉토리가 없다는 것이다.

    [ERROR] [MY-011011] [Server] Failed to find valid data directory.

     

     

    위 이미지와 같이 compose 파일을 사용해 mysql server 디렉토리와 파일을 내가 만든 localhost 폴더와 파일에 bind 하는 것이다. 여러가지 삽집을 했지만 중요한 키는 mysql 공식 문서에서 알아냈다.

     

     

    위 이미지 내용에서 data directory 관련 내용을 설명하고 있다. 요약하자면, localhost에 datadir 디렉토리가 존재해야 하고 디렉토리 내부는 비워져있어야 서버 초기화가 가능하다는 것이다.

     

    Tip.
    localhost에 datadir 내부가 채워져 있어도 되지만 그럴 경우 mysql server datadir 디렉토리 내부 구성과 똑같이 구성되어 있어야 한다. (이건 너무 귀찮으니 그냥 빈 디렉토리 상태로 만들었다)

     

     

    이렇게 작업하고 실행해보니 Exited 상태가 Running 상태가 되었다.

     

    IntelliJ ↔ mysql database 연결

    IntelliJ Tool을 사용해 mysql을 연결하려고 하는 데 IntelliJ 실행이 안된다.

     

    Cannot start the runtime

    Caused by:

    Invalid initial heap size: -Xms2048m # JVM의 초기 힙 메모리 크기

     

    전에 하던 프로젝트를 위해 IntelliJ Heap Size를 변경해두었는 데 그 때 사용하던 Heap Size 값이 새롭게 설치한 IntelliJ 실행에 문제가 되는 것이다.

     

    그래서 idea.vmoptions 파일을 열어 적당한 메모리 크기로 지정해주고 재 실행하는 데 메모리 사이즈가 변경이 안된다.

    왜 안될까? 이런 저런 고민을 해보다 응용 프로그램 삭제를 해보기로 결정했고 macOS는 응용 프로그램 삭제를 할 때 Launchpad와  Finder를 통한 제거를 지원한다.

     

    Mac에서 앱 제거

     

    하지만 이러한 접근의 제거는 연관 파일들을 제거하지는 못한다. 그렇다면 방법은 연관된 파일을 하나하나 찾아내어 삭제하는 방법 or 3rd-party 프로그램을 사용해 제거하는 2가지 방법이 있다.

     

    응용 프로그램을 제거할 때마다 연관된 파일을 찾는 수고로움을 경험하고 싶지 않아 3rd-party를 찾아보다 MacPaw에서 제공하는 Clean My Mac X를 발견했다.

     

    macOS 사용자라면 많이 알고 있고 사용하는 Tool이다. 기능에 대한 설명과 설치 방법은 아래 URL을 확인하자.

     

    CleanMyMacX 기능 설명 및 설치

     

    Clean My Mac X를 사용해 IntelliJ 연관 파일을 제거했고 IntelliJ 재 설치 후 idea.vmoptions 를 설정하니 잘 반영되어 IntelliJ 실행 오류는 해결되었다.

     

    • Windows: C:/Users/<사용자 이름>/AppData/Roaming/JetBrains/IntelliJIdea<version>/idea64.exe.vmoptions
    • macOS: ~/Library/Application Support/JetBrains/IntelliJIdea<version>/idea.vmoptions

     

    MySQL 권한 부여

    이제 mysql database를 연결하기 위해 사용자를 만들고 권한을 부여해야 한다.

     

     

    위 이미지와 같이 Docker Desktop 터미널을 사용해 mysql server console에 접속

     

    $ show grants for 'root'@'localhost'; # 특정 사용자 권한 확인
    
    $ create user '{username}'@'%' identified by '{password}'; # 새로운 유저 생성
    
    $ grant all privileges on *.* to '{username}'@'%'; # 특정 사용자 모든 DB 권한 부여
    
    $ flush privileges;


    위 명령을 수행 후 IntelliJ database 연결을 시도하니 connection timeout이 발생한다. 이번엔 무슨 문제인가?

    docker logs 확인!

     

    [ERROR] [MY-010256] [Server] Can't start server: cannot resolve hostname!

     

    해결할 수 없는 호스트네임이라고 나온다. 이 문제는 my.cnf 파일 내용 중 bind-address 구문에 인식할 수 없는 내용이 있는 것이다.

     

    bind-address=0.0.0.0 or 127.0.0.1 # 둘 중 하나 사용

     

    IntelliJ Tool에서 확인하지 않고 터미널에서 빠르게 확인하는 방법도 있다.

     

    아래는 특정 IP가 통신이 되는지 확인해 볼 수 있는 ping 이다.

    ping -a <host_ip>

     

    아래는 특정 IP에 특정 Port를 확인해 볼 수 있는 telnet 이다.

     

    telnet <host_ip> <port>

     

    이렇게 Connected to <host_ip> 가 확인되었고 변경된 my.cnf 파일을 mysql server가 인식하기 위해 mysql server restart를 하면 변경된 설정이 반영되어 IntelliJ Tool에서도 mysql server로 접속하고 SQL을 작성해 데이터를 확인해 볼 수 있다.

     

     

     

    'DevOps > Docker' 카테고리의 다른 글

    Docker와 함께하는 Redis Install  (0) 2024.08.14
Designed by Tistory.