docker로 mySQL 올리는 방법

Joshua·2024년 10월 7일
1

DB

목록 보기
1/3
post-thumbnail

와 이거 어디서부터 정리해야하지 진짜 막막하다

근데 우짜 해야지
끄응

때는 바야흐로 벌써 인턴 한 달 차 !
크롤링이 끝난 후 AWS에 인스턴스를 올려 코드 작업하고 있었는데
세상에 회사 내부 DB를 사용할 수 없는 것이었다 ㅠㅠ

그래서 나온 방법이 도커로 mySQL을 올려서 사용하는 법
그동안 효자 디비버🦦로만 하다가 눈에 보이지 않는 환경을 쓰려고 하니 머리가 좀 아팠다😥

하지만 열심히 해봐야지, 일은 해야지😎 !!


1. docker 설치

먼저 나는 WSL 환경에서 작업했다.

sudo apt update -- 패키지 목록을 업데이트 (사용 가능 최신 버전 확인)
sudo apt install -y docker.io -- docker.io 패키지 설치, -y 모든 질문에 자동으로 "예"로 답

sudo systemctl start docker -- Docker 서비스 시작
sudo usermod -aG docker $USER -- 현재 사용자를 Docker 그룹에 추가해 sudo 없이 Docker 명령어 실행


2. SQL 설치

docker pull mysql/mysql-server:latest -- 최신 버전 MySQL 이미지를 Docker Hub에서 다운로드

docker run --name crawling -e MYSQL_ROOT_PASSWORD=1111 -d -p 3306:3306 mysql/mysql-server:latest

  • name crawling: 컨테이너 이름
  • e MYSQL_ROOT_PASSWORD=1111: root 비밀번호 1111 설정
  • d: 컨테이너 백그라운드 실행
  • p 3306:3306: 호스트 3306 포트-> 컨테이너 3306 포트에 연결

docker ps 입력해서 확인!

이렇게 뜨면 된건데, 이상하게 자꾸 연결이 안되는거다.
그래서 확인해보니 pc 포트가 막혀 있었음 ^^^ 이게 나라냐

결국 컨테이너 지우고 ^^ 다시해

docker stop crawling
docker rm crawling -- 컨테이너 삭제

docker run --name crawling -e MYSQL_ROOT_PASSWORD=1111 -d -p 3334:3306 mysql/mysql-server:latest -- 다시 빌드하기

다행히(?) 3334 포트는 열려 있어서 3306으로 포워딩 시켰다

⚡mysql 한글 검색이 안되던 문제를 해결한 방법 중 하나가
docker run --name crawling -e MYSQL_ROOT_PASSWORD=1111 -d -p 3334:3306 mysql/mysql-server:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci docker를 run할 때 utf-8을 직접 설정해 준 것이다. 참고 !

이건 그냥 참고용
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' crawling -- 도커 ip 주소 확인

import pymysql

# 데이터베이스 연결
connection = pymysql.connect(
    host='localhost', # 내부에서 사용중이어서
    user='root',
    password='1111',
    database='crawling',
    charset='utf8mb4',
    port=3334
)

python에서 이런식으로 코드를 작성하면 연결된다


3. dump 파일로 SQL에 삽입하기

기존 DB의 데이터를 백업 파일(예: .sql 파일)로 준비해야 한다 !

docker cp /mnt/c/202410071345.sql crawling:/tmp/ -- .sql 파일을 Docker 컨테이너 crawling의 /tmp/ 디렉토리로 복사

  • docker cp -- 호스트 - 컨테이너 간 파일 복사
  • /mnt/c/202410071345.sql -- 복사할 파일의 경로
  • crawling:/tmp/ -- 파일이 복사될 컨테이너와 그 안의 경로

나의 경우는 "C:\202410071345.sql"여기에 파일이 있었기 때문에 쉽게 할 수 있었다.

docker exec -it crawling bash -- 컨테이너 내부 접속
docker exec -it -e LC_ALL=C.UTF-8 crawling bash -- 컨테이너 내부 접속 시 한글 사용 가능하게 만드는 명령어 !!!!!!!!!!!!!✨
mysql -u root -p1111 -- sql 접속


✨ 지금까지 bash를 접속하면 한글이 입력 안되고 한글자만 보이는 현상이 있었는데 이 명령어를 입력해서 접속하니까 한글 입력이 잘 되더라 ㅠㅠ 와 만세

이렇게 쓰여지던게

잘 되었당 ^-^

CREATE DATABASE crawling; -- 데이터베이스 생성
USE crawling; -- 데이터베이스 사용
CREATE TABLE -- 테이블 생성

CREATE TABLE test (
    column1 datatype,
    column2 datatype,
    ...
);

이런식을 테이블을 생성해주면 된다

SOURCE /tmp/202410071345.sql; -- sql 삽입

그리고 나서야 드디어 ! 데이터를 넣을 수 있었다

쌓여가는 쿼리들. vㅔ리 굿

DESCRIBE <테이블명>; -- 테이블에 대한 정보 확인

여기에서 쿼리문을 날리면 데이터들을 확인할 수 있다

mysql이나 bash는 모두 exit을 입력하면 빠져나올 수 있다.


4. 사용자 권한 주기

외부에서 접속하기 위해 사용자 권한을 부여해준다.
나는 그냥 기본 값으로 부여해줬음

CREATE USER '사용자이름'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; -- 사용자에게 모든 DB, 테이블 접근 권한 허용
FLUSH PRIVILEGES; -- 상태 바로 반영


다양한 오류들 경험해보기 ^^^

  • RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods??
    요 이상한 에러는
    ALTER USER 'shua'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; 이걸로 해결할 수 있다

  • pymysql.err.OperationalError: (1049, "Unknown database 'crawling'")
    요 에러는 내가 데이터베이스를 안 만들어서 그런다
    (CREATE DATABASE crawling)

  • pymysql.err.OperationalError: (1044, "Access denied for user 'root'@'%' to database 'crawling'")
    요 에러는 모든 db, 테이블 접근 권한을 안줘서 그렇다
    (GRANT ALL PRIVILEGES ON . TO 'root'@'%';)


5. (10.8)😍 mysql 한글 검색 해결했다 !!!!!!!!!!!!!!!!

1) docker run --name crawling -e MYSQL_ROOT_PASSWORD=1111 -d -p 3334:3306 mysql/mysql-server:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci -- docker 빌드 시 MySQL 서버에 직접 utf-8 설정하기

2) docker exec -it -e LC_ALL=C.UTF-8 crawling bash -- 한글 입력 가능한 상태로 bash 접속하기

진짜 엄청 고생했는데 ㅠㅠㅠㅠ
답을 찾아서 다행이다 진짜 한시름 놓았다 ㅠㅠㅠㅠㅠㅠ


5-1. (10.7) 해결하지 못한 문제 ㅠㅠ

왜 안되는건진 모르겠지만, 한글로 검색이 안된다...
한글 쿼리문 입력도 안되고 미치겠음!!!!!!
포트 포워딩도 안돼서 엄청 고생했는데............
dump 파일도 utf-8로 하고, character_set%도 utf8mb4 변경했으나 대실패.... 이유를 알 수 없다

이 문제는 차차 해결해야겠다 ㅠㅠ

오늘 하루 요약 :


모든 문제는 결국 해결 되게 되어 있다
정말 만만세다 만만세 ㅠㅠ!!!!

profile
🐥삐약이 개발자🐤

0개의 댓글

관련 채용 정보