MySQL 자주 사용하는 명령어 모음

Yuchan Han·2026년 4월 7일

MySQL 자주 사용하는 명령어 모음

1. MySQL Client 설치

Amazon Linux 2023 (CloudShell 포함)

💡 CloudShell은 MySQL client가 사전 설치되어 있습니다! 아래는 재설치나 업데이트가 필요할 때만 참고하세요.

Amazon Linux 2023에서 MySQL 명령줄 클라이언트를 설치하려면:

# Amazon Linux 2023: dnf 사용
sudo dnf install mariadb105

# 버전 확인
mysql --version

출력 예시:

$ mysql --version
mariadb  Ver 15.1 Distrib 10.5.x-MariaDB, for Linux (x86_64) using readline 5.1

Amazon Linux 2

Amazon Linux 2에서 MySQL 명령줄 클라이언트를 설치하려면:

# Amazon Linux 2: yum 사용
sudo yum install mariadb

# 버전 확인
mysql --version

DEB 기반 Linux (Ubuntu, Debian)

대부분의 DEB 기반 Linux 배포판에 MySQL 명령줄 클라이언트를 설치하려면:

sudo apt-get install mariadb-client

# 버전 확인
mysql --version

CloudShell 팁

  • CloudShell 환경은 기본으로 AWS CLI, mysql/mariadb 등 개발 도구가 미리 설치되어 있습니다
  • 저장 공간: 1GB (세션 종료 시 /home 제외 삭제)
  • 다시 사용할 파일은 S3에 백업하세요

MySQL 클라이언트 정보 확인

# 설치된 경로 확인
which mysql

# 상세 문서 보기
man mysql

주의: 대부분의 Linux 배포에는 Oracle MySQL 클라이언트 대신 MariaDB 클라이언트가 포함됩니다. MariaDB는 MySQL과 호환되므로 동일하게 사용 가능합니다.


2. RDS 접속

RDS 엔드포인트 확인

먼저 RDS 인스턴스의 엔드포인트를 확인합니다:

# AWS CLI로 RDS 엔드포인트 조회
aws rds describe-db-instances --db-instance-identifier your-db-name \
  --query 'DBInstances[0].Endpoint' --output text

# 출력 예시
mydb.c12345abcde.ap-northeast-2.rds.amazonaws.com:3306

또는 AWS Management Console → RDS → 데이터베이스 → 엔드포인트 확인

RDS에 접속

# 기본 접속 (패스워드는 프롬프트에서 입력)
mysql -h RDS_ENDPOINT -u admin -p database_name

# 예시
mysql -h mydb.c12345.ap-northeast-2.rds.amazonaws.com -u admin -p myapp_db

# 포트를 명시하는 경우 (기본값: 3306)
mysql -h mydb.c12345.ap-northeast-2.rds.amazonaws.com -u admin -p -P 3306 myapp_db

환경변수로 저장해서 사용

# 환경변수 설정
export RDS_ENDPOINT="mydb.c12345.ap-northeast-2.rds.amazonaws.com"
export RDS_USER="admin"
export RDS_DATABASE="myapp_db"

# 환경변수로 접속
mysql -h $RDS_ENDPOINT -u $RDS_USER -p $RDS_DATABASE

보안 그룹 확인 필수

RDS 접속이 안 될 경우 보안 그룹 확인:

# RDS 보안 그룹 조회
aws rds describe-db-instances --db-instance-identifier your-db-name \
  --query 'DBInstances[0].VpcSecurityGroups' --output table

# 보안 그룹 인바운드 규칙 확인
aws ec2 describe-security-groups --group-ids sg-xxxxx \
  --query 'SecurityGroups[0].IpPermissions' --output table

⚠️ CloudShell에서 RDS 접속 조건:
1. RDS가 퍼블릭 액세스로 설정되어 있거나
2. CloudShell과 RDS가 같은 VPC에 있고 보안 그룹 규칙이 허용되어야 함


3. 기본 명령어

💡 중요: MySQL 프롬프트(mysql>)에서는 모든 명령어 끝에 ; (세미콜론)을 붙여야 합니다.

접속/종료

-- MySQL 종료
exit;
-- 또는
quit;

4. 데이터베이스 조회 & 관리

데이터베이스 목록 조회

-- 현재 존재하는 모든 데이터베이스 조회
SHOW DATABASES;

출력 예시:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| testdb             |
+--------------------+

데이터베이스 생성

-- 기본 생성
CREATE DATABASE database_name;

-- UTF-8 문자열 저장 가능하게 생성
CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 이모지까지 지원 (utf8mb4 권장)
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

데이터베이스 선택

-- testdb 데이터베이스 선택
USE testdb;

-- 현재 선택된 DB 확인
SELECT DATABASE();

데이터베이스 삭제

-- 경고 없이 삭제 (조심!)
DROP DATABASE database_name;

-- 존재할 경우에만 삭제
DROP DATABASE IF EXISTS database_name;

5. 테이블 조회 & 관리

테이블 목록 조회

-- 현재 DB의 모든 테이블 조회
SHOW TABLES;

-- 다른 DB의 테이블 조회
SHOW TABLES FROM database_name;

