로딩 중이에요... 🐣
7. MySQL 서버 설치 | ✅ 저자: 이유정(박사)
- MySQL 서버 설치 & 기초 설정 WSL(Ubuntu)
sudo apt update
sudo apt install -y mysql-server mysql-client
macOS (Homebrew)
# Homebrew 업데이트
brew update
# MySQL 설치
brew install mysql
# 부팅 시 자동 시작 설정 (선택)
brew services start mysql
MySQL 서비스 시작 WSL(Ubuntu)
sudo service mysql start
macOS
# 실행 중인지 확인
brew services list
# 시작
brew services start mysql
- 초기 보안 설정 실행: 명령어 같음
sudo mysql_secure_installation
- 비밀번호 복잡도 정책 선택
– 비밀번호의 최소 강도(정책)를 정하는 단계입니다.
– 0: 검증 안 함, 1: 보통, 2: 강력1
- Change the root password? [Y/n]
y
– 루트(root) 계정의 비밀번호를 변경하시겠습니까? - Remove anonymous users? [Y/n]
y
– 익명(anonymous) 사용자를 제거하시겠습니까?
(비밀번호 없이 접속 가능한 기본 테스트 계정) - Disallow root login remotely? [Y/n]
y
– 원격(reymote)에서의 root 로그인(접속)을 금지하시겠습니까? - Remove test database and access to it? [Y/n]
y
– test라는 이름의 기본 테스트 데이터베이스와 그 접근 권한을 제거하시겠습니까? - Reload privilege tables now? [Y/n]
y
– 변경된 권한 테이블을 즉시 다시 불러오시겠습니까? (지금 바로 반영)
- 루트 계정 비밀번호 설정
sudo mysql
루트(root) 계정에 비밀번호 설정
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY '원하는StrongPass!123';
FLUSH PRIVILEGES;
(선택) SET GLOBAL validate_password.policy = LOW;
을 먼저 해두면 약한 비밀번호도 통과시킬 수 있습니다.
- Django 전용 DB·사용자 생성
CREATE DATABASE myproject_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'django_user'@'localhost' IDENTIFIED BY 'DjangoUserPass!123';
GRANT ALL PRIVILEGES ON myproject_db.* TO 'django_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
WSL(Ubuntu) 터미널에서 MySQL 설정 파일 열기
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
맨 위에 있는 bind-address
설정을 찾으세요. 기본은 127.0.0.1
일 텐데,
bind-address = 127.0.0.1
# 위의 내용을 아래와 같이 수정한다.
bind-address = 0.0.0.0
# 그리고 Mysql재시작
sudo service mysql restart
# 제대로 바뀌었는지 확인
sudo netstat -tlnp | grep mysqld
# 출력에 `0.0.0.0:3306` 이 보이면 OK.
저장하고 빠져나옴
sudo service mysql restart
sudo netstat -tlnp | grep 3306 # 0.0.0.0:3306 확인
최종 확인 & 환경 변수
mysql -u root -p
SELECT user, host FROM mysql.user;
SHOW DATABASES;
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| django_user | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| restaurant_user | localhost |
| root | localhost |
+------------------+-----------+
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myproject_db |
| mysql |
| performance_schema |
| restaurant_db |
| sys |
+--------------------+
장고에서 .env
파일에 다음 항목 추가:
DB_NAME=restaurant_db
DB_USER=restaurant_user
DB_PASSWORD=DjangoUserPass!123
DB_HOST=127.0.0.1
DB_PORT=3306
터미널에서 django_user
에게 restaurant_db
접근 권한 부여
mysql> 일때 아래와 같이 입력하여 권한 부여한다.
-- 1) restaurant_db 데이터베이스에 대한 모든 권한 부여
GRANT ALL PRIVILEGES ON restaurant_db.* TO 'django_user'@'localhost';
-- 2) 권한 변경 사항 즉시 적용
FLUSH PRIVILEGES;
-- 3) SHOW GRANTS를 통해 실제로 권한이 잘 설정됐는지 확인
SHOW GRANTS FOR 'django_user'@'localhost';
# 아래와 같이 터미널에서 결과 확인
+---------------------------------------------------------------+
| Grants for django_user@localhost |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO `django_user`@`localhost` |
| GRANT ALL PRIVILEGES ON `myproject_db`.* TO `django_user`@`localhost` |
| GRANT ALL PRIVILEGES ON `restaurant_db`.* TO `django_user`@`localhost` |
+---------------------------------------------------------------+
3 rows in set (0.00 sec)
Python-MySQL 드라이버 설치
pip install mysqlclient
만약 mysqlclient
빌드 오류 발생 시
sudo apt install -y default-libmysqlclient-dev build-essential
pip install mysqlclient
Django 설정 변경 (settings.py
)
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": os.environ.get("DB_NAME"),
"USER": os.environ.get("DB_USER"),
"PASSWORD": os.environ.get("DB_PASSWORD"),
"HOST": os.environ.get("DB_HOST"),
"PORT": os.environ.get("DB_PORT"),
"OPTIONS": {
"charset": "utf8mb4",
"init_command": "SET NAMES utf8mb4",
}
}
}
# 테스트 환경에서는 SQLite로 대체
if os.environ.get("TEST"):
DATABASES = {
"default": {
"ENGINE":"django.db.backends.sqlite3",
"NAME":BASE_DIR / "db.sqlite3",
}
}
.env
로딩을 위해 python-dotenv
나 django-environ
설치/설정 확인
WSL은 윈도우에서 DBever를 실행합니다. DBever설치 링크https://dbeaver.io/download/
macOS
brew install --cask dbeaver-community
– 설치 후 런치패드나 Spotlight(⌘Space) 에서 “DBeaver” 실행
– Connection 설정(MySQL: localhost, 3306, myproject_db, django_user 등) → Test → Finish
macOS
open -a DBeaver &
앱 경로 직접 지정
open /Applications/DBeaver.app &
CLI 런처 스크립트 만들어두기 (선택)
#!/usr/bin/env bash
open -a DBeaver
chmod +x /usr/local/bin/dbeaver
이렇게 해두면 WSL처럼 dbeaver &
로 쓰실 수도 있습니다.
설치하기
DBeaver와 MySQL과 연결
왼쪽에서 restaurant_db
→ 오른쪽 클릭 → Edit Connection...
터미널에서 DBeaver 실행 WSL(Ubuntu)
# MySQL 시작
sudo service mysql start
# 상태 확인
sudo service mysql status
# MySQL 중지
sudo service mysql stop
MYSOL과 연결하기
상단 탭에서 Driver Properties
클릭
필터에 allowPublicKeyRetrieval
검색
- Key:
allowPublicKeyRetrieval
- Value:
true
useSSL = false
설정 추가
전체 테이블 다이어그램 보기:
한글로 인터페이스를 변경하기