MySQL과 MariaDB: 설치와 첫 데이터베이스
VDS에 데이터베이스 서버를 설치하고, 안전하게 초기 설정하고, 데이터베이스와 사용자를 만들고, 연결을 확인하는 방법, 흔한 첫 오류를 알아봐요.
업데이트 2026년 8월 23일
MySQL과 호환 분기인 MariaDB는 대부분의 PHP 사이트가 구동되는 기반이에요. 명령과 클라이언트는 동일하고, 차이는 세부 튜닝에서 시작돼요.
설치
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
Oracle의 MySQL이 꼭 필요하다면 공식 저장소에서 mysql-server를 설치하세요. 서비스 이름은 mysql이 돼요.
기본적인 허점은 바로 막아두세요:
mariadb-secure-installation
스크립트가 root 비밀번호 설정, 익명 사용자 제거, 원격 root 로그인 차단, test 데이터베이스 삭제를 물어봐요. 전부 “yes”로 답하세요.
데이터베이스와 사용자
애플리케이션을 root로 실행하지 마세요 — 프로젝트마다 별도 사용자를 만드세요:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
utf8mb4 인코딩은 필수예요. MySQL의 예전 utf8은 문자당 3바이트만 저장해서 이모지와 일부 문자에서 깨져요.
확인:
mariadb -u shop -p shop -e "SELECT 1;"
권한에 대한 자세한 내용은 사용자와 권한을 참고하세요.
초기 설정
설정은 /etc/mysql/mariadb.conf.d/50-server.cnf 또는 /etc/my.cnf.d/에 있어요. 바로 고쳐야 할 최소 항목은 다음과 같아요:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1은 데이터베이스를 로컬에서만 접근 가능하게 해요. 애플리케이션이 같은 머신에 있다면 이대로 두는 게 맞아요. 외부에서 데이터베이스에 접근해야 한다면 아무것도 바꾸기 전에 원격 접근을 읽어보세요.
버퍼 풀 크기는 티어에 따라 선택해요 — 메모리 튜닝을 참고하세요.
수정 후: systemctl restart mariadb.
자주 발생하는 오류
| 증상 | 원인 | 해결 방법 |
|---|---|---|
Access denied for user | 비밀번호가 틀렸거나 사용자 항목이 다른 호스트에 묶여 있음 | SELECT user, host FROM mysql.user;로 확인 |
Can't connect through socket | 서비스가 실행 중이 아님 | systemctl status mariadb, journalctl -u mariadb 확인 |
Too many connections | 애플리케이션이 연결을 닫지 않음 | 애플리케이션 쪽에서 풀링, 그다음 max_connections |
| 글자 깨짐 | 데이터베이스와 연결의 인코딩이 다름 | 전부 utf8mb4로 통일 |
| 재부팅 후 데이터베이스가 시작되지 않음 | 서비스가 부팅 시 시작하도록 설정되지 않음 | systemctl enable mariadb |
머신의 자동 백업은 없어요. 첫 테이블이 정상 동작하면 바로 덤프를 설정하세요 — 데이터베이스 백업. NVMe 디스크는 빠르지만, 하나뿐이에요.