MySQL 설치 및 실행 가이드
MySQL을 처음 세팅하거나, 새 환경에서 다시 설치해야 할 때 매번 검색하게 되는 내용을 정리했다. OS별 설치 방법부터 Docker로 띄우는 법, 접속 설정까지 다룬다.
설치
Ubuntu/Linux
sudo apt-get update
sudo apt-get install mysql-server
mysql_secure_installation # 보안 설정
systemctl status mysql.service # 실행 상태 확인
sudo systemctl start mysql # MySQL 시작
mysql_secure_installation 은 루트 비밀번호 설정, 익명 사용자 제거, 원격 루트 접속 차단 등 기본적인 보안 항목을 대화형으로 안내해준다. 처음 설치 후 반드시 실행하는 걸 권장한다.
macOS
brew install mysql
mysql.server start
mysql -u root
Homebrew로 설치하면 별도 보안 설정 없이 바로 root 접속이 가능하다. 필요하면 이후 비밀번호를 설정하면 된다.
Docker로 간편하게 실행하기
로컬에서 MySQL을 빠르게 띄우고 싶을 때는 Docker가 가장 편하다. OS에 직접 설치할 필요 없이 컨테이너 하나로 실행과 삭제가 자유롭다.
docker run -d \
--name local-mysql \
-e MYSQL_ROOT_PASSWORD=rootpass \
-e MYSQL_DATABASE=myapp \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
-v mysql-data:/var/lib/mysql 로 Docker 볼륨을 연결해두면 컨테이너를 삭제해도 데이터는 유지된다. 마지막 두 줄은 MySQL 서버의 기본 인코딩을 utf8mb4 로 설정하는 옵션이다.
포트 충돌 해결
로컬에 MySQL이 이미 설치되어 있어서 3306 포트가 사용 중이라면 address already in use 에러가 발생한다. 어떤 프로세스가 포트를 점유하고 있는지 확인하려면 다음 명령어를 사용한다.
sudo lsof -i :3306
Homebrew로 설치한 MySQL이 떠있는 경우라면 이렇게 끄면 된다.
mysql.server stop
또는 PID를 직접 확인해서 종료할 수도 있다.
sudo kill -9 <PID>
기존 프로세스를 끄지 않고 Docker 컨테이너를 함께 쓰고 싶다면, 호스트 포트를 다른 번호로 바꿔주면 된다.
-p 3307:3306
Docker 컨테이너 접속
컨테이너가 실행되면 아래 명령어로 접속할 수 있다.
# 호스트에서 직접 접속 (mysql 클라이언트 필요)
mysql -h 127.0.0.1 -P 3306 -u root -prootpass
# 또는 컨테이너 안에서 접속 (클라이언트 설치 불필요)
docker exec -it local-mysql mysql -u root -prootpass
Docker 컨테이너 관리
컨테이너를 멈추거나 삭제하려면 다음과 같이 한다.
# 중지
docker stop local-mysql
# 중지 + 삭제
docker stop local-mysql && docker rm local-mysql
# 데이터 볼륨까지 완전히 삭제하고 싶을 때
docker volume rm mysql-data
비밀번호 설정
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
초기 비밀번호가 없거나 변경이 필요할 때 사용한다.
접속 및 기본 설정
MySQL 접속
mysql -u username -p
-p 플래그를 붙이면 비밀번호를 대화형으로 입력할 수 있다.
외부 접속 허용 계정 생성
-- 계정 생성
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
-- 모든 권한 부여
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%' WITH GRANT OPTION;
-- 권한 적용
FLUSH PRIVILEGES;
'%' 는 모든 호스트에서 접속을 허용한다는 뜻이다. 운영 환경에서는 특정 IP로 제한하는 게 안전하다.
외부 접속 설정 (Ubuntu)
# 설정 파일 수정
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address = 127.0.0.1 주석 처리 후 재시작
sudo /etc/init.d/mysql restart
기본적으로 MySQL은 로컬 접속만 허용한다. 외부에서 접속하려면 bind-address 설정을 주석 처리하거나 0.0.0.0 으로 변경한 뒤 재시작해야 한다.
MySQL 설치와 실행이 끝났다면, MySQL 완벽 가이드에서 CRUD, 인덱스, 테이블 관리 등 실무에서 자주 쓰는 SQL 문법을 확인할 수 있다.