본문 바로가기
Base/Linux(CentOS)

21. Server (3 - DB Server mariadb)

by 귀멸 2022. 6. 29.

0. DB Server
  - Database server; 데이터베이스를 모아놓은 서버
  - 스마트폰의 개발 및 보급에 다라 인터넷의 활용이 급속도로 늘어나면서 무수히 많은 데이터 생성 
     > 많은 데이터들을 효율적으로 저장하고 관리하기 위해 database 사용
  - CentOS 6버전까지는 mysql이라는 DB server를 무료로 사용했으나
     mysql이 유료화되면서 CentOS 7버전부터 mysql의 마이너 카피인 mariadb 사용

  - 정보
    패키지 : mariadb-*
    데몬 : mariadb
    방화벽 : mysql
    설정파일 : /etc/my.cnf (DB server 동작에 대한 설정)
        > DB Server 내부 mysql이라는 database에서 DB server 내부 설정 제어

 

  - 설치
    yum -y install mariadb-*
    systemctl restart mariadb

  - 접속
    mysql -u <DB 계정> -p [<database 이름>]

    mysql -u root -p mysql

  - 용어
    SQL문 : DB Server에서 사용하는 명령어
    database: table들의 집합체
    table : 실제 데이터가 들어있는 최소 단위, field와 value로 구성
    field : table에 저장되는 데이터들의 종류 (카테고리), column이라고도 부른다
    value : field에 맞춰서 table에 저장되는 데이터

  1. SQL 기본 명령어

    MariaDB [mysql]> system clear;    : clear 역할  == 단축기 ctrl + L
    MariaDB [mysql]> select version(), current_date, current_time;
+---------------------+------------------+-----------------+
| version()            | current_date | current_time |
+---------------------+------------------+-----------------+
| 5.5.68-MariaDB | 2022-06-27   | 11:33:38       |
+---------------------+------------------+-----------------+
    ;로 문장을 마무리해야 실행됨
    중간에 공백에서 엔터로 줄넘김을 하더라도 ;이 나오기 전까지는

    문장이 실행되지 않기 때문에 적절하게 줄바꿈을 하면서 입력 할 수 있다

  * show
    show databases; : 데이터베이스들의 목록 출력
    show tables; : 현재 내가 사용 중인 데이터베이스의 테이블들 목록 출력
       > table중 user 테이블은 db서버 사용자 계정 및 권한을 관리하는 테이블
       > table중 db 테이블은 특정 database의 권한을 지정해 줌

  * create database <db 이름> : db 생성
    create database dbitbank;

  * use <db이름> : 사용하고자 하는 db로 이동

   MariaDB [dbitbank]> create table tbitbank (num int(3), name char(20));
   ()안에 숫자는 3byte라는 뜻 (0~999)  20byte 19글자 
   name type(size)  disk에 저장하는 것 / 다른 프로그래밍 RAM에 데이터를 저장하는 것과 다르다

   MariaDB [dbitbank]> show tables;
+--------------------------+
| Tables_in_dbitbank |
+--------------------------+
| tbitbank                   |
+--------------------------+

    MariaDB [dbitbank]> desc tbitbank; : 테이블 상세보기
+---------+-----------+--------+------+-----------+-------+
| Field    | Type     | Null    | Key | Default  | Extra |
+---------+-----------+--------+------+-----------+-------+
| num    | int(3)      | YES  |         | NULL    |          |
| name  | char(20) | YES  |         | NULL    |          |
+---------+-----------+--------+------+-----------+-------+

    Null - Yes/No : filed에서 null값을 허용하는지 여부
    Key     : PRI(primary key) 중복값을 허용하지 않게 만든다
    Defualt     : 생략하면 NULL 값이 들어간다.

 

  * drop 
    MariaDB [dbitbank]> drop table tbitbank; : table 삭제
    MariaDB [dbitbank]> drop database dbitbank; : database 삭제
     (사용중이어도 삭제가능)

  * select [필드명] from [테이블명]

    MariaDB [mysql]> desc user;
    Host에서 접속하는 User의 비밀번호는 Password다
    user 테이블의 sql문_priv 모두 권한 관련 된 것

    MariaDB [mysql]> select host, user, password from user;
+-------------+------+--------------+
| host         | user | password |
+-------------+------+--------------+
| localhost  | root  |                 |
| server      | root  |                 |
| 127.0.0.1 | root  |                 |
| ::1            | root  |                 |
| localhost  |         |                 |
| server      |         |                 |
+-------------+------+--------------+

  * delete from [테이블명] where [조건]
    MariaDB [mysql]> delete from user where user=' ';

  * update [테이블명] set [field]=[바꿀데이터] where [조건]
    MariaDB [mysql]> update user set password=password('itbank') where user='root';
