Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

데이터 베이스 관리 서버(DBMS) 본문

운영체제/Linux - CentOs

데이터 베이스 관리 서버(DBMS)

세레프 2023. 4. 9. 09:45

 서버 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 프로그램으로, 이러한 서비스를 제공받는 프로그램 클라이언트라고 한다. 쉽게 말하면, 서비스를 제공하는 프로그램이 설치되어 있는 운영체제 서버, 서비스를 제공받는 프로그램이 설치되어 있는 운영체제 클라이언트라고 한다.

  1. web: apache, IIS(windows에서만 사용)
  2. mail : sendmail, postfix, qmail
  3. name : BIND
  4. FTP: vsftpd, proftp, wu_ftp
  5. telnet: telnet
  6. SSH : ssh
  7. DBSM : MySQL, MariaDB
  8. etc : NFS, SAMBA ....

 위의 리스트는 서버 프로그램을 기능별로 구분한 것으로, 해당 프로그램을 개별적으로 운영체제에 다운로드해야 하며, 설치하면 클라이언트에게 해당 기능을 제공할 수 있다.

 

서버 관련 명령어들
yum -y install 프로그램 : 프로그램을 설치하는 명령어

systemctl [ start / stop / restart ] [데몬] : 프로그램을 실행, 정지, 재시작하는 명령어

systemctl 
[ enable / disable] [데몬] : 운영체제를 부팅할 때, 프로그램 활성화, 비활성화 하는 명령어

setenforce [ 0 / 1 ] : SELinux(linux의 자체적으로 가지고 있는 커널기반 방화벽)을 비활성화 / 활성화하는 명령어

 

DBMS

 DBMS데이터를 관리하는 시스템으로, 복잡하고 다양한 형식의 데이터를 정리하고, 웹 서버를 통해 많은 사람에게 제공하기 위해서 사용한다. 이때 데이터를 정리한 집합데이터 베이스라고 한다.

 데이터 베이스는 데이터가 모여져서 저장하고 읽고 수정, 삭제 할 수 있는 형태로 모여져 있는 저장공간이기에, 데이터베이스가 스스로 해당 저장, 수정, 삭제같은 작업을 할 수 없다, 그래서 사용하는 것이 DBSM이다.

 DBSM은 많은 양의 데이터를 효과적으로 관리하기 위해서 여러가지 기능을 가지고 있다. 

  1. 특정 데이터의 저장, 조회, 삭제, 수정
  2. 데이터가 중복되거나 잘못된 형식으로 저장되는 것을 방지
  3. 외부 접근을 통제하고 사용자마다 권한을 지정해서 보안 유지
  4. 사용자가 원하는 대로 데이터를 확인할 수 있는 인터페이스 제공

 

MariaDB

 MySQL과 MariaDB는 테이블에 데이터를 저장하는 방식으로 데이터베이스를 관리하는 DBMS로, SQL(DBMS가 DB를 관리하기 위한 언어)을 사용해서 질의형식으로 해당 데이터베이스에 접근, 관리한다. MySQL과 MariaDB는 같은 오픈소스코드를 사용한다. 그래서 MySQL과 MariaDB는 사용방법이 비슷하다.

 

MariaDB 프로그램의 데몬, 환경설정파일

  • 서버 프로그램 : mariadb(MySQL)
  • 클라이언트 프로그램 : mysql
  • 환경 설정 파일
    • 서버: /etc/my.cnf.d/server.cnf
    • 클라이언트: /etc/my.cnf.d/client.cnf
  • 데몬 :  mariadb

 

프로그램설치

  • yum -y install mariadb* : DBSM서버인 MariaDB 프로그램을 설치하는 명령어

 

MariaDB 한글설정

 MariaDB는 한글을 지원하지 않기 때문에, 한글을 환경설정파일에서 직접 설정해야 한다.

  • 서버 환경설정파일(/etc/my.cnf.d/server.cnf)의 [mysqld]항목
[mysqld]
init_connect = "SET collation_connection = utf8_general_ci"
init_connect = "SET NAMES utf8"
character-set-server = utf8
collation-server = utf8_general_ci
  • 클라이언트 환경설정파일(/etc/my.cnf.d/client.cnf)의 [client]항목
