데이터베이스

[M1 Mac] docker 에 mysql, 로컬에 MariaDB MySQLWorkbench, DBeaver 연결하기

sh1mj1 2023. 8. 19. 20:56

 

 

MySQL

90년대 중반에 개발된 MySQL 은 최초의 오픈 DB중 하나이며 가장 널리 사용되고 있습니다.

역사가 깊은 만큼 성능과 신뢰성 등에서 꾸준히 개선되어 왔습니다. 또한 MySQL은 오픈 소스이며, 다중 사용자와 다중 스레드를 지원하고 C언어, C++, JAVA, PHP 등 여러 프로그래밍 언어를 위한 다양한 API를 제공합니다.

 

MySQL은 유닉스, 리눅스, 윈도우 등 다양한 운영체제에서 사용할 수 있지만  상업적으로 사용할 때는 상업용 라이센스를 구입해야만 합니다.

 

MariaDB

2010년 MySQL의 썬마이크로시스템즈이 오라클에 합병되면서 많은 MySQL 개발자들은 썬마이크로시스템즈을 떠나며 본인만의 프로젝트를 진행하게 됩니다. 이 중 MySQL의 창시자인 몬티 와이드니어가 만든 프로젝트가 바로 MariaDB 입니다.

 

MariaDB는 MySQL 데이터베이스 시스템을 기반으로 fork한 서비스로 MySQL의 개선된 버전이기 때문에. 그래서 MariaDB와 MySQL의 호환성은 매우 높으며  MariaDB 는 MySQL에서 찾을 수 없는 수많은 내장된 강력한 기능과 많은 유용성, 보안 및 성능 개선사항을 포함합니다.

 

MySQL vsMariaDB

MariaDB는 MySQL기반으로 만들어졌기 때문에 쿼리를 비롯한 전반적인 사용법은 MySQL과 유사합니다.

비슷한 사용법 외에도 MariaDB는 MySQL 대비 더 좋은 장점이 있습니다. (2015년 현 AWS개발자가 MariaDB를 사용해야 할 10가지 이유)

  1. MariaDB 개발이 좀 더 개방적이고 활발한 커뮤니티를 지님
  2. 빠르고 투명한 보안패치 릴리즈
  3. 다양한 기능
  4. 다양한 스토리지 엔진
  5. 더 나은 성능
  6. Galera 액티브-액티브 마스터 클러스터링
  7. 오라클 관리하의 불확실성
  8. 계속 상승하는 MariaDB의 유명세
  9. 호환성과 쉬운 마이그레이션
  10. 15년 이후에는 마이그레이션이 어려울 수 있으니 지금 마이그레이션 하자!

여러 이유로 MySQL 보다 MariaDB 을 사용하는 것이 더 좋아 보이지만 SQLD 자격증 시험 공부 겸 데이터베이스를 공부하려고 보고 있는 책은 'MySQL로 배우는 데이터베이스개론과 실습' 이어서 MySQL 과 MySQLWorkbench 로 설명, 실습을 하기 때문에 어떻게 할지 고민하다가...

docker 에 MySQL 을 설치하고 로컬에는 MariaDB 을 설치해 둔 후에 로컬에 MySQLWorkbench 을 docker 의 MySQL 과 연결시키고, 로컬에 DBeaver 도 설치해서 MariaDB 을 연결시키기로 했습니다.

 

M1(Silicon) Mac 로컬에 mariaDB 설치

Silicon Mac MariaDB 공식 설치 가이드

https://two-track.tistory.com/21

 

MariaDB 설치 (Silicon Macs/M1)

Homebrew 설치 후에는 MariaDB Server 는 다음과 같이 설치 가능합니다. brew install mariadb 설치 후에는 다음으로 MariaDB Server를 시작합니다.: mysql.server start MariaDB Server 자동 시작하려면 다음과 같이 Homebrew

two-track.tistory.com

 

 

homebrew 설치 후 터미널에서 아래 명령어로 설치합니다.

brew install mariadb

