mysql CLI 에서 MySQL/MariaDB 관리자로서 사용할 수 있는 명령을 요약한다.
create user, grant, drop, delete, remove …
MySqLI CLI Client 로 접속하기 1 mysql [-h서버] -u아이디 -p 데이터베이스명
데이터베이스 스키마
use 명령을 사용하여 사용할 데이터베이스/스키마를 선택
선택된 데이터베이스 안의 테이블 확인
1 2 mysql> SHOW TABLES; mysql> SHOW TABLES LIKE 't%' ; # t로 시작하는 테이블
특정 스키마 혹은 테이블의 생성 쿼리를 출력
1 2 mysql> SHOW CREATE DATABSE SAKILA; mysql> SHOW CREATE TABLE STUDENTS;
데이터베이스의 생성 및 삭제 1 mysql> CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_general_ci;
utf8_general_ci 는 대소문자를 구분하지 않는다.
대소문자를 구분하려면 binary 타입으로 지정. 예) “utf8_bin”
캐릭터셋과 COLLATE 를 생략하면 서버 설치시 지정한 기본 값으로 설정
1 mysql> CREATE DATABASE testdb;
스키마 제거
1 mysql> DROP [SCHEMA]DATABASE testdb;
시스템 환경 확인 서버의 환경 변수
1 2 # 모든 변수 mysql> SHOW VARIABLES;
DBMS 버전
1 2 3 mysql> select @@version ; mysql> SHOW VARIABLES LIKE 'version' ;
1 mysql> SHOW VARIABLES LIKE 'innodb_%' ;
지원하는 문자세트 구성
1 2 3 mysql> SHOW CHARACTER SET ; mysql> SHOW CHARACTER SET LIKE 'utf%' ;
문자세트 확인
1 2 mysql> SHOW VARIABLES LIKE 'c%' ;
지원하는 콜레이션
1 2 3 mysql> SHOW COLLATION ; mysql> SHOW COLLATION WHERE Charset = 'utf8mb4' ;
외부 파일 실행하기 첫 번째는 mysql cli 에 지정하여 실행하는 방법
1 2 3 $ mysql -u dbuser -p testdb < insert.sql Enter password: ****
두 번째 방법을 mysql cli에서 source 명령을 사용
1 mysql> SOURCE C:\Users\USERID\insert.sql;
User & Privileges 사용자 db mysql 스키마의 user 테이블을 사용한다.
SELECT Host,User,plugin,authentication_string FROM mysql.user;
사용자 추가 사용자를 생성시 호스트 주소에 ‘%’, ‘localhost’로 호스트 범위를 지정한다
1 2 3 mysql> CREATE USER 'USERID' @'localhost' IDENTIFIED BY 'password' ; mysql> CREATE USER 'USERID' @'%' IDENTIFIED BY 'password' ; mysql> FLUSH PRIVILEGES;
grant 명령: [권한 부여] 사용자가 특정 자원에 접근하기 위해서 grant 명령 사용.
1 2 3 4 5 6 GRANT ALL PRIVILEGES ON DB이름.테이블이름 TO 아이디@호스트 IDENTIFIED BY '비밀번호' with grant option; - ALL PRIVILEGES : 모든 권한 추가 - SELECT , INSERT , UPDATE , DELETE , ... : 권한을 일부분을 추가 - with grant option : GRANT 를 사용할 수 있는 권한 추가 - Grant 로 주어지는 권한은 여기 [grant : privilege- levels](https:/ / mariadb.com/ kb/ en/ grant / #privilege- levels) 명령에서 찾을 수 있다.
아래는 userid 사용자가 특정 sampledb 에만 모든 권한을 부여하고 있다.
1 2 mysql> GRANT ALL PRIVILEGES ON sampledb.* TO 'USERID' @'localhost' ; mysql> FLUSH PRIVILEGES;
다음 GRANT 명령에서 ALL PRIVILEGES ON *.*
는 모든 권한(ALL PRIVILEGES)을 모든 스카마의 모든 테이블 *.*
에 준다는 의미.
1 2 mysql> GRANT ALL PRIVILEGES ON * .* TO 'USERID' @'localhost' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
WITH GRANT OPTION
의 의미는 다른 사용자에게 자신이 가진 권한을 주거나 회수할 수 있다는 의미.
ALL PRIVILEGES
부분에는 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 등 권한 명칭을 콤마로 분리해서 나열하는 방식으로 특정 권한만을 줄 수도 있다.
[권한 제거] 권한을 없앨때는 REVOKE 명령을 사용한다. 두가지 형식을 사용한다.
1 2 3 REVOKE priv_type ON db.tables FROM user[,user] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
아래 명령으로 ‘localhost’ 에서 접속가능한 ‘testdbuser’ 에게서 모든 권한을 제외한다.
1 mysql> REVOKE ALL PRIVILEGES * .* FROM 'USERID' @'localhost' ;
GRANT 명령과는 달리 REVOKE
명령은 모든 권한을 제거해도 mysql.user 테이블 사용자 정보는 완전히 삭제되지 않는다.
사용자 정보의 완전한 제거를 원한다면 DROP USER 명령을 사용한다.
1 mysql> DROP USER 'USERID' @'localhost' ;
권한 조회 사용자별 권한 확인
1 mysql> SHOW GRANTS FOR 'USERID' @'HOST' ;
접속된 계정 권한 확인
1 mysql> SHOW GRANTS FOR CURRENT_USER ;
실행 프로세스 확인 현재 접속자를 확인하고, lock 이 걸린 프로세스를 죽이거나 하는 작업
1 2 3 4 5 6 7 8 mysql> SHOW PROCESSLIST; + | Id | User | Host | db | Command | Time | State | Info | Progress | + | 1371 | dbkmart | 205.22 .168 .143 :29762 | yourdb | Sleep | 2673 | | NULL | 0.000 | |
프로세스 죽이기(프로세스 아이디는 리스트에 나오는 Id.)
ex: DB 생성해 사용자 추가 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 create database webdb; create user 'webdb' @'192.168.1.%' identified by 'webdb' ;grant all privileges on webdb.* to 'webdb' @'192.168.1.%' ;drop user 'webdb' @'192.168.1.%' ;drop database webdb;
—
grant: privilege-levels : https://mariadb.com/kb/en/grant/#privilege-levels