[client]
default-character-set = utf8

만약 한글 지원하지 않은 상태에서 데이터베이스를 만들면, 해당 데이터베이스에서 한글을 사용하면 해당 값은 "?"로 표시된다.

 

Linux 한글사용 설정 방법 한/영 전환 방법
설정창 > 지역및 언어> 입력소스 > + > 한국어(hangul) 추가 shift+spacebar

 

DB접속

  • mysql [옵션] [데이터 베이스] : 데이터 베이스에 접속하는 명령어
옵션 예시
-h [서버] : 클라이언트 쪽에서 서버의 DB에 접속 

-u [사용자] : 사용자로 DB에 접속

-p [비밀번호] : 사용자의 비밀번호, 사용자가 없을경우 root로 접속, 비밀번호없이 사용시 보안목적으로 접속

mysql mysql : root계정의 비번이 없이, mysql 데이터베이스로 접속시도

mysql -p mysql : root사용자의 비밀번호를 입력 후, mysql 데이터베이스로 접속

mysql -h192.168.158.130 -uroot -p123456 : root계정의 비밀번호가 "123456" 일 경우, 192.168.158.130에 있는 데이터베이스를 root계정으로 접속
[root@localhost ~]# mysql -p mysql
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [mysql]> quit
Bye
[root@localhost ~]#

 -p옵션만으로 mysql에 접근을 하였기 때문에, 해당 데이터베이스는 localhost(자신 컴퓨터)의 데이터 베이스이며, 패스워드를 입력 후에 mysql데이터베이스에 접근한다. 이때, mysql는 질의형으로 진행되는 것을 확인 할 수 있다. mysql을 종료할 때는 "quit"를 사용한다.

 

mySQL에서 사용하는 명령어

 mySQL의 명령어는 3가지의 기능에 따라 DDL, DML, DCL로 나뉜다.

  • DDL : 데이터베이스를 정의하는 언어로, 데이터의 전체의 골격을 결정하는 역할을 하는 언어
  • DML : 정의된 데이터베이스에 입력된 데이터를 조회, 수정, 삭제, 생성의 역할을 하는 언어, 데이터가 생성, 수정, 삭제가 되었을 경우, "flush privileges;"를 통해 DB의 캐시를 지우고 명령어를 통해 변경한 새로운 데이터를 적용해야 한다.
  • DCL : 데이터베이스에 접근하거나 객체에 권한을 주는등의 역할을 하는 언어
DDL(Data Definition Language) DML(Data Manupulation Language) DCL(Data Control Language)
데이터 정의어 데이터 조작어 데이터 제어어
create, drop , alter insert ,delete, select, update grant, revoke

 

DDL 명령어

 데이터베이스와 테이블을 생성, 삭제, 변경하는 명령어로, 아래의 명령어를 통해 DB와 테이블의 상황을 확인할 수 있다.

show [databases/tables]; 데이터베이스와 테이블의 상황을 확인
use [DB명]; 해당 데이터베이스로 위치를 전환
desc [tables명]; 해당 테이블의 필드를 확인 

 

  • create
create database [데이터베이스명]; create table[테이블명]([필드명 필드의 자료형 설정], ... )
데이터베이스 생성 현 위치 데이터베이스에 테이블 생성
테이블 생성시 사용하는 필드 속성  설명
int     필드의 자료형을 정수로 생성 (11byte)
char(10) 필드의 자료형을 문자열로 생성 (10byte)
varchar (30) 필드의 자료형을 입력 데이터량에 따라 저장공간이 변경되는 가변의 문자열로 생성
not null 데이터 저장시 해당 필드에 데이터값이 반드시 존재
auto_increment 데이터 저장할 때마다 값이 1씩 증가
primary key 해당 값 중복 불가 (not null이여야 함)

 

  • drop
drop database [데이터베이스명];  drop table[테이블명]
데이터베이스 삭제 현 위치 데이터베이스에 테이블 삭제

 

  • alter