MariaDB Server 시작

mysql.server start

MariaDB Server 자동 시작하려면 다음과 같이 Homebrew 서비스 기능을 이용할 수 있습니다. (이 서비스 기능은 launchd 의 launchctl 유틸리티를 이용합니다) :

brew services start mariadb

MariaDB 가 실행되고 있는지 확인

brew services list

 

MariaDB root 계정 설정

sudo mariadb-secure-installation

처음 Password: 에서는 맥북의 비밀번호를 입력하면 됩니다.

처음 설치했을 때는 그냥 Enter 을 누릅니다.

 

unix_socket 으로 인증할 것인지 선택하는 부분입니다. n 을 해줍니다.

 

비밀번호를 변경할 건지 선택합니다. 저는 변경했습니다.

비밀번호를 입력하고 비밀번호 확인을 위해 한번더 입력합니다.

 

MariaDB 설치 시에 필요했던 익명 유저를 삭제할지 물어보네요. Y

원격 로그인을 막을지 물어봅니다. 저는 나중에 필요할 것 같아 n 했습니다.

설치 시 필요했떤 테스트 데이터베이스를 삭제할지 물어봅니다. Y

마지막으로 권한 테이블을 다시 로드하면 지금까지 설정한 것이 적용됩니다. Y

 

이제 기본적인 설정은 끝났습니다. 아래 명령어를 통해 확인해봅시다.

mysql -u root -p

위에서 설정한 비밀번호를 입력해야 합니다.

show databases;

'

여기 보이는 데이터베이스들은 지금은 몰라도 되는 복잡한 것들입니다.

information_schema
DB의 메타데이터를 보관하는 스키마다.

 

mysql
시스템 데이터베이스로 mysql 서버가 운영될 때 필요한 정보를 가지고 있다.

performance_schema
MySQL Server 가 운영중일 때 실행단의 여러 작업들을 모니터링할 때 사용합니다. 

 

sys
MySQL 서버의 유저/호스트/세션/쿼리실행 등 MySQL 서버 실행 중의  을 확인할 수 있습니다

 

 

M1(Silicon) Mac 로컬에 DBeaver 설치

homebrew 로 DBeaver 설치

brew install --cask dbeaver-community

DBeaver app 실행

플러그 버튼 클릭

이후에 연결 시도하면 jdbc  설치하라고 뜹니다. 이것을 설치하면 제대로 연결됩니다.

스크립트 창 열기(단축키는 ctrl + ] ) 버튼을 눌러 스크립트 창을 열고  명령어를 실행했을 때 제대로 실행되는지 테스트 해봅시다. (실행 단축키는 (ctrl + Enter) )

 

이렇게 로컬에 MariaDB 와 DBeaver 을 설치 완료했습니다.

 

Docker 에 MySQL 설치

먼저 아래 링크에서 Silicon 맥(M1, M2) 전용 도커를 다운로드 받습니다.

https://docs.docker.com/desktop/install/mac-install/

 

Install Docker Desktop on Mac

 

docs.docker.com

오른쪽 Docker Desktop for Mac with Apple silicon 입니다.

 

설치하고 실행하면 아래 화면이 뜰 것입니다. (처음 설치하면 당연히 Container 가 아무것도 없을 것입니다.)

 

docker-compose.yml 생성

그리고 docker-compose.yml 파일을 생성하고 안에 코드를 아래와 같이 작성해줍니다.

도커 컴포즈는 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구이며 YAML 파일을 사용해서 앱의 서비스를 구성하는 것입니다.

 

version: '3' # 파일 규격 번호
services:
  local-db:
    platform: linux/x86_64    # 추가된 라인 실리콘 맥에서만 추가
    image: library/mysql:8.0.23
    container_name: local-db
    restart: always
    command: # 명령어 실행 한글 깨짐 방지
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    ports:
      - 13306:3306 # 호스트 : 컨테이너
    environment:
      MYSQL_ROOT_PASSWORD: root # 초기비밀번호
      TZ: Asia/Seoul
    volumes:
      - ./db/mysql/data:/var/lib/mysql # 디렉토리 마운트 설정

