database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Tutorials 14375 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 14375
First Guide to MySQL (1)
작성자
정재익(advance)
작성일
2001-12-23 00:26
조회수
22,314

이 글은 예전에 (주)리눅스넷 에서 작성된 글로서 MySQL 을 처음 사용하는 분들에게는 상당한 도움이 될 것으로 판단되어 올리게 되었습니다. 이 글이 작성된 시점은 상당히 초창기로서 비교적 요즘의 MySQL 과는 약간의 차이점이 있을 수 있습니다. 그러나 기본적인 부분은 크게 다르지 않으므로 많은 도움이 될 것으로 생각됩니다. 참조하시기 바랍니다.

============================

 

MySQL First Guide

 

(주)리눅스넷 (LinuxNet)

 

이 문서는 MySQL 을 처음으로 사용하는 사람들이 조금이라도 편하게 볼만한, Guide 문서를 구하기 힘들어 직접 작성한 것이다. 모든 내용이 창조적인 내용은 아니며, 주로 MySQL 문서와 기존의 많은 분들이 고생해 놓은 문서들을 참조로하여 작성하였다. 이미 문서를 만든지 오래 되고 하여 어느분의 문서를 어떻게 참조로 했는지 일일이 기억을 하지 못하여, 여기에 언급은

못해도 그러한 모든 분들께 감사를 드리며 내용을 시작하고자 한다.

 

[colro=BLUE]1. DBMS( Database Management System) 개론

 

이장에서는 Database의 개념과 DBMS에 대해 간략하게 알아보도록 한다.

 

1.1 Databse 란

데이타 베이스는 궁극적으로 어떠한 목적을 가지고 구축되어진 데이타(DATA)들의 집합 이다. 이 집합은 계속해서 변화하고 이 변화속에 관심을 가지고 있는 데이타들만을 선택할수 있어야한다.

 

Database가 사용되기 전까지의 데이타의 저장과 활용은 일반적으로 파일 시스템에 의존적이였다. 이 파일 시스템은 특정 프로그램이나 특정 시스템에서만 사용이 가능하기 때문에 실시간적인 관리나 활용에 많은 문제점을 가지고 있다.

또한 요즘 같이 네트워크 기반에 시스템에서는 접근 권한적인 문제들이라던지 많은 문제점을 내포하고 있다.

 

주변을 보면 데이타 베이스의 예는 많이 볼수 있다. 대학에서의 학사관리, 은행에서의 입출금및 고개관리, 상점에서의 재고 관리, 회사의 인사관리등 많은 곳에서 사용하고 있으며 데이타베이스는 더욱더 많은 곳에 적용이 될것이다.

 

가령 예를 들어 학교에서 학사관리의 경우 학생의 정보를 데이타 베이스한다고 함은 매년 신입생과 졸업생으로 데이타가 갱신이 되며 학년별 정보라던지, 학과별 인원수라던지 하는 질의에 해결할수 있게 데이타가 모여져 있어야 한다.

 

1.2 Database의 필요성

 

요즘 같이 정보 홍수속에 살고 있는 시점에서 이런한 정보들을 저장하고 활용하기 위한 방안들을 필요로 한다. 정보를 많이 모아서 저장하는 것도 중요하지만 어떻게 활용하는 가도 매우 중요하며 또한 정보를 유지 보수하기 위한 방법들이 요구되어 진다.

 

컴퓨터의 발전으로 더 많은 데이타들을 저장할수 있는 매체들이 발전하였으며 저렴한 가격으로 소규모 데이타 베이스를 구축할수 있는 시점에 현재 와있는 상태이다. 최근에는 추가적으로 웹과 데이타 베이스 연동을 통해 인터넷상에 다양한 정보를 제공하고 있으며 다양한 툴들과 서버들이 개발되고 있다.

 

그럼 데이타 베이스를 구축하기 위해서는 어떠한 작업들이 선행되어야 할까? 먼저 데이타를 구축하는 목적을 철저히 파악한다. 즉 현실 세계를 데이타 베이스로 나타내기 위해 데이타의 집합을 분석하며, 상호 연관성에 대해서도 이해를 해야한다. 이 작업을 모델링이라고 하며 이 부분이 데이타 베이스이 구축의 거의 모든 부분이라 고 해도 관언이 아닐정도로 중요한 부분이다.

 

1.3 DBMS의 개요

 