테이블 명 변경 alter table [기존 테이블명] rename [변경할 테이블명];
테이블 필드 추가 alter table [테이블명] add [필드명] [필드의 자료형] [null/not null] [생성 위치];
테이블 필드 삭제 alter table [테이블명] drop [필드명];
테이블 속성 변경 alter table [테이블] modify [필드] [변경할 자료형] [속성];
테이블 명 변경 테이블 필드 추가 테이블 필드 삭제

테이블 필드 추가 생성 위치 설명
after [필드명] 해당 필드명 뒤에 테이블 필드 생성
first 테이블 필드 맨 앞에 생성

 

DML 명령어

 테이블의 데이터를 생성, 삭제, 변경, 조회할 수 있는 명령어로, DB사용자도 데이터로 관리가 되기에 사용자를 생성, 삭제, 변경할 때에도 사용되는 명령어이다. 해당 명령어에는 데이터,테이블을 지목할 수 있는 지목 순서가 존재한다. 

 

  • select [필드명] from [테이블] :  테이블에 있는 필드들을 출력
예시
select host,user,password from user; 
: user테이블에서 host,user,password 필드의 데이터를 출력  → DB에 생성되어 있는 유저들 출력

select * from userlist;
 : userlist에 있는 모든 필드의 데이터를 출력

select name as '이름',age as '나이' from userlist
; : userlist에 있는 내용중 name필드를 이름으로 age필드를 나이로 바꿔서 해당 필드의 데이터를 출력

select * from DBkim order by age desc : DBkim에 있는 내용중 나이를 역순으로 해서 데이터 전부 출력

select * from DBkim order by height, age desc : DBkim에 있는 내용중 키를 순서대로 정렬후, 키의 크기가 같을경우, 역순으로 나이순위 출력

select * from DBkim order by age desc limit 5 : DBkim에 있는 내용중 나이를 역순으로 위에서 5명 출력

select의 지목 순서 (생략은 가능하지만, 순서변경은 불가)
1. from [테이블] : 테이블 지목
2. 
where [절] : 테이블에서 해당 절의 조건이 충족한 데이터
3.group by [필드] 
4. having [조건절]
5. order by [필드] : 테이블에 해당하는 필드를 내림차순으로 정렬 (필드에 desc를 뒤에 붙히면, 역순으로 정렬)

 

  • insert into [테이블]([필드])values([필드에 저장할 내용]) : 테이블에 있는 필드에 데이터를 저장하는 명령어
예시
 insert into user(host,user,password)values('localhost','DBtest',password('123456')); 
: user테이블의 host,user,password 필드에 각각 'localhost','sbs','123456'가 암호화된 데이터를 저장 → 'DBtest'라는 유저 생성

insert into userlist values(null,'김상순','남성',23,'010-1234-5678','서울'); : userlist테이블에 "null, '김상순', '남성', 23, '010-1234-5678', '서울' "순으로 데이터 저장
 유저 생성 데이터 생성

 

  • update [테이블] set [필드]=[변경 내용] where [지정 필드명]=[필드 정보] : 테이블에서 지정필드의 값이 필드 내용인 데이터의 필드의 값을 해당 내용을 변경
예시
update user set password=password('123456') where user='DBtest'
: user 테이블에서 user필드의 값이 DBtest인 사용자의 비밀번호를 '123456'로 설정 → 'DBtest'라는 유저의 비밀번호 변경

update userlist set addr='인천' where no=1 : userlist테이블에서 no필드의 값이 1인 데이터의 addr필드의 값을 '인천'으로 변경
유저 설정 변경 데이터 값 변경

 

  • delete from [테이블] where [필드]=[필드정보] : 테이블의 필드에 해당정보가 있는 데이터를 삭제하는 명령어
예시
delete from user where user='DBtest'
: user 테이블에서 user필드에 DBtest가 있는 데이터를 삭제 → 'DBtest'라는 유저 삭제

delete from userlist where addr='서울'; : userlist테이블에서 addr필드에 서울이 있는 데이터 삭제
유저 삭제 데이터 삭제

 

 

DCL

  • grant all privileges on [데이터베이스명.테이블명] to [사용자@호스트] identified by '비밀번호' [with grant option];