저는 docker-compose.yml 파일의 경로를 /Users/[사용자 이름]/mysqlDocker 에 저장해두었습니다.

 

  • version : 도커 컴포즈의 스키마 버전. docker 의 버전에 따라 지원되는 버전이 달라짐.
  • services: 컨테이너에 어떤 서비스를 넣을 건지 지정.
  • loacl-db: 서비스의 별칭.
  • image: 도커에서 서비스 운영에 필요한 서버 프로그램, 소스 코드, 라이브러리, 컴파일된 실행 파일을 묶는 형태입니다. 원하는 프로그램을 찾아서 작성해주면 되겠죠.
  • platform: 다른 환경에서는 플랫폼을 명시하지 않아도 되지만 silicon mac 에서는 명시해주어야 합니다. 명시하지 않으면 "no mathcing manifest for linux/arm64/v8 in the manifest list entries " 라는 에러를 뱉습니다
  • restart: docker 가 재시작된 경우에 컨테이너도 재시작 할 건지 옵션.
  • ports: 호스트 환경과 컨테이너 환경 간 통신을 위한 포트 번호
  • volumes: 도커는 기본적으로 각 컨테이너마다 독립적인 저장소를 가지는데 컨테이너 내부 데이터는 컨테이너가 삭제되었을 경우 함께 사라집니다. 따라서 컨테이너 내부에 중요한 데이터를 두면 안됩니다. 그래서 보통 도커 내부에 도커 엔진이 관리하는 볼륨을 생성해서 컨테이너와 마운트하거나 호스트의 디렉토리를 마운트합니다. (관련 내용이 많으므로 일단 이렇게만 알고 넘어갑시다.)

 

컨테이너 생성

이후에 docker-compose.yml 파일이 있는 경로에서 아래 명령어를 실행합니다.  도커 컨테이너를 생성합니다.

docker-compose up -d

도커 컨테이너가 생성되어 running 상태가 됩니다.

 

MySQL 접속

도커 프로세스(컨테이너 목록)을 확인할 수 있습니다.

docker ps -a

 

docker-compose.yml 에서 작성했던 이름 local-db 라는 이름의 컨테이너가 보이네요.

 

local-db 의 bash 쉘에 접속합니다.

docker exec -it local-db bash

만약 visual studio code 에 도커 extension 을 설치하면 더 쉽게 local-db 컨테이너 bash 쉘을 실행할 수 있습니다.

이렇게 Attach Shell 만 누르면 visual studio code 의 bash 쉘에 접속됩니다.

 

MySQL 을 실행합니다.

mysql -u root -p

비밀번호를 입력하면 위처럼 mysql 을 실행할 수 있습니다.

 

이렇게 docker 에 MySQL 을 설치했습니다.

 

MySQLWorkbench 설치, 도커에 연결

이제 도커에 있는 MySQL 을 로컬의 MySQLWorkbench 와 연결해줍시다.

 

https://dev.mysql.com/downloads/workbench/https://dev.mysql.com/downloads/workbench/

위 링크에서 MySQLWorkbench 을 설치해줍니다.

 

그리고 도커에 연결해 주어야 합니다. 아래 + 버튼을 눌러줍니다.

그리고 위 그림처럼 작성해 준 후에 OK 버튼을 누립니다. 무언가 경고문이 뜨면 넘어가다 보면 비밀번호를 입력하라는 창에서 docker-compose.yml 에 넣어준 비밀번호 root 을 입력해주면 됩니다. 그러면 아래처럼 창이 뜰 것입니다.

 

여러 sql 문을 넣어주어서 테스트를 해보세요

 

이렇게 하면 모두 끝입니다. 도커 컨테이너를 중지시키고 나중에 다시 사용할 때는 똑같이 도커 컨테이너를 실행시킨 후에 사용하면 됩니다. 도커 컨테이너를 내려도 데이터는 날아가지 않습니다.