설치
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 = 7Bash
# 설정 적용
sudo systemctl restart mysql
# 설정 값 확인
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서MySQL 공식 매뉴얼 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.