본문으로 건너뛰기

[L] mysql 기본명령어

💡 요약 정리

  • MySQL root 패스워드는 mysqladmin 또는 UPDATE 문으로 설정합니다
  • 데이터베이스 생성/삭제는 CREATE/DROP DATABASE 명령을 사용합니다
  • 사용자 계정 및 권한 관리는 GRANT/REVOKE 명령으로 처리합니다
  • 설정 변경 후에는 FLUSH PRIVILEGES로 권한을 새로고침해야 합니다

MySQL 기본 명령어 중 root 패스워드 변경, 데이터베이스 생성/삭제, 권한 부여/제거에 대한 간략한 매뉴얼입니다.


1. MySQL root 패스워드 설정

① mysqladmin을 이용한 패스워드 설정

MySQL을 처음 설치하면 root 암호가 설정되어 있지 않기 때문에 반드시 설치 후 바로 root 암호를 먼저 설정해주세요.

mysqladmin -u root -p password new-password

실행 과정:

  1. 명령 실행
  2. 현재 패스워드 입력 요청 (처음 설치 시 엔터)
  3. 새 패스워드가 new-password로 설정됨

예시:

[root@cafe24 ~]# mysqladmin -u root -p password 'MyNewP@ssw0rd'
Enter password: [엔터]

# 패스워드 설정 완료

② UPDATE 문을 이용한 패스워드 설정

mysql -u root mysql
mysql> UPDATE user SET password = PASSWORD('new-password') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;

명령 설명:

  • PASSWORD('new-password'): 패스워드를 암호화
  • WHERE user = 'root': root 사용자만 대상
  • FLUSH PRIVILEGES: 권한 테이블 새로고침

2. 데이터베이스 관리

① 데이터베이스 목록 보기

mysql> SHOW DATABASES;

출력 예시:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

② 데이터베이스 생성

mysql> CREATE DATABASE DB명;

예시:

mysql> CREATE DATABASE mywebsite;
Query OK, 1 row affected (0.01 sec)

주의사항:

  • 데이터베이스 이름은 대소문자를 구분합니다 (Linux)
  • 특수문자 사용 지양
  • 언더스코어(_) 사용 권장

③ 데이터베이스 삭제

mysql> DROP DATABASE DB명;

예시:

mysql> DROP DATABASE mywebsite;
Query OK, 0 rows affected (0.05 sec)

⚠️ 경고:

  • 삭제된 데이터베이스는 복구할 수 없습니다
  • 삭제 전 반드시 백업 권장

3. 사용자 계정 생성/삭제

① 사용자 계정 생성

MySQL에서 사용할 Database를 만든 후 사용자를 추가하려면, root로 접속한 후 작업을 진행해야 합니다.

mysql -uroot -p
Enter password: *******
mysql> USE mysql;
mysql> INSERT INTO user VALUES(
    '%', '사용자', PASSWORD('비밀번호'),
    'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'
);

매개변수 설명:

  • '%': 모든 호스트에서 접속 가능
    • 특정 호스트만 허용: 'localhost' 또는 '192.168.1.%'
  • '사용자': 사용자명
  • PASSWORD('비밀번호'): 암호화된 패스워드
  • 이후 'Y' 값들: 각종 권한 (모두 허용)

② 사용자에게 데이터베이스 권한 부여

mysql> INSERT INTO db (
    Host, Db, User,
    Select_priv, Insert_priv, Update_priv, Delete_priv,
    Create_priv, Drop_priv
)
VALUES(
    '%', 'DB명', '사용자',
    'Y', 'Y', 'Y', 'Y', 'Y', 'Y'
);

권한 설명:

  • Select_priv: SELECT 쿼리 실행
  • Insert_priv: INSERT 쿼리 실행
  • Update_priv: UPDATE 쿼리 실행
  • Delete_priv: DELETE 쿼리 실행
  • Create_priv: 테이블 생성
  • Drop_priv: 테이블 삭제

③ 사용자 계정 삭제

mysql> USE mysql;
mysql> DELETE FROM user WHERE User='유저명';
mysql> FLUSH PRIVILEGES;

예시:

mysql> USE mysql;
mysql> DELETE FROM user WHERE User='testuser';
mysql> FLUSH PRIVILEGES;

4. 권한 부여 (GRANT)

① 관리자 권한 부여

mysql> GRANT ALL TO 유저명 IDENTIFIED BY '패스워드' WITH GRANT OPTION;

설명:

  • ALL: 모든 권한
  • WITH GRANT OPTION: 다른 사용자에게 권한 부여 가능

예시:

mysql> GRANT ALL TO admin_user IDENTIFIED BY 'AdminP@ss123' WITH GRANT OPTION;

② 일반 사용자 권한 부여