우리는 이러한 Database을 합리적으로 운영하는 시스템을 DBMS라고 부른다. 운영한다고 함은 데이타 베이스를 생성하며, 갱신, 삭제, 사용자들로부터 질의에 응답 함은 물론 효율적으로 관리하는것까지 포함한다.

데이타베이스에는 동시에 여러명이 접속하여 질의를 하게 되므로 이것을 적절히 배분하고 동시 접근시 문제점이 있는 경우 해결할수 있는 방안이 요구되어진다.

     Database  <--->  DBMS  <---> 다수의 사용자, 응용 프로그램

현재는 아직 RDMBS(Relational Database System)가 중심적으로 이루어지고 있으나 점차 ODBMS( Object Database Syterm)의 형태도 사용이 되고있으며 PostgreSQL는 ORDBMS( Object Relational Database System)의 구조를 가지고 있다.

 

잘 알려진 DBMS는 Oracle, Informix, Sybase등이 있으며 Free Databse로는 PostgreSQL , MySQL, MSQL등 있다.

 

2. MySQL

 

이장에서는 웹과 연동시 최고의 성능과 간결한 데이타 베이스인 MySQL의 특징과 사용법에 대해서 알아 본다.

 

2.1 MySQL의 소개

 

MySQL는 멀티 유저, 멀티 쓰레드 SQL Database Server이다.

mysqld라는 서버 데몬을 통해 일반적인 서버/클라이언트 환경을 지원하며 표준 SQL을 지원한다. 하지만 최고의 성능을 내기 위해 표준 ANSI SQL 92을 전부 지원하고 있지는 않다. 웹과 데이타 베이스 연동을 위한 다양한 API을 지원하고 있고 쉬운 관리 툴 제공하고 있다.

 

벤치마크에서도 알수 있듯이 일반적인 DBMS보다 매우 빠르고 현재에도

많은 부분들이 속속히 추가되고있는 상태이다. MySQL에서 현재 처리할수 있는 테이블의 크기는 4G이다. 하지만 인텔용 리눅스는 최대 파일의 사이즈가 2G이므로 실제로 생성할수 있는 크기는 2G라고 할수있다.

 

2.2 라이센스

 

MySQL의 메인 홈페이지는 http://www.mysql.com이다.

 

자세한 라이센스는 홈페이지를 참고하기 바란다.

 

MySQL 라이센스 ( 요약 )
. 기본적으로 GPL 로 제공된다.
. 만약 상용 프로그램을 개발하던지 또는 MySQL 자체를 자신들의 상용
  프로그램 패키지의 일부로서 포함시키고자 하는 경우에는 상용 라이센스
  를 구입할수 있다.

 

3.Mysql의 설치

 

이장에서는 MySQL의 설치방안과 구동 방법에 대해 알아본다.

 

3.1. RPM 설치

 

RPM( Red Hat Package Manager)는 레드햇사의 리눅스 배포본중 패키지 관리 툴이다. 이것이 이용하여 간단하게 MySQL을 설치및 제거, 업그레이드를 할수 있다.

 

MySQL rpm의 종류

- MySQL-VERSION.i386.rpm 
MySQL server에 대한 rpm 

- MySQL-client-VERSION.i386.rpm 
MySQL 클라이언트 프로그램으로 이것은 필수적인 패키지이므로 꼭 설치를 해야한다.

- MySQL-bench-VERSION.i386.rpm 
테스트와 벤치마크를 위한 패키지.

- MySQL-devel-VERSION.i386.rpm 
MySQL 클라이언트를 개발할때 필요한 헤더파일과 라이브러리들을 가지고 있다.

- MySQL-VERSION.src.rpm 
위의 모든 패키지의 소스를 포함한 패키지 ( 알파 나 스팍에서 필요하다 )

-  MySQL rpm의 설치. ( root로 작업한다. )

1) 현재의 MySQL 패키지의 구성요서를 확인한다.
shell> rpm -qpl MySQL-VERSION.i386.rpm | more

2) 현재 서버에 MySQL이 설치 되어있는지 확인한다.
shell> rpm -q MySQL

3) 확인후 설치를 시작한다.

shell> rpm -ivh MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm
( 만일 클라이언트 패키지만 설치할 경우 )

shell> rpm -ivh MySQL-client-VERSION.i386.rpm

 

RPM 패키지에서 MySQL의 base 디렉토리는 /var/lib/mysql로 지정되어 있다. 이 디렉토리의 하부에 데이타 베이스들이 생성되어지므로 만일 패키지를 업그레이드를 하는 경우 필히 이 디렉토리를 백업후 실행하도록 한다.

