/엔지니어/데이터베이스/MySQL 기초 — 설치·사용자·권한·기본 쿼리
데이터베이스초급UbuntuDebianCentOSmysqlmariadb데이터베이스

MySQL 기초 — 설치·사용자·권한·기본 쿼리

MySQL 설치, root 보안 설정, 사용자·DB 생성, 권한 부여, 기본 CRUD 쿼리, 설정 파일 튜닝까지 MySQL 운영 기초를 설명합니다.

설치

Bash
# Ubuntu / Debian
sudo apt update && sudo apt install -y mysql-server
sudo systemctl enable --now mysql

# CentOS / RHEL (MariaDB)
sudo yum install -y mariadb-server
sudo systemctl enable --now mariadb

# 버전 확인
mysql --version

초기 보안 설정

Bash
# 보안 마법사 실행 (root 패스워드, 익명 사용자 제거 등)
sudo mysql_secure_installation

# root 접속 (Ubuntu — 소켓 인증)
sudo mysql -u root

# root 접속 (패스워드 인증)
mysql -u root -p

사용자 · 데이터베이스 생성

SQL
-- 데이터베이스 생성
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 사용자 생성
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPass123!';  -- 원격 허용

-- 권한 부여
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'appuser'@'%';

-- 적용
FLUSH PRIVILEGES;

-- 사용자·권한 확인
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'appuser'@'localhost';

-- 권한 제거 / 사용자 삭제
REVOKE ALL PRIVILEGES ON myapp.* FROM 'appuser'@'localhost';
DROP USER 'appuser'@'localhost';

기본 관리 명령

SQL
-- DB 목록
SHOW DATABASES;

-- DB 선택
USE myapp;

-- 테이블 목록
SHOW TABLES;

-- 테이블 구조
DESCRIBE users;
SHOW CREATE TABLE users;

-- 프로세스 목록 (실행 중인 쿼리)
SHOW PROCESSLIST;

-- 슬로우 쿼리 확인
SHOW STATUS LIKE 'Slow_queries';
SHOW VARIABLES LIKE 'slow_query%';

테이블 생성 · CRUD

SQL
CREATE TABLE users (
  id         INT AUTO_INCREMENT PRIMARY KEY,
  name       VARCHAR(100) NOT NULL,
  email      VARCHAR(255) NOT NULL UNIQUE,
  status     ENUM('active','inactive') DEFAULT 'active',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_email (email),
  INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- INSERT
INSERT INTO users (name, email) VALUES ('Alice', '[email protected]');
INSERT INTO users (name, email) VALUES
  ('Bob', '[email protected]'),
  ('Carol', '[email protected]');

-- SELECT
SELECT * FROM users WHERE status = 'active' ORDER BY created_at DESC LIMIT 10;
SELECT u.name, COUNT(o.id) AS orders
FROM users u LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id HAVING orders > 0;

-- UPDATE
UPDATE users SET status = 'inactive' WHERE id = 2;

-- DELETE
DELETE FROM users WHERE status = 'inactive' AND created_at < NOW() - INTERVAL 30 DAY;

설정 파일 튜닝 (/etc/mysql/mysql.conf.d/mysqld.cnf)

INI
[mysqld]
# 기본 설정
character-set-server = utf8mb4
collation-server     = utf8mb4_unicode_ci

# 연결
max_connections      = 200
connect_timeout      = 10

# InnoDB 버퍼 풀 (총 메모리의 50~70%)
innodb_buffer_pool_size = 1G

# 슬로우 쿼리 로그
slow_query_log       = 1
slow_query_log_file  = /var/log/mysql/slow.log
long_query_time      = 1      # 1초 이상

# 바이너리 로그 (복제·PITR용)
log_bin              = /var/log/mysql/mysql-bin
expire_logs_days     = 7
Bash
# 설정 적용
sudo systemctl restart mysql

# 설정 값 확인
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
#mysql#mariadb#데이터베이스#sql#설치#권한
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서MySQL 공식 매뉴얼

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.