ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql cli 모음 (+ docker)
    백엔드 2022. 12. 9. 13:37
    728x90
    반응형
    SMALL

    이번 포스팅은 frontend, backend, serving server, db로 구성된 프로젝트의 각 컴포넌트를 컨테이너로 연결시키는 과정에서 있었던 mysql 관련 사항들을 정리해보려고 한다.

    ubuntu 환경에서 mysql을 이용하고, container로 db를 띄우고 연결하는 과정이 궁금한 사람들에게 유용한 정보였음 좋겠다.

    mysql + docker

    mysql service 시작, 종료 명령어

    sudo service mysql start
    
    sudo service mysql stop
    

     

    mysql 저장 경로 변경

    db container를 띄우고 사용하게 된다면, 해당 컨테이너가 없어져도 안에 데이터는 이후에도 계속 사용할 수 있도록 해주어야 합니다. 그러기 위해서 볼륨 마운트를 사용합니다.

     

    그리고, 한 프로젝트를 운영하게 되면 db 말고 .jpg 파일이나, 모델 파일에 대한 volume도 필요할 경우가 있습니다. 이럴 경우 모든 volume을 한 디렉토리 아래에서 관리하는 것이 편할 것입니다.

     

    mysql의 저장 공간을 다른 volume들과 같은 디렉토리에 위치시키려면 mysql의 저장 경로를 수정해야 합니다.

    mysql의 저장 경로를 수정하는 방법은 다른 분의 포스팅을 참고했습니다. https://freestrokes.tistory.com/42

    위의 포스팅에 너무 자세히 적혀있어 그대로 따라하시면 저장경로를 변경할 수 있을 것 같습니다!

     

    mysql의 저장경로를 다른 volume들과 같은 directory 내부로 변경하고 해당 디렉토리를 volume mount하여 db container를 만들게 된다면, 오류나 어떤 이유로 container를 없앤 뒤에도 사용하고 있던 데이터는 사라지지 않고 다시 사용 가능하게 되고, 다른 volume들과 함께 있어 관리하기에도 편할 것으로 생각됩니다.

     

     

    mysql 계정 설정

    create user '{계정이름}':{host} identified by '{비밀번호}';

    container db에 cli로 접속하고 싶을 경우 유의 해야할 점은 계정의 host를 자신이 접속할 host로 정의를 해두어야 한다는 것이다.

    예를 들어, host를 localhost로 설정했을 경우 컨테이너 내부에 접속해야지만 해당 계정 db에 접속할 수 있다.

    그러므로, host를 컨테이너 외부에서도 접근 가능할 수 있는 host로 설정해두어야지만 컨테이너 외부에서도 db 접속이 가능하다.

     

     

    컨테이너 외부에서 db container에 접속하는 방법

    mysql -P {db port번호} --protocol=tcp -u {계정이름} -p

    일반적인 mysql db 접속은 mysql -u {계정이름} -p으로도 가능하지만, 컨테이너의 db에 접속할 경우 port번호나 protocol도 명시를 해줘야 가능하다.

     

     

    mysql db owner 자동 변경 이슈

    컨테이너로 db를 띄우게 될 경우 기존의 db 저장 path에 volume mount를 하여 데이터를 저장하도록 했는데, 컨테이너를 종료하면 해당 경로의 owner가 'systemd-coredump'로 변경하는 이슈가 있습니다.

    이는 container로 db를 실행할 경우 user id와 group id가 각각 999, 999이기 때문입니다. (host OS에서 999는 systemd-coredump이다.)

    이럴 경우, Dockerfile을 빌드할 경우 userMod와 groupMod를 통해 컨테이너의 uid/gid를 사용자의 uid/gid로 매핑해주면 된다고 한다.

    reference: https://forums.docker.com/t/systemd-coredump-taking-ownership-of-tmp-db-directory-and-contents-in-rails-app/93609

     

    Systemd-coredump taking ownership of /tmp/db directory and contents in Rails app

    I have set up a containerized Rails application according to the Quickstart guide here: https://docs.docker.com/compose/rails/ It mostly works, but requires me to sudo chown -R $USER:$USER the /tmp/db directory every time I start and stop it, because the o

    forums.docker.com

    반응형
    LIST

    '백엔드' 카테고리의 다른 글

    JPA 연관관계 살펴보기 (1:1, 1:N, N:1)  (4) 2023.08.21
    Entity annotation, Listener  (1) 2023.08.19
    JPA 쿼리메서드  (0) 2023.08.18
    JPA 살펴보기  (0) 2023.08.17
    Spring boot todo list 만들기  (2) 2023.07.21

    댓글

Designed by Tistory.