1. Docker로 MySQL을 설치하는 이유
가. 로컬환경을 깨끗하게 유지하기 위해
•
로컬 환경에 DBMS를 직접 설치시 로컬환경에서 DB 사용에 따라 잔류한 데이터를 완전히 삭제하기 힘들다
•
가상환경 위에 DBMS를 설치한다면 해당 가상환경을 삭제하면서 관련 데이터도 함께 간편하게 삭제할 수 있음
나. 가상환경으로 Docker를 선택한 이유
•
VM 기반의 리눅스 등에 DBMS를 설치할 수 있지만 Docker가 더 가볍고 사용하기 편리함
2. 설치 가이드
•
가상 환경을 위해서 docker를 설치한다.
•
docker 기반으로 mysql server 5.7 버전을 설치한다.
•
docker 명령으로 mysql 컨테이너를 실행한다.
•
docker 명령으로 mysql 컨테이너에 bash로 접속한다.
•
셀 환경변수와 locale 설정을 하고, mysql config를 latin1에서 utf8로 변경한다.
•
Database 이름을 정하고 Database를 생성한다.
•
DB에 프로그램에서 연결할 User를 정하고 생성한다. 접속 권한을 설정한다.
3. 설치 과정
가. 도커설치
•
공식 웹사이트에서 desktop version 다운로드 및 설치
•
정상 설치 확인 명령어: docker --version
가-1. Ubuntu 도커 설치
•
Ubuntu 20.04 LTS 기준
•
필요한 패키지 설치
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
Shell
복사
•
docker offical GPG 키 등록: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
•
stable repository 설정: echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
•
Docker Engine 설치:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
나. mysql server 5.7 버전 이미지 다운로드
•
설치 명령어: docker pull mysql:5.7
•
m1 arm 프로세서 기반 OS의 설치 및 실행 명령: docker run --rm --platform linux/amd64 -it mysql:5.7
•
버전을 명시하지 않으면 자동으로 최신버전을 설치함
•
이미지 정상 다운로드 확인 명령어: docker images
다. mysql 컨테이너 실행
•
컨테이너 실행 및 mysql 환경변수 변경 명령어 포함
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=password --name mysql_docker_test1 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Shell
복사
→ 컨테이너 실행 명령어: docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=password --name mysql_docker mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
→ 환경변수 변경 명령어: -character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
→ mysql config 설정 변경 latin1 → utf8
→ mysql에서 한글작업할 수 있도록 인코딩 설정 변경
•
(m1 arm) 환경에서 컨테이너 실행 명령
docker run --platform linux/amd64 \
-p 3309:3306 \
--name mysql-django \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=mysql \
-e MYSQL_USER=tester \
-e MYSQL_PASSWORD=password \
-d mysql:5.7
Shell
복사
•
컨테이너 정상 동작 확인 명령어: docker ps -a
→ status에 up이라고 표시되야 정상 동작
→ run 명령어는 컨테이너 create 과 run을 동시 수행
라. mysql 컨테이너에 bash로 접속
•
bash 접속 명령어: docker exec -i -t mysql_docker bash
•
mysql 접속 명령어: mysql -u root -p
•
password: password
마. mysql sever mysql client 정상 통신 확인
•
mysql workbench에서 mysql server로 test connection 시도
→ 포트 맵핑 상태 점검
바. mysql User 생성 및 권한 부여
mysql> CREATE USER 'tester'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tester'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
출처: https://jang8584.tistory.com/267 [개발자의 길]
SQL
복사
•
생성한 User로 server 접속
→ 포트맵핑을 3309:3306로 했기 때문에 아래 스크린샷처럼 포트번호를 3309로 지정해야 함
사. Database 생성
CREATE SCHEMA `farmsplan4`;
JavaScript
복사
4. mysql client library 설치
•
JDBC 활용하여 java mysql-server 연동
package MJ.JavaBasic.pc_manager;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnector {
public static void main(String args[]) {
Connection con = null;
String server = "127.0.0.1:3309"; // MySQL 서버 주소
String database = ""; // MySQL DATABASE 이름
String user_name = "MJ"; // MySQL 서버 아이디
String password = "password"; // MySQL 서버 비밀번호
// 1.드라이버 로딩
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.err.println(" !! <JDBC 오류> Driver load 오류: " + e.getMessage());
e.printStackTrace();
}
// 2.연결
try {
con = (Connection) DriverManager.getConnection("jdbc:mysql://" + server + "/" + database + "?useSSL=false", user_name, password);
System.out.println("정상적으로 연결되었습니다.");
} catch (SQLException e) {
System.err.println("con 오류:" + e.getMessage());
e.printStackTrace();
}
// 3.해제
try {
if (con != null)
con.close();
} catch (SQLException ignored) {
}
}
}
SQL
복사
5. 에러 해결
가. mysql sever mysql client test connection 실패
•
현상
•
원인
•
문제원인 해결
•
결과
Reference
•
User 생성, https://jang8584.tistory.com/267
•
MySQL Connector 세팅, https://whitepaek.tistory.com/18
•
JDBC 활용(MySQL), https://victorydntmd.tistory.com/145
•
우분투 도커 설치, https://shanepark.tistory.com/237