테이블 구조 확인

-- 테이블 컬럼 정보 확인
DESC table_name;

-- 또는
DESCRIBE table_name;

-- 더 자세한 정보 (SQL 포함)
SHOW CREATE TABLE table_name;

출력 예시:

+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int      | NO   | PRI | NULL    | auto_increment |
| name  | varchar  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+

테이블 생성

-- 기본 생성
CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    age INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY(id)
);

-- 예: 주문 테이블
CREATE TABLE orders (
    order_id INT NOT NULL AUTO_INCREMENT,
    user_id INT NOT NULL,
    total_price DECIMAL(10, 2),
    status ENUM('pending', 'completed', 'cancelled'),
    PRIMARY KEY(order_id),
    FOREIGN KEY(user_id) REFERENCES users(id)
);

테이블 삭제

-- 테이블 삭제
DROP TABLE table_name;

-- 존재할 경우에만 삭제
DROP TABLE IF EXISTS table_name;

-- 외래키 제약 무시하고 삭제
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE table_name;
SET FOREIGN_KEY_CHECKS = 1;

테이블 컬럼 수정

-- 컬럼 추가
ALTER TABLE table_name ADD COLUMN new_column VARCHAR(100);

-- 컬럼 추가 (특정 위치)
ALTER TABLE table_name ADD COLUMN new_column VARCHAR(100) AFTER existing_column;

-- 컬럼 삭제
ALTER TABLE table_name DROP COLUMN column_name;

-- 컬럼 타입 변경
ALTER TABLE table_name MODIFY COLUMN column_name INT;

-- 컬럼 이름 변경
ALTER TABLE table_name RENAME COLUMN old_name TO new_name;

6. 데이터 조회 (SELECT)

기본 조회

-- 모든 컬럼 조회
SELECT * FROM users;

-- 특정 컬럼만 조회
SELECT name, email FROM users;

-- 조건과 함께 조회
SELECT * FROM users WHERE age > 20;

-- 상위 N개만 조회
SELECT * FROM users LIMIT 10;

-- 정렬 (오름차순)
SELECT * FROM users ORDER BY age ASC;

-- 정렬 (내림차순)
SELECT * FROM users ORDER BY age DESC;

-- 여러 조건
SELECT * FROM users WHERE age > 20 AND status = 'active';
SELECT * FROM users WHERE age > 20 OR city = 'Seoul';

LIKE (패턴 검색)

-- 'Seoul'로 끝나는 데이터
SELECT * FROM users WHERE city LIKE '%Seoul';

-- 'Seoul'로 시작하는 데이터
SELECT * FROM users WHERE city LIKE 'Seoul%';

-- 'Seoul'을 포함하는 데이터
SELECT * FROM users WHERE city LIKE '%Seoul%';

-- 010으로 시작하는 전화번호
SELECT * FROM users WHERE phone LIKE '010%';

집계 함수

-- 데이터 개수
SELECT COUNT(*) FROM users;

-- 평균값
SELECT AVG(age) FROM users;

-- 최댓값
SELECT MAX(age) FROM users;

-- 최솟값
SELECT MIN(age) FROM users;

-- 합계
SELECT SUM(price) FROM orders;

-- 그룹화
SELECT city, COUNT(*) FROM users GROUP BY city;

7. 데이터 삽입 (INSERT)

기본 삽입

-- 모든 컬럼 값 입력
INSERT INTO users (id, name, email, age) VALUES (1, 'John', 'john@example.com', 25);

-- 특정 컬럼만 입력 (id는 AUTO_INCREMENT)
INSERT INTO users (name, email, age) VALUES ('Jane', 'jane@example.com', 30);

-- 여러 행 한 번에 삽입
INSERT INTO users (name, email, age) VALUES 
('Alice', 'alice@example.com', 28),
('Bob', 'bob@example.com', 35),
('Charlie', 'charlie@example.com', 22);

멱등성 (중복 방지)

-- 중복이면 무시
INSERT IGNORE INTO users (id, name, email) VALUES (1, 'John', 'john@example.com');

-- 중복이면 업데이트
INSERT INTO users (id, name, email) VALUES (1, 'John', 'john@example.com')
ON DUPLICATE KEY UPDATE email = VALUES(email);

8. 데이터 수정 (UPDATE)

기본 수정

-- 특정 사용자의 나이 변경
UPDATE users SET age = 26 WHERE id = 1;

-- 여러 컬럼 동시 수정
UPDATE users SET age = 30, status = 'active' WHERE id = 1;

-- 조건으로 수정
UPDATE users SET age = age + 1 WHERE age < 20;

-- 조건 여러 개
UPDATE users SET status = 'inactive' 
WHERE age > 50 AND last_login < '2024-01-01';

9. 데이터 삭제 (DELETE)

기본 삭제

-- 특정 행 삭제
DELETE FROM users WHERE id = 1;

-- 조건으로 삭제
DELETE FROM users WHERE age > 70;

-- 외래키 제약이 있을 때
SET FOREIGN_KEY_CHECKS = 0;
DELETE FROM users WHERE id = 1;
SET FOREIGN_KEY_CHECKS = 1;

