Post

(mysql) 초기 설정 및 계정, DB

1
2
3
sudo service mysql start
sudo mysql 또는 mysql -u root [-p] [db\_name]

ERROR 1045 (28000): Access denied for user 뜨면서 안될 때는 패스워드를 설정해준다.

1
2
mysqladmin -u root -p password

SHOW

자주 쓰는 SHOW 명령어

1
2
3
4
5
help show;
SHOW DATABASES;
SHOW TABLES;
SHOW FIELDS FROM tbl\_name;    -- Type | Null | Key | Default | Extra

SET PASSWORD
1
2
SET PASSWORD FOR user@host = PASSWORD('pw');

root@localhost의 패스워드부터 설정한다. user@host형태로 지정하기 때문에같은 user name이어도 어디에서 접근하느냐에 따라 패스워드를 다르게 줄 수 있다.

my.cnf 파일에 password 항목을 추가해놓으면 이 pw와 같은 pw를 가진 계정일 경우 패스워드 입력 없이 로그인 가능하다.

1
2
3
4
5
6
[client]
password         = pw
port             = 3306
socket           = ".../mysql.sock"
...

DB 생성 / 삭제

하나의 쿼리로 작성해야 한다.

1
2
3
CREATE DATABASE db\_name
CHARACTER SET utf8 COLLATE utf8\_general\_ci;

* Collation은 특정 문자 셋으로 저장된 값들을 비교, 검색, 정렬하기 위한 비교 규칙들의 집합을 의미한다. utf8로 저장되었으니 utf8을 비교하기 위한 Collation을 지정해주어야 한다. * CREATE의 반대는 DROP이다.

CREATE USER

''로 묶어주는 것이 좋다.

1
2
CREATE USER 'user'@'host' IDENTIFIED BY 'pw';

계정 정보는 모두 mysql DB에 저장되므로, 각 DB마다 DB에 속하는 계정을 가지고 있는 것이 아니다. 반대로 계정에 따라 접근할 수 있는 DB가 다르므로 계정에 DB가 속한다고 보는 것이 더 낫다. 각 계정의 DB, 테이블, 컬럼 권한 설정은 GRANT로 한다.

mysql.user

계정 정보는 mysql이라는 DB의 user 테이블에 들어있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SHOW DATABASES;

  

+--------------------+
| Database           |
+--------------------+
| information\_schema |
| c9                 |
| mysql              |
| performance\_schema |
| phpmyadmin         |
+--------------------+

따라서 계정을 추가하고 싶다면 여기에 INSERT하는 방법도 있다.

1
2
3
4
5
6
7
8
9
10
SELECT host, user, password FROM mysql.user;

  

+------------------+--------------+--------------------------------------+
| user             | host         | password                             |
+------------------+--------------+--------------------------------------+
| umbum            | %            |                                      |
...

처음 접속하면 OS 계정 이름으로 password 없이 어디서든 접근할 수 있는( % ) 계정이 만들어져 있다.

익명 사용자 삭제

실수로 root를 삭제하면 재설치해야하니 반드시 root 패스워드를 설정한 다음에 진행한다.

1
2
3
use mysql;
DELETE FROM user WHERE password = '';

GRANT
1
2
3
GRANT all privileges ON db\_name.\* TO user@host;
flush privileges;

This post is licensed under CC BY 4.0 by the author.