응애개발자
article thumbnail
728x90

도커를 설치했으니 이제 도커에 MySQL을 올리고 MySQL 워크벤치와 연동해보겠다.

 

Docker로 MySQL 설치 & 사용자 생성

1. MySQL Docker 이미지 다운로드

docker pull mysql

 

2. 다운로드한 이미지 확인

docker images

 

3. MySQL Docker 컨테이너 생성

  • 다음 명령어로 컨테이너를 생성한다.
  • 컨테이너 이름: --name 뒤에 컨테이너 이름을 입력한다.
  • 비밀번호: <비밀번호 입력> 에서 비밀번호를 입력하는데 <  > 는 입력하지 않는다.
  • MySQL의 특정 버전을 사용하고 싶다면 버전을 입력해준다.
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<비밀번호 입력> -d -p 3306:3306 mysql:latest 

💡 명령어 참고:

  • --name: 생성할 컨테이너 이름
  • -e: 환경변수 (PASSWORD) 설정

-d: Dispatch mode (백그라운드에서 실행)

  • -p: 포트 (외부포트 : Docker 내부포트)
  • mysql: sql 버전
  • MySQL 최신 버전이 아닌 경우, 기본 언어가 latin1로 설정되어 있을 수도 있다.
  • 필요 시, 다음 옵션을 위 명령어 뒤에 붙여서 입력한다.
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 

4. 생선된 MySQL Docker 컨테이너 확인

docker ps

💡 명령어 참고:

  • ps: 실행중인 컨테이너 리스트 보기
  • ps -a: 모든 컨테이너 리스트 보기

5. 컨테이너 시작/종료/재시작

  • 컨테이너 시작
docker start mysql-container // "mysql-container" 대신 ID인 "be960704dfac"로도 실행 가능
  • 컨테이너 종료
$ docker stop mysql-container
  • 컨테이너 재시작
$ docker restart mysql-container

 

6. 컨테이너 시작/종료/재시작

  • 다음 명령어에서 접속한 컨테이너 이름을 입력 후 MySQL에 로그인한다.
  • 이후 root@{containerName}#으로 진입하게 된다.
  • docker로 돌아가고 싶으면 exit를 입력하면 된다.
docker exec -it mysql-container bash

💡 명령어 참고:

  • -it: Interactive Terminal Mode

 

7. Locale 설정

  • 다음 명령어를 입력하면 현재 환경의 locale 설정 정보를 볼 수 있다.
locale -a
  • 디폴트 환경에는 한국어 설정이 되어있지 않기 때문에 한국어 사용 예정이라면 7번 과정에서 다음 명령어를 입력한다.

💡 참고: bash에 진입한 상태라면 exit를 입력하여 나올 수 있다.

  • 이후 locale 명령어로 다시 확인해보면 UTF-8이 적용된 것을 확인할 수 있다.
$ docker exec -it -e LC_ALL=C.UTF-8 mysql-container bash

 

 

8. MySQL 서버 접속

  • 다음 명령어를 사용하여 관리자로 서버에 접속한다.
  • 접속하면 mysql>로 진입하게 된다.

💡 참고: 우분투에서 실행했다면 root@{containerName}# 형태로 뜨고, docker에서 진입하면 bash-숫자# 형태로 뜨는 것으로 추측된다.

bash-5.1# mysql -u root -p // # 뒤부터 입력해야 한다.
Enter password: // 비밀번호 입력
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.41 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> // mysql로 진입

 

9. MySQL 데이터베이스에 사용자 생성 및 권한 부여

  • 예시: hello라는 사용자를 생성하고, 모든 권한을 부여한다.

‼️ 주의: SQL 쿼리문을 작성하는 것이기 때문에, 맨 마지막에 ;를 꼭 입력해야한다.

  • 사용자 생성
mysql> create user 'hello'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.04 sec)

💡 : 컨테이너 외부에서 MySQL에 로그인이 필요할 시, localhost 대신 %를 입력한다.

  • 생성한 유저에게 모든 DB 및 테이블 접근 권한 부여
mysql> grant all privileges on *.* to 'hello'@'localhost';
Query OK, 0 rows affected, 1 warning (0.01 sec)
  • 설정한 권한 적용
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

 

10. MySQL 종료

mysql> quit
Bye

 

MySQL 워크벤치 연동

1. MySQL 설정

+ 버튼을 눌러줍니다.

✅ Connection Name은 MySQL 제목처럼 보여질 이름을 말합니다.

✅ Hostname은 aws 인스턴스에서 퍼블릭 IPv4주소를 입력하시면 됩니다.

✅ 비밀번호는 Password의 Store in Vault를 선택하셔서 위에서 지정한 MYSQL_ROOT_PASSWORD를 입력합니다.

 

그리고 Test Connection을 누르면 실패가뜹니다.

이것은 AWS의 보안그룹을 수정하면 됩니다.

 

2. AWS 인스턴스 보안그룹 수정

먼저 인스턴스의 보안그룹을 선택합니다.

 

그리고 인바운드 규칙 편집을 선택합니다.

 

규칙 추가를 선택하고, 유형을 MYSQL로 설정하고 포트를 Anywhere/IPv4 를 선택해주면 IP가 자동으로 입력됩니다.

 

 

그 후 Test Connection을 누르면 

 

이렇게 오류가 날것이다. 위에 hello@'localhost'로만 사용자를 생성했기 때문에 오직 로컬에서만 접속이 가능하다 따라서 원격에서 접속하려면 'hello'@'%' 또는 특정 IP를 지정해주어야한다. 따라서 mysql에 다시 접속한 후

CREATE USER 'hello'@'%' IDENTIFIED BY '<비밀번호>'; //<비밀번호> 이부분은 비밀번호를 넣어주세요
GRANT ALL PRIVILEGES ON *.* TO 'hello'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

이렇게 사용자를 하나 만들고 다시 접속해보자.

 

그러면 접속이 잘 완료된다.

profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!