상세 컨텐츠

본문 제목

mysql) cli를 활용하여 docker 내 mysql 접속하기

TIL (Today I Learned)

by NayC 2022. 2. 13. 06:33

본문

728x90

 

 

 

(gui를 사용하지 않고 cli로 mysql을 켜는법)

 

상황

로그인을 해줘야 홈페이지에 들어갈 수 있으니 연결된 mysql에 id와 password를 생성해줘보는 상황

 

우선 localhost 정보를 가지고(env.json에서 확인) mysql에 접속

-> mysql -u root -p

 

mysql -h서버 -u아이디 -p비밀번호 데이터베이스명

서버의 IP 주소가 "192.168.0.100" 이고, 아이디는 "root", 비밀번호는 "rootpassword" 이며, 접속시 바로 사용할 데이터베이스 이름이 "testdb" 라면 다음과 같이 입력합니다. 옵션이름 -p 와 옵션값 사이에 공백을 두지 않습니다.(DB명으로 처리되어 버립니다.) 

C:\> mysql -h192.168.0.100 -uroot -prootpassword testdb

서버가 localhost (127.0.0.1) 일 경우에는 -h 옵션을 생략해도 됩니다. 처음 DB 를 바로 지정하지 않고 접속 후 지정해서 사용하려면 DB명을 생략해도 됩니다.

C:\> mysql -uroot -prootpassword

보안 목적으로 입력되는 비밀번호를 다른 사람이 보지 못하게 하려면 -p 옵션에 값이 없이 사용하면 됩니다. 비밀번호 입력 프롬프트가 나오고 입력되는 값은 * 표 처리 됩니다.

C:\> mysql -uroot -p
Enter password: ****

출처: I +  https://offbyone.tistory.com/54

 

문제 상황

계-속 같은 문제가 뜬다.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

 

문제 원인

1. 2002 에러 코드를 검색

-> 연결 관련 문제다. 
-> docker 실행 후 다시 mysql 접속 시도.
-> 그래도 계속 저 위의 에러 존재.

 

2 - 1. 에러 이유를 정확히 읽어보자.

 

Remember that you will need to connect to running docker container. So you probably want to use tcp instead of unix socket. Check output of docker ps command and look for running mysql containers. If you find one then use mysql command like this: mysql -h 127.0.0.1 -P <mysql_port> (you will find port in docker ps output). If you can't find any running mysql container in docker ps output then try docker images to find mysql image name and try something like this to run it: docker run -d -p 3306:3306 tutum/mysql where "tutum/mysql" is image name found in docker images.

출처 : https://stackoverflow.com/questions/23234379/installing-mysql-in-docker-fails-with-error-message-cant-connect-to-local-mysq

 

참고로 local_setting 위치는, 현 프로젝트 폴더 &amp;amp;amp;amp;gt; docker &amp;amp;amp;amp;gt; local_setting

 

현재 local에서는 mysql이 위치한 곳은?

-> 바로 docker 안이다. 

- 이곳의 port는 3306 (compose up 한 뒤 맨 아래 출력되는 결과물에서 알거나 or 직접 프로젝트 내 docker>local_setting>mysql>dockerfile에서 알거나)

 

docker 내 mysql의 port 번호  내 터미널에서 mysql의 port 번호
3306 9877

 

When the host is "localhost", MySQL Unix clients use a Unix socket, AKA Unix Domain Socket, rather than a TCP/IP socket for the connection

출처 : https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424

 

즉, ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 라는 오류가 계속 났던 이유는 docker 내 mysql, 즉 local과 다른 환경(내 언어: 원격 가상 공간) 에 연결을 시켜줘야 하는데 내 터미널 내에서(로컬에서) 연결을 시도하니 docker 내 mysql은 통신을 할 수 없는 것

 

해결

 

1. 

docker를 띄운 터미널에서 docker ps를 눌러보면 mysql container가 띄어진 걸 볼 수 있음. 

-> '이곳에' 접속을 해주면 됨. 

 

2.

docker exec 명령어를 사용해서 내가 원하는 container 들어가기

- docker exec -it [NAME] /bin/bash

 

 

맨 첫번째 명령어는 오류가 난 것을 알 수 있음 

-> 뒤에 /bin/bash까지 붙여준다. 

 

그러면 mysql에 접속하기 위해 로그인 명령어를 입력할 수 있게 되고, 접속이 된다! 

 

p.s mysql > 다음에 이제 mysql 명령어들을 입력하고 결과를 받게 되는데 ' ; ' 붙여주는게 필수! 

      - 붙여주지 않으면 계속 명령어를 작성하는줄 알고 enter를 쳐도 입력을 받는 line이 계속 뜬다. 

 

 

p.s docker 명령어 상세한 설명은 

https://ubermensch-with.tistory.com/978?category=938656 

 

728x90
반응형

관련글 더보기