DB 서버와 Web 서버의 연동

 DB서버는 웹 클라이어트을 통해 데이터를 수집하고, 웹 클라이언트를 통해 데이터를 전달한다. 그래서 DB서버와 웹 서버는 연결해서 사용된다. 그렇다면 DB서버와 웹 서버는 어떻게 연결되어 있는 것일까?

L(inux)A(pach)P(HP)M(ysql)의 구성

 위의 그림은 웹 클라이언트가 DB에 데이터를 저장하고 데이터를 호출하는 과정으로, 먼저 web 클라이언트가 서버에게 해당 도메인에 대한 파일을 요청하면, web서버는 요청에 대한 데이터 파일을 클라이언트에게 응답해 준다.

 이때, 웹 파일은 웹 언어로 구성되어 있으며, 그중에 PHP라는 스크립트 언어는 DB서버와 웹 서버를 연동하는데 중요한 역할을 한다. PHP서버측의 동작을 언어로, DBMS와 연동할 수 있도록 SQL의 명령어를 PHP를 통해 표현함으로써 DB관리자 없이도, DB에서 데이터를 데이터를 저장, 호출할 수 있다. 그래서 DB를 사용할려는 Web서버는 PHP를 설치해야 한다.

 

 

Web서버 설치

 DB를 Web 프로그램에 연동하기 위해서는 Web서버를 구현할 필요가 있다. 

 

WEB 서버(HTTP)

서버는 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 프로그램으로, 이러한 서비스를 제공받는 프로그램을 클라이언트라고 한다. 쉽게 말하면, 서비스를 제공하는 프로그램이 설치되어

my-it-diary.tistory.com

 

 

웹 프로그램 설치

 웹 사이트가 데이터베이스와 연동하기 위해서는 해당 "PHP"로 구성되어 있는, 웹 사이트의 프로그램이 필요하다. 이 프로그램은 직접 코딩해서 제작할 수 있지만, 인터넷을 통해 오픈소스로 무료로 받을 수 있다.

 

XpressEngine - PHP Open Source CMS

PHP Open Source CMS

xe1.xpressengine.com

 위의 사이트는 PHP기반인 웹 프로그램 오픈소스로, 해당 사이트에 들어가서 다운로드 받은 뒤, ftp를 통해 서버의 사용자 홈 디렉토리에 저장한 뒤, unzip하면 다음과 같은 디렉토리와 디렉토리안에 파일을 확인 할 수 있다.

[root@localhost xe]# ll
합계 56
-rw-r--r--.  1 root root  1427 10월 22  2019 CONTRIBUTING.md
-rw-r--r--.  1 root root    43 10월 22  2019 COPYRIGHT
-rw-r--r--.  1 root root 25392 10월 22  2019 LICENSE
-rw-r--r--.  1 root root  2993 10월 22  2019 README.md
drwxr-xr-x. 12 root root   205 10월 22  2019 addons
drwxr-xr-x.  3 root root    35 10월 22  2019 admin
drwxr-xr-x. 22 root root  4096 10월 22  2019 classes
drwxr-xr-x.  8 root root    75 10월 22  2019 common
-rw-r--r--.  1 root root   309 10월 22  2019 composer.json
drwxr-xr-x.  2 root root    71 10월 22  2019 config
-rw-r--r--.  1 root root  2181 10월 22  2019 index.php
drwxr-xr-x.  5 root root    56 10월 22  2019 layouts
drwxr-xr-x.  9 root root   164 10월 22  2019 libs
drwxr-xr-x.  5 root root    56 10월 22  2019 m.layouts
drwxr-xr-x. 32 root root  4096 10월 22  2019 modules
drwxr-xr-x.  7 root root   100 10월 22  2019 widgets
drwxr-xr-x.  3 root root    20 10월 22  2019 widgetstyles

 이때 우리가 주목해야 하는 파일은 index.php파일로, 해당 파일은 사이트를 구축하는 파일이며, 사이트에 접속했을때, index.php파일로 사이트를 구축할 수 있도록 해야 한다.

  • 주 환경 설정 파일(/etc/httpd/conf/httpd.conf)의 DIrectoryIndex에 해당 파일명을 추가
<IfModule dir_module>
	DirectoryIndex index.html index.php