그리고 부팅시 자동으로 MySQL 서버를 가동하기 위해 /etc/rc.d/init.d에 스크립트가 저장되어진다. 부팅시 자동으로 mysqld을 수행할려면 /etc/rc.d/rc3.d에 추가하던가 ntsysv에서 추가를 한다.

 

3.2. 컴파일 설치

 

현재 배포되는 MySQL는 한글 Sorting을 지원하지 않는다. 이것을 사용하기 위해서는 필히 컴파일을 하여 사용하여야 한다.

1) MySQL-VERSION.src.rpm을 가지고 와서 설치를 한다.
shell> rpm -ivh MySQL-VERSION.src.rpm

2) spec파일을 수정한다.

shell> vi /usr/src/redhat/SPECS/mysql-VERSION.spec
......................................................
................. 중     략  .........................
......................................................
sh -c  \PATH=$ \r
        CC=$ \r
        CFLAGS=${MYSQL_BUILD_CFLAGS:-\-O6 -fomit-frame-pointer\} \r
        CXX=$ \r
        CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-\-O6 -fomit-frame-pointer \r
                  -felide-constructors -fno-exceptions -fno-rtti\} \r
        ./configure \r
......................................................
................. 중     략  .........................
......................................................

안의 내용중에  --with-charset=euc_kr라는 부분을 추가.
3) rpm 빌더를 수행한다.
shell> rpm -ba /usr/src/redhat/SPECS/mysql-VERSION.spec
4) 만들어진 패키지를 확힌후 설치한다. ( RPM설치를 참고 )
shell> ls /usr/src/redhat/RPMS/i386/MySQL-VERSION.rpm

[참고]
MySQL에서 한글 메세지를 볼수 있다. 
shell> vi /usr/bin/safe_mysqld
아래와 같이 추가를 해준다. 
......................................................
................. 중     략  .........................
......................................................
echo \mysqld started on \ `date` >> $err_log
while true
do
  rm -f $MYSQL_UNIX_PORT $pid_file      # Some extra safety
  if test \$#\ -eq 0
  then
    nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \r
     --language=korean --skip-locking >> $err_log 2>&1
     =================( 추가 )
  else
    nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \r
     --language=korean --skip-locking \$@\ >> $err_log 2>&1
     =================( 추가 )
  fi
......................................................
................. 중     략  .........................
......................................................

 

4. MySQL의 구동과 유저 등록

 

이장에서는 MySQL의 시작과 종료, 유저 등록, 관리용 디비의 구조에 대해 알아본다.

 

4.1 서비스의 시작과 종료

 

구동)

shell> /etc/rc.d/init.d/mysql start

종료)

shell> /etc/rc.d/init.d/mysql stop

실제적으로 이 스크립트는 safe_mysqld라는 것을 실행시킵니다.

 

[참고]

업테이트 로그가 필요한 경우 safe_mysqld안에서 mysqld을 띠우는 부분에서 옵션을 추가한다.

 

-log-update=file_name : file_name.#의 형태로 매번 변경사항을 저장합니다.

-log, -l : hostname.log라는 파일로 계속 저장이 됩니다.

 

4.2 Mysql 관리용 툴

 

1) mysqladmin

 

Usage: mysqladmin [OPTIONS] command command....

  -?, --help            도움말을 출력한다. 
  -h, --host=...        특정 호스트에 연결
  -p, --password[=...]  패스워드 입력
  -P, --port=...        연결하고자 하는 서버의 포트번호
  -S  --socket=...      Socket file to use for connection
  -S, --socket=...      소켓을 이용하여 연결
  -u, --user=#          새로운 유저로 연결
  -V, --version         버전을 보여준다.

command:
  
  create databasename   데이타베이스를 생성한다.
  drop databasename     데이타베이스를 삭제한다.
  password new-password 새로운 패스워드를 입력
  ping                  Check if mysqld is alive
  processlist           Show list of active threads in server
  reload                권한을 다시 reload한다. 
  shutdown              서버를 셧다운한다.
  status                현재의 상태를 보여준다.
  variables             설정된 값을 보여준다
  version               버전을 보여준다.

2) mysqlshow 

- 현재의 테이타베이스 및 테이블의 내용을 보여준다.