mysql> GRANT USAGE ON DB명.* TO 유저명 IDENTIFIED BY '패스워드' WITH GRANT OPTION;

예시:

mysql> GRANT USAGE ON mywebsite.* TO web_user IDENTIFIED BY 'WebP@ss456' WITH GRANT OPTION;

USAGE 의미:

  • 로그인만 가능
  • 실제 데이터 접근 권한 없음

③ 필요한 권한만 선택적으로 부여

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, DROP
    -> ON DB명.*
    -> TO 유저명 IDENTIFIED BY '패스워드'
    -> WITH GRANT OPTION;

권한 종류:

  • SELECT: 데이터 조회
  • INSERT: 데이터 삽입
  • UPDATE: 데이터 수정
  • DELETE: 데이터 삭제
  • INDEX: 인덱스 생성/삭제
  • ALTER: 테이블 구조 변경
  • CREATE: 테이블/DB 생성
  • DROP: 테이블/DB 삭제

예시:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE
    -> ON mywebsite.*
    -> TO app_user IDENTIFIED BY 'AppP@ss789';

5. 권한 취소 (REVOKE)

① 모든 권한 취소

mysql> REVOKE ALL PRIVILEGES, GRANT FROM 유저명;

예시:

mysql> REVOKE ALL PRIVILEGES, GRANT FROM old_user;

② 특정 권한만 취소

mysql> REVOKE ALTER, CREATE, DROP
    -> ON DB명.*
    -> FROM 유저명;

예시:

mysql> REVOKE ALTER, CREATE, DROP
    -> ON mywebsite.*
    -> FROM web_user;

③ 데이터베이스 접근 거부

mysql> REVOKE ALL
    -> ON DB명.*
    -> FROM 유저명;

예시:

mysql> REVOKE ALL
    -> ON mywebsite.*
    -> FROM blocked_user;

6. MySQL 재시작 명령어

서버에 root 계정으로 로그인한 후 명령 프롬프트에서 실행합니다.

① 시작

[root@cafe24 /root]# /home/mysql/share/mysql/mysql.server start

또는:

service mysqld start
# 또는
systemctl start mysqld

② 정지

[root@cafe24 /root]# /home/mysql/share/mysql/mysql.server stop

또는:

service mysqld stop
# 또는
systemctl stop mysqld

③ 재시작

[root@cafe24 /root]# /home/mysql/share/mysql/mysql.server restart

또는:

service mysqld restart
# 또는
systemctl restart mysqld

7. 권한 확인

① 현재 사용자 권한 확인

mysql> SHOW GRANTS;

출력 예시:

+---------------------------------------------------+
| Grants for root@localhost                         |
+---------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' |
+---------------------------------------------------+

② 특정 사용자 권한 확인

mysql> SHOW GRANTS FOR '유저명'@'호스트';

예시:

mysql> SHOW GRANTS FOR 'web_user'@'%';

8. 모범 사례

① 강력한 패스워드 사용

권장 패스워드:

  • 최소 12자 이상
  • 대소문자, 숫자, 특수문자 조합
  • 사전에 없는 단어

예시:

MyDB#2025!Secure

② 최소 권한 원칙

사용자에게 필요한 최소한의 권한만 부여합니다.

나쁜 예:

GRANT ALL ON *.* TO app_user;  -- 모든 DB에 모든 권한

좋은 예:

GRANT SELECT, INSERT, UPDATE, DELETE
ON mywebsite.* TO app_user;  -- 특정 DB에 필요한 권한만

③ 호스트 제한

가능하면 접속 호스트를 제한합니다:

-- ❌ 모든 호스트 허용
GRANT ALL ON mydb.* TO user@'%';

-- ✅ 특정 호스트만 허용
GRANT ALL ON mydb.* TO user@'192.168.1.100';
GRANT ALL ON mydb.* TO user@'localhost';

9. 문제 해결

① 권한 변경이 적용되지 않음

원인:

  • FLUSH PRIVILEGES 실행 안 함

해결:

mysql> FLUSH PRIVILEGES;

② root 패스워드를 잊었을 때

해결 방법:

# 1. MySQL 정지
service mysqld stop

# 2. 안전 모드로 시작
mysqld_safe --skip-grant-tables &

# 3. MySQL 접속 (패스워드 없이)
mysql -u root

# 4. 패스워드 변경
mysql> UPDATE mysql.user SET password=PASSWORD('new-password') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

# 5. MySQL 재시작
service mysqld restart

③ 원격 접속이 안 됨

원인:

  • 방화벽 차단
  • bind-address 설정

해결:

# 방화벽 포트 열기
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# my.cnf 확인
vi /etc/my.cnf

# bind-address를 주석 처리하거나 0.0.0.0으로 변경
# bind-address = 0.0.0.0

참고 자료