+-------------+------+------------------------------------------------------------------------+
| host         | user | password                                                                       |
+-------------+------+------------------------------------------------------------------------+
| localhost  | root | *E1B74369B47EB3AD8EF858144E1A0364E3259329 |
| server      | root | *E1B74369B47EB3AD8EF858144E1A0364E3259329 |
| 127.0.0.1 | root | *E1B74369B47EB3AD8EF858144E1A0364E3259329 |
| ::1            | root | *E1B74369B47EB3AD8EF858144E1A0364E3259329 |
+------------+-------+-------------------------------------------------------------------------+

    set [field]=[데이터] = 앞뒤로 띄어쓰지 않는다
    password()함수 : () 값을 암호화함

  * insert into [테이블](columns) values (값) columns, 값 개수 동일
    MariaDB [mysql]> insert into user(host, user, password) 
                                 values ('localhost', 'useritbank', password('itbank'));

    MariaDB [mysql]> delete from db;
    MariaDB [mysql]> select host, db, user from db;
                                 Empty set (0.00 sec)
    MariaDB [mysql]> insert into db values ('localhost', 'dbitbank', 'useritbank',
                             →  'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y',
                             →  'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y');        SQL문 권한 y가 19개

     MariaDB [mysql]> exit
     Bye
     [root@server ~]# systemctl restart mariadb : 데몬 재실행해야 변경된 것 적용

     새롭게 만든 useritbank로 로그인
     [root@server ~]# mysql -u useritbank -p

     MariaDB [(none)]> show databases;
+----------------------------+
| Database                   |
+----------------------------+
| information_schema  |
| dbitbank                     |
+----------------------------+
     허용된 권한에서만 볼 수 있다.

2. [실습] DB server 

 

DB server 내부 itbank 관련된 모든 내용 삭제 후 진행
D/B : dbtest
user : usertest
root로 로그인 하여 진행


usertest로 로그인하여 진행
table : tbtest
field : num, name, addr, phone
values : 3개 이상

* 확인은 show databases, select * from tbtest 결과를 한 화면에 띄워서 


Step1. 기존 db 지우고 새로운 db 생성
   MariaDB [mysql]> drop databaes dbitbank;
   MariaDB [mysql]> create database dbtest;

Step2. 기존 user 정보 지우고 새로운 user 정보 생성
   MariaDB [mysql]> select user from user
   MariaDB [mysql]> delete from user where user='useritbank';
   MariaDB [mysql]> insert into user(host, user, password) 
                                 values ('localhost', 'usertest', password('itbank'));

Step3. 기존 db 정보 지우고 새로 생성한 db 정보 삽입
   MariaDB [mysql]> delete from db;
   MariaDB [mysql]> insert into db values ('localhost', 'dbtest', 'usertest',
                           → 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y',
                           → 'y', 'y', 'y', 'y', 'y', 'y', 'y');
   MariaDB [mysql]> exit
   [root@server ~]# systemctl restart mariadb

Step4. 새로운 유저로 로그인
   [root@server ~]# mysql -u usertest -p
   Enter password:
   MariaDB [(none)]> show databases;
+---------------------------+
| Database                  |
+---------------------------+
| information_schema |
| dbtest                        |
+---------------------------+
   MariaDB [(none)]> use dbtest
   Database changed

Step5. 테이블 생성
   MariaDB [dbtest]> create table tbtest (num int(3), name char(20), addr char(64), phone int(12));
   MariaDB [dbtest]> desc tbtest;
+---------+------------+-------+------+-----------+--------+
| Field   | Type       | Null   | Key | Default  | Extra |
+---------+------------+-------+------+-----------+--------+
| num    | int(3)      | YES  |         | NULL    |          |
| name  | char(20) | YES  |         | NULL    |          |
| addr    | char(64) | YES  |         | NULL    |          |
| phone | int(12)    | YES  |         | NULL    |          |
+---------+------------+-------+------+-----------+--------+

Step6. 테이블에 값 삽입
   MariaDB [dbtest]> insert into tbtest values(1, 'a', 'aaa', 01012341234);
   MariaDB [dbtest]> insert into tbtest values(2, 'b', 'bbb', 01032123454);
   MariaDB [dbtest]> insert into tbtest values(3, 'c', 'ccc', 01024523544);

   ( ) 하나가 value 이므로 ( ), (  ), (  ) 여러 개 한번에 삽입 가능
   한글은 데이터가 ???로 나온다.
   int형으로 데이터 넣을 시 앞에 0은 생략된다, -이후(전화번호 같은 것 쓸 때)는 나오지 않는다

Step7. 실습 내용 확인
   MariaDB [dbtest]> show databases;
+----------------------------+
| Database                   |
+----------------------------+
| information_schema  |
| dbtest                         |
+----------------------------+
MariaDB [dbtest]> select * from tbtest;
+-------+--------+--------+-----------------+
| num  | name | addr  | phone           |
+-------+--------+--------+-----------------+
|    1    | a        | aaa   | 1012341234 |
|    2    | b        | bbb   | 1032123454 |
|    3    | c        | ccc    | 1024523544 |
+------+---------+--------+-----------------+