Usage: mysqlshow [OPTIONS] [database [table [field]]]

  -?, --help            도움말을 출력한다. 
  -h, --host=...        특정 호스트에 연결
  -p, --password[=...]  패스워드 입력
  -P, --port=...        연결하고자 하는 서버의 포트번호
  -S  --socket=...      Socket file to use for connection
  -S, --socket=...      소켓을 이용하여 연결
  -u, --user=#          새로운 유저로 연결
  -V, --version         버전을 보여준다.


shell> mysqlshow
+-----------+
| Databases |
+-----------+
| mysql     |
| test      |
+-----------+

shell> mysqlshow mysql 
Database: mysql
+--------------+
|    Tables    |
+--------------+
| columns_priv |
| db           |
| func         |
| host         |
| tables_priv  |
| user         |
+--------------+

shell> mysqlshow mysql user
Database: mysql  Table: user  Rows: 7
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host            | char(60)      |      | PRI |         |       |
| User            | char(16)      |      | PRI |         |       |
| Password        | char(16)      |      |     |         |       |
| Select_priv     | enum(\N\,\Y\) |      |     | N       |       |
| Insert_priv     | enum(\N\,\Y\) |      |     | N       |       |
| Update_priv     | enum(\N\,\Y\) |      |     | N       |       |
| Delete_priv     | enum(\N\,\Y\) |      |     | N       |       |
| Create_priv     | enum(\N\,\Y\) |      |     | N       |       |
| Drop_priv       | enum(\N\,\Y\) |      |     | N       |       |
| Reload_priv     | enum(\N\,\Y\) |      |     | N       |       |
| Shutdown_priv   | enum(\N\,\Y\) |      |     | N       |       |
| Process_priv    | enum(\N\,\Y\) |      |     | N       |       |
| File_priv       | enum(\N\,\Y\) |      |     | N       |       |
| Grant_priv      | enum(\N\,\Y\) |      |     | N       |       |
| References_priv | enum(\N\,\Y\) |      |     | N       |       |
| Index_priv      | enum(\N\,\Y\) |      |     | N       |       |
| Alter_priv      | enum(\N\,\Y\) |      |     | N       |       |
+-----------------+---------------+------+-----+---------+-------+

3) 기타

 

- mysqldump, mysqlimport 등은 뒤부분에서 하나씩 설명하기로 한다.

 

4.3 새로운 사용자 등록

 

1) MySQL의 인증 방법

일반적인 DBMS가 그러하듯이 시스템 사용자와 DBMS사용자는 같지 않다. 즉 유닉스 시스템에 계정을 가지고 있더라도 DBMS에 접근하기 위해서는 새로운 허가권이 필요 하다. 하지만 MySQL은 유저를 명시하지 않고 접근시 디폴트로 계정이름을 가지고 엑세스 가능 유무를 판단하게 되어있다.

또 이것은 만일 MySQL 사용자에 패스워드가 없는 경우 \-u\ 옵션을 통해 접근이 가능하다는 것을 의미한다. 그러므로 항상 패스워드를 걸어줘야 한다.

 

2) 인증 시스템의 구조

mysql이라는 데이타베이스내에 user, db, host, columns_priv, tables_priv라는 테이블의 조합으로 인증 시스템이 구성되어진다.

우선 각각 table에서 각 필드마다 권한의 의미를 알아보자.

HOST          : 접근을 허용할 호스트를 말한다.
                공백과 %\는 모든 호스트를 의미한다.
User          : char(16), 즉 16문자까지 지원한다.
Password      : 패스워드는 encypt되어 저장된다.( 유닉스 방식과는 틀리다.)  
Select_priv   : select를 할수 있는 권한  
Insert_priv   : insert를 할수 있는 권한  
Update_priv   : Update를 할수 있는 권한    
Delete_priv   : Delete를 할수 있는 권한  
Create_priv   : 테이블, 데이타베이스, 인텍스를 생성할수 있는 권한    
Drop_priv     : 테이블, 데이타베이스를 삭제할수 있는 권한  
Reload_priv   : 권한 테이블들을 잘 reload  
Shutdown_priv : MySQL Server을 셧다운할수 있는 권한  
Process_priv  : MySQL 프로세스들을 제어할수 있는 권한  
File_priv     : 파일 엑세스 즉 LOAD, OUT FILE등을 할수 있는 권한  
Grant_priv    : 권한 수여를 할수 있는 권한  
References_priv : 참조 권한?
Index_priv    : index을 사용할수 있는 권한  
Alter_priv    : 변경을 가할수 있는 권한  
user 테이블에서 select_priv권한이 있으면 DB 테이블에서 Select_priv권한이 없더라
도 접근이 가능하다. 즉 user 테이블에서 권한 슈퍼 유저와 같은 Global 권한을 가짐
을 의미한다. 그러므로 유저 생성시 가능한 모든 권한을 막아 주는 것이 좋다.
권한의 가능 유무는 
( User table의 권한 ) OR
( Db and host )       OR
( tables_priv )       OR
( columns_priv ) 
뒤에서 설명을 하겠지만 Grant라면 SQL문을 통해 아주 쉽게, 안전하게 유저를 등록할
수가 있다.