TRUNCATE (전체 삭제)

-- 테이블의 모든 데이터 삭제 (DELETE보다 빠름)
TRUNCATE TABLE users;

-- 외래키 있을 때
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE users;
SET FOREIGN_KEY_CHECKS = 1;


11. CloudShell 환경에서의 MySQL 사용

CloudShell에서 RDS 접속

# VPC 내 RDS 접속 (보안 그룹 확인 필수)
mysql -h rds-endpoint.xxxxx.ap-northeast-2.rds.amazonaws.com \
  -u admin -p database_name

# 예시
mysql -h mydb.c12345.ap-northeast-2.rds.amazonaws.com \
  -u admin -p myapp_db

# 포트 명시 (기본 3306)
mysql -h mydb.c12345.ap-northeast-2.rds.amazonaws.com \
  -u admin -p -P 3306 myapp_db

CloudShell에서 자주 쓰는 패턴

1. RDS에서 데이터 조회 및 저장

# 특정 쿼리 결과를 파일로 저장
mysql -h RDS_ENDPOINT -u admin -p database_name \
  -e "SELECT * FROM users LIMIT 10;" > users_backup.txt

# 결과 확인
cat users_backup.txt

2. SQL 파일 실행

# CloudShell 홈디렉토리에 script.sql 파일이 있는 경우
mysql -h RDS_ENDPOINT -u admin -p database_name < script.sql

# 결과를 다시 파일로 저장
mysql -h RDS_ENDPOINT -u admin -p database_name < script.sql > result.log

3. 데이터베이스 백업

# 특정 DB 백업
mysqldump -h RDS_ENDPOINT -u admin -p database_name > backup.sql

# 모든 DB 백업 (시간 오래 걸림)
mysqldump -h RDS_ENDPOINT -u admin -p --all-databases > full_backup.sql

# 특정 테이블만 백업
mysqldump -h RDS_ENDPOINT -u admin -p database_name table_name > table_backup.sql

4. 데이터 복구

# 백업 파일로부터 복구
mysql -h RDS_ENDPOINT -u admin -p database_name < backup.sql

# 진행 상황 확인
mysql -h RDS_ENDPOINT -u admin -p database_name < backup.sql 2>&1 | tail -20

CloudShell에서 RDS IAM 인증으로 접속

# 토큰 생성
TOKEN=$(aws rds generate-db-auth-token \
  --hostname mydb.c12345.ap-northeast-2.rds.amazonaws.com \
  --port 3306 \
  --username lambda_user \
  --region ap-northeast-2)

# 토큰으로 접속
mysql -h mydb.c12345.ap-northeast-2.rds.amazonaws.com \
  -u lambda_user \
  --password="$TOKEN" \
  --ssl-mode=REQUIRED \
  --ssl-ca=/etc/ssl/certs/ca-certificates.crt \
  database_name

⚠️ 주의: RDS IAM 인증 시 SSL 인증서 필요. CloudShell은 기본으로 제공

CloudShell 저장소 팁

# 현재 사용 중인 저장소 확인
df -h

# home 디렉토리 확인
ls -la ~/

# S3로 중요 파일 백업
aws s3 cp backup.sql s3://my-bucket/mysql-backups/backup.sql

# S3에서 다운로드
aws s3 cp s3://my-bucket/mysql-backups/backup.sql ./

12. 일반 유용한 팁

현재 사용자/데이터베이스 확인

-- 현재 사용자
SELECT USER();

-- 현재 데이터베이스
SELECT DATABASE();

-- 현재 시간
SELECT NOW();

테이블 용량 확인

-- 특정 테이블 크기
SELECT 
    TABLE_NAME,
    ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2) AS MB
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'database_name' 
ORDER BY MB DESC;

외부 파일에서 SQL 실행

# 파일 전체 실행
mysql -u root -p database_name < /path/to/script.sql

# 결과를 파일로 저장
mysql -u root -p database_name < /path/to/script.sql > output.txt

SQL 파일 내보내기

# 특정 데이터베이스 백업
mysqldump -u root -p database_name > backup.sql

# 특정 테이블만 백업
mysqldump -u root -p database_name table_name > backup.sql

# 모든 데이터베이스 백업
mysqldump -u root -p --all-databases > all_backup.sql

빠른 참조 테이블

작업명령어
접속mysql -u root -p
DB 목록SHOW DATABASES;
DB 생성CREATE DATABASE db_name;
DB 선택USE db_name;
DB 삭제DROP DATABASE db_name;
테이블 목록SHOW TABLES;
테이블 구조DESC table_name;
데이터 조회SELECT * FROM table_name;
데이터 삽입INSERT INTO table_name VALUES (...);
데이터 수정UPDATE table_name SET col = val WHERE ...;
데이터 삭제DELETE FROM table_name WHERE ...;
종료exit;

참고 블로그

  • MySQL 명령어 기초
  • MySQL 기본 명령어 및 옵션 설명
  • MySQL 생성, 삽입, 조회, 수정, 삭제 패턴
profile
맛있는거먹고싶어요

0개의 댓글