3. alter문으로 table 내부의 field 제어

  1) field의 데이터 type 변경
     alter table [테이블명] modify [필드 명] [바꿀 데이터 타입] 
     MariaDB [dbtest]> alter table tbtest modify phone char(14);
     이렇게 해도 데이터가 자동으로 바뀌지 않아서 데이터도 다시 입력해주어야 함.
     MariaDB [dbtest]> update tbtest set phone='010-1234-1234' where num=1;

  2) field 추가
     alter table [테이블명] add [추가할 필드명] [추가할 field의 type] after [기존 필드명]
    MariaDB [dbtest]> alter table tbtest add old int(3) after name;
    after를 사용하지 않으면 자동으로 맨뒤에 추가 after를 사용하면 기존 field 뒤쪽에 추가

  3) field 명 수정
    alter table [테이블명] change [기존 필드명] [바꿀 필드명] [자료형 - 기존 or 바꿀 것]
    MariaDB [dbtest]> alter table tbtest change old age int(3);

  4) field 삭제
    alter table [테이블명] drop [삭제할 필드명]
    MariaDB [dbtest]> alter table tbtest drop addr;

4. mariadb에서 한글 데이터를 입력 할 수 있도록 설정 변경하는 법

    MariaDB [mysql]> show variables like 'c%'; : c로 시작하는 모든 파일 % = * 역할

+----------------------------------+-------------------------------------+
| Variable_name                  | Value                                   |
+----------------------------------+-------------------------------------+
| character_set_client          | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database    | latin1                                   |
| character_set_filesystem   | binary                                  |
| character_set_results        | utf8                                      |
| character_set_server         | latin1                                   |
| character_set_system        | utf8                                     |
| character_sets_dir              | /usr/share/mysql/charsets/ |
| collation_connection           | utf8_general_ci                  |
| collation_database             | latin1_swedish_ci               |
| collation_server                  | latin1_swedish_ci               |
| completion_type                 | NO_CHAIN                         |
| concurrent_insert               | AUTO                                  |
| connect_timeout                | 10                                        |
+----------------------------------+-------------------------------------+

    latin1을 utf8로 바꿔줄 것 이를 위해

    [root@server ~]# vi /etc/my.cnf
    1 [mysqld]
    10 character-set-server = utf8
    11 collation-server = utf8_general_ci
     mysqld 영역에 위의 두 줄 구문 추가 저장 후 나간다
    [root@server ~]# systemctl restart mariadb

     MariaDB [mysql]> show variables like 'c%';
+----------------------------------+-------------------------------------+
| Variable_name                  | Value                                   |
+----------------------------------+-------------------------------------+
| character_set_client          | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database    | utf8                                      |
| character_set_filesystem   | binary                                  |
| character_set_results        | utf8                                      |
| character_set_server         | utf8                                      |
| character_set_system        | utf8                                     |
| character_sets_dir              | /usr/share/mysql/charsets/ |
| collation_connection           | utf8_general_ci                  |
| collation_database             | latin1_swedish_ci               |
| collation_server                  | latin1_swedish_ci               |
| completion_type                 | NO_CHAIN                         |
| concurrent_insert               | AUTO                                  |
| connect_timeout                | 10                                        |
+----------------------------------+-------------------------------------+

    변경된 것을 확인 가능
    이제부터 만든 database는 한글을 지원, 기존 database는 한글 사용하지 못함

    MariaDB [dbtest]> status; :db 전체 정보 출력

     Db     characterset:    latin1

     alter를 이용하여 database 설정 변경
    MariaDB [dbtest]> alter database dbtest default character set utf8;
    MariaDB [dbtest]> commit;

    이제부터 database가 만든 table은 한글을 지원, 기존 table은 여전히 한글을 사용하지 못함

    MariaDB [dbtest]> alter table tbtest modify name char(20) char set utf8;
    table에 한글을 사용할 field에 설정 변경

    이미 입력된 데이터는 여전히 ???로 나오지만 새로 업데이트하는 데이터들은 한글 지원 가능

    MariaDB [dbtest]> update tbtest set name='이성당' where num=1;

+-------+-------------+-------+---------------------+
| num  | name      | age    | phone                |
+-------+-------------+-------+---------------------+
|    1    | 이성당    |   11    | 010-1111-1111   |
|    2    | b             |   18    | 010-3212-3454 |
|    3    | c             | NULL | 010-2452-3544 |
+-------+-------------+-------+----------------------+

'Base > Linux(CentOS)' 카테고리의 다른 글

22. Server (4 - phpmyadmin GUI 환경 DB 사용)  (0) 2022.07.09
20. Server (2 - Web server httpd)  (0) 2022.06.28
19. Server (1 - DNS)  (0) 2022.06.28
18. samba / DHCP  (0) 2022.06.28
17. NFS / autofs 네크워트 마운트 사용  (0) 2022.06.27

댓글