[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
실행 과정:
- 명령 실행
- 현재 패스워드 입력 요청 (처음 설치 시 엔터)
- 새 패스워드가
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
참고 자료
- MySQL 공식 문서: 'MySQL Documentation' 바로가기
- MySQL 권한 관리: 'Privilege System' 바로가기
- MySQL 사용자 관리: 'User Account Management' 바로가기