3) 인증의 절차

MySQL은 접근이 가능한 호스트인지 검사한 후 테이타베이스에 접근이 유효한 유저인지 구분하여 연결을 한후, 요구하는 명령이 허가되어있는지 검사를 하고 실행유무를 결정 한다.

 

4.4 mysql client을 통한 데이타베이스 서버 접근

 

1) mysqld 실행하기

shell> mysql [-h host_name] [-u user_name] [-pyour_pass]

host_name의 기본값은 localhost

user_name의 기본값은 Unix login name( 계정 )

-p 옵션이 없으면 패스워드가 없는것으로 인식한다.

[주의] -p옵션 뒤에는 공란이 없다. 즉 패스워드가 \pass123\일경우 \-ppass123\이다.

예)

shell> mysql -h localhost -u hoonix

shell> mysql -h LinuxNet

shell> mysql -u hoonix

shell> mysql

shell> mysql -u hoonix -p

Enter password:

 

2) 사용할수 있는 명령어

mysql> \elp
MySQL commands:
help    (\)    Display this text
?       (\)    Synonym for `help\
clear   (\)    Clear command
connect ()    Reconnect to the server. Optional arguments are db and host
edit    (\)    Edit command with $EDITOR
exit    (\)    Exit mysql. Same as quit
go      (\)    Send command to mysql server
ego     (\)    Send command to mysql server; Display result vertically
print   (\)    Print current command
quit    (\)    Quit mysql
rehash  (\)    Rebuild completion hash
status  (\)    Get status information from the server
use     (\)    Use another database. Takes database name as argument

4.5 새로운 유저의 등록

 

두가지 방법으로 가능하다.

 

1) mysql 데이타베이스에 접근하여 insert을 통해 입력하는 방법

Db, User 등 데이블을 SQL을 통해 조작하는 방법을 말한다.

이 방법은 매번 번거롭고 사용자가 실수를 할수 있으므로 별로 권장하지 않는다. 하지만 권한 시스템이 어떻게 동작하는 지는 알기 위해 한번쯤은 각각의 테이블의 내용을 보기 바란다.

 

2) grant 을 이용하는 방법

mysql> GRANT SELECT

ON intra.*

TO hoonix@localhost

IDENTIFIED BY \pass123\;

- hoonix라는 local 사용자에게 board라는 테이타 베이스에 select 권한을 주었다.

특정 테이블만을 주고 싶다면 intra.board라고 적으면 되며 local아닌 특정 호스트인

경우 hoonix@linuxnet.co.kr 와 같이 적어준다.

mysql> FLUSH PRIVILEGES;
       -----------------
       새로운 패스워드를 적용시키기 위해서는 꼭 해줘야 한다.

 

3) 패스워드의 변경

패스워드의 변경은 오직 root와 허가된 사람만이 가능하다.

shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(\new_password\)
           WHERE user=\user_name\;
mysql> FLUSH PRIVILEGES;

[주의]

다시 한번 강조하지만 MySQL을 처음으로 시작할때 꼭 MySQL의 root계정에 패스워드를 꼭 입력하기 바란다. 대부분의 사용자들이 이부분에 소홀하다. 또한 새로운 사용자를 추가할때마다 마찬가지로 패스워드를 꼭 넣어주는 습관을 가지자.

[Top]
No.
제목
작성자
작성일
조회
14582MySQL 에서 사용자와 권한 설정 [2]
정재익
2002-01-06
18433
14377First Guide to MySQL (3)
정재익
2001-12-23
14905
14376First Guide to MySQL (2)
정재익
2001-12-23
21433
14375First Guide to MySQL (1)
정재익
2001-12-23
22314
14219[강좌/링크] Mysql replication 한글 강좌
문태준
2001-12-17
10030
14200MySQL 에 binary data 를 어떻게 저장할 것인가?
정재익
2001-12-15
9635
14187[강좌/옮김] mysqladmin 총정리
문태준
2001-12-15
16898
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다