</IfModule>
  • 가상 호스트 환경설정 파일(/etc/httpd/conf.d/vhost.conf)에 해당 사용자 웹사이트에 "xe"디렉토리의 경로를 추가하여,
<VirtualHost *:80>
        DocumentRoot /home/apchtest/public_html/xe	
        ServerName apchtest.co.kr				
</VirtualHost>

 

서버에 PHP 설치

클라이언트는 php를 인식할 수 없기 때문에, 서버에  php를 설치하지 않고 웹 사이트에 접속하면, 다음과 같은 index.php파일이 그대로 출력된다.

 그래서 서버가 PHP를 인식하기 위해서는 PHP관련 프로그램을 설치 해야 한다.

PHP 설치 명령어
   yum -y install php*  yum -y install php-* yum -y install php-* --skip-broken

 PHP를 설치할 때, "php-mysql"가 설치되어야 하는데, "php-mysql"는 웹 서버와 데이터베이스서버를 연결시키는 프로그램이기에 반드시 설치 해야 한다.

 

접근할 DB와 DB 계정 생성

웹사이트에서 DB를 접근하기 위해서는 DB계정이 필요하며, 웹사이트의 정보를 저장하기 위해서는 DB가 필요하다.

  • mysql -p mysql : root 사용자로 mysql 데이터베이스에 접근하는 명령어
  • create database [데이터베이스명]; : 데이터베이스 생성하는 명령어, 이때 데이터베이스의 이름은 사용자명과 같아야 한다.
  • insert into user(host,user,password)values('[호스트]','[사용자명]',password('[비밀번호]')); : 해당 호스트에 사용가능한 사용자명과 비밀번호를 가진 DB계정 생성 하는 명령어
사용가능 host 설정
localhost 해당 사용자는 내 서버에서만 접근 가능
% 해당 사용자는 모든 서버에서 접근 가능
192.168.10.% 해당 사용자는 192.168.10. 인 서버만 접근 가능
192.168.%.% 해당 사용자는 192.168...인 서버만 접근 가능
192.168.10.128 해당 사용자는 192.168.10.128인 서버만 접근 가능
  • flush privileges; : 사용중인 MySQL의 캐시를 지우고 새로운 설정을 적용하는 명령어
  • grant all privileges on [DB].[테이블] to '[사용자]'@'[호스트]' identified by '[사용자 비밀번호]'; : 사용자가 해당 호스트에서만 해당 데이터베이스의 테이블에 접근가능하게 권한을 설정하는 명령어
root@localhost mysql]# mysql -p mysql
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [mysql]> create database apchtest;
Query OK, 1 row affected (0.01 sec)

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| apchtest           |
| mysql              |
| performance_schema |
| test               |
| test1              |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [mysql]> insert into user(host,user,password)values('%','apchtest',password('123456'));
Query OK, 1 row affected, 4 warnings (0.14 sec)

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.12 sec)

MariaDB [mysql]> grant all privileges on apchtest.* to 'apchtest'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

 위의 과정이 끝나고 데이터베이스를 재실행해야 한다. 그리고 DBMS로 접근하기 위해서는 서버 운영체제의 방화벽을 해제할 필요가 있다. 만약 방화벽이 설정 되어있으면, 방화벽에 mysql포트가 설정되어 있지 않아서 해당 포트로 서버에 접근이 불가능하게 된다.

  • systemctl stop firewalld : 방화벽을 정지시키는 명령어
  • setenforce 0 : SELinux(linux의 자체적으로 가지고 있는 커널기반 방화벽)을 비활성화하는 명령어
  • systemctl restart mariadb :  DBMS를 재시작하는 명령어

 

 위의 과정이 끝나고 가상호스팅으로 접속하고 다음과 같은 과정을 진행하면 된다.

 

'운영체제 > Linux - CentOs' 카테고리의 다른 글

메일 시스템  (0) 2023.04.10
WEB 서버(HTTP)  (0) 2023.04.03
도메인 네임 시스템(DNS)  (0) 2023.04.02
동적 IP 할당 서버(DHCP)  (0) 2023.03.27
파일 전송 시스템(FTP)  (0) 2023.03.26
Comments