MySQL : Project(MySQL 연동) 3 – 기초

1. MySQL 시작하기

MySQL 구동 하기.

$ /etc/init.d/mysql start

 

MySQL 접속하기

$ mysql -uroot -p1234567890

-u 다음에는 접속하고자 하는 ID, -p 다음에는 접속하고자 하는 계정의 패스워드를 입력한다.

 

MySQL에서 데이터 베이스 생성하기

mysql> create database test;

생성한 데이터 베이스 확인하기

mysql> show databases;

 

MySQL에서 데이터 베이스 선택하기

mysql> use test;

use 다음에 사용하고자 하는 데이터 베이스를 입력한다.

 

선택한 데이터베이스에서 테이블 만들기

mysql> CREATE TABLE student (
-> name varchar(10),
-> korean int,
-> math int,
-> english int
-> );

student 라는 이름의 테이블을 생성하는 쿼리이다.  테이블 생성 후, Data Directory 를 확인하면, 데이터 베이스 디렉토리 속에 student라는 이름을 가진 파일들이 생성된 것을 확인할 수 있다.

root@jonathan-laptop:/var/lib/mysql/test# pwd
/var/lib/mysql/test
root@jonathan-laptop:/var/lib/mysql/test# ls -slh|grep student
rw-rw—- 1 mysql mysql    0 2011-06-30 10:59 student.MYD
rw-rw—- 1 mysql mysql 1.0K 2011-06-30 10:59 student.MYI
rw-rw—- 1 mysql mysql 8.5K 2011-06-30 10:59 student.frm

 

생성한 테이블 확인하기

mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| address        |
| student        |
| test           |
+—————-+

 

테이블 정보 확인하기

mysql> explain student;
+———+————-+——+—–+———+——-+
| Field   | Type        | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| name    | varchar(10) | YES  |     | NULL    |       |
| korean  | int(11)     | YES  |     | NULL    |       |
| math    | int(11)     | YES  |     | NULL    |       |
| english | int(11)     | YES  |     | NULL    |       |
+———+————-+——+—–+———+——-+
4 rows in set (0.00 sec)

 

2. 사용자 설정

 

2-1. 사용자 암호 바꾸기

MySQL에서 사용자의 암호를 변경하는 방법은 세가지가 있다.

– UPDATE 문을 이용
– SET PASSWORD 이용
– mysqladmin 이용

2-1-1 UPDATE 문 이용하기

jonathan@jonathan-laptop:/var/lib$ mysql -uroot -p mysql

mysql> update user set password=password(‘1234’) where user = ‘root’;
Query OK, 3 rows affected (0.09 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

-p 다음에 mysql은 mysql이란 데이터 베이스를 사용하라는 것을 의미한다. mysql 프롬프트에서 use db_name을 이용하여 사용하고자 하는 데이터베이스를 변경할 수도 있다. UPDATE 문을 이용하여 암호를 변경할 경우에는 꼭 flush privileges; 를 실행해야 한다.

이유는 MySQL은 속도를 조금이나마 빠르게 하기 위해 mysql 데이터베이스에 있는 사용자 권한에 관련딘 내용을 처음 MySQL 시작시에 메모리로 읽어 들이는데(메모리가 하드 디스크에 비해서 속도가 빠르므로 이렇게 해서 사용자 인증 부분에 속도를 향상시킬 수 있는 것이다), UPDATE문을 사용하여 암호가 바뀌었을 때는 flush privileges; 를 이용하여 사용자 관련 테이블에 변경된 내용이 있으니 다시 읽으라고 서버에 알려야 한다.

2-1-2 SET PASSWORD 이용하기

mysql> SET PASSWORD for root=password(‘1234’);

이 방법은 flush privileges; 를 할 필요가 없음. 그러나 MySQL 5.1 버전에서는 제대로 되지 않는것을 확인했음.

2-1-3 mysqladmin 이용하기

$ mysqladmin -u root password  new-password

 

2-2 새로운 사용자 등록하기

MySQL에서 새로운 사용자를 추가하는 방법은 GRANT를 이용하는 방법과 직접 mysql의 user 테이블에 INSERT 하는 방법 두가지가 있다.

2-2-1 GRANT문 이용

mysql> grant all privileges on *.* to pchero@localhost identified by ‘1234’ with grant option;
Query OK, 0 rows affected (0.04 sec)

localhost의 pchero에게 (to pchero@localhost) 1234라는 암호로(identified by ‘1234’) MySQL의 모든 데이터베이스에 있는 모든 테이블에(on *.*) 모든 권한 (all privileges)을 부여하는 것을 의미한다.

위의 쿼리문은 모든 데이터베이스를 사용할 수 있도록 하는 쿼리인데, 이를 특정 데이터베이스에 한정하기 위해서는 다음의 쿼리문을 사용하도록 한다.

mysql> grant all privileges on test.* to pchero@localhost identified by ‘1234’;

위의 쿼리문은 localhost의 pchero에게 test 데이터베이스의 모든 테이블에 모든 권한을 부여하는 것을 나타낸다. 특정 데이터베이스에 특정 권한만을 부여하기 위해서는 다음의 쿼리문을 수행한다.

mysql> grant select, insert on test.* to pchero@localhost identified by ‘1234’;

이 외에도 특정 테이블이나 특정 컬럼에만 권한을 주는 방법도 있다.

2-2-2 INSERT문 이용하기

insert into user values(‘localhost’, ‘pchero’, password(‘1234’), ‘N’, ‘N’, ‘N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’);

 

 

 

MySQL : Project(MySQL 연동) 2 – 환경 구성

 

1.  MySQL 설치

작업의 대부분은 Ubuntu – 10.04 버전에서 진행하였다.

Ubuntu Linux의 경우 MySQL 은 기본적으로 설치가 되어있으나, 다른 Linux 배포판의 경우, 설치가 안되어 있거나 따로 설치를 해야할 경우가 있다.

이럴 경우, 대부분의 최신의 배포판들은 다음의 명령어를 사용하여 간단하게 설치를 진행할 수 있다.

apt-get 을 이용할 경우

# apt-get install mysql

yum 을 이용할 경우

# yum install mysql

이번 프로젝트에서 사용한 MySQL의 버전은 5.1.41 버전이다.

MySQL 버전 확인하기

# mysql –version

 

2. MySQL Options

ubuntu 환경에서 apt-get 으로 MySQL을 설치 했을 경우, 기본적으로 설정되는 database directory는 다음과 같다.

/var/lib/mysql

만약 위의 디렉토리에 존재하지 않는다면, /etc/mysql/my.cnf 파일을 통해서 database directory 의 위치를 확인할 수 있다.

아래는 필자의 my.cnf 파일의 내용이다.

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# – “/etc/mysql/my.cnf” to set global options,
# – “~/.my.cnf” to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with –help to get a list of available options and with
# –print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain “#” chars…
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port        = 3306
socket        = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket        = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
#
# * Basic Settings
#

#
# * IMPORTANT
#   If you make changes to these settings and your system uses apparmor, you may
#   also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
#

user        = mysql
socket        = /var/run/mysqld/mysqld.sock
port        = 3306
basedir        = /usr
datadir        = /var/lib/mysql
tmpdir        = /tmp
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer        = 16M
max_allowed_packet    = 16M
thread_stack        = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit    = 1M
query_cache_size        = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1

log_error                = /var/log/mysql/error.log

# Here you can see queries with especially long duration
#log_slow_queries    = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id        = 1
#log_bin            = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size         = 100M
#binlog_do_db        = include_database_name
#binlog_ignore_db    = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI “tinyca”.
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

[mysqldump]
quick
quote-names
max_allowed_packet    = 16M

[mysql]
#no-auto-rehash    # faster start of mysql but no tab completition

[isamchk]
key_buffer        = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with ‘.cnf’, otherwise they’ll be ignored.
#
!includedir /etc/mysql/conf.d/

각각의 옵션들의 정확한 의미와 사용법을 알고 싶다면 아래의 링크를 참조한다.

http://dev.mysql.com/doc/refman/5.1/en/program-options.html

SYBASE 사용자 추가하기

 SYBASE 에서의 사용자 추가 방법

sp_addlogin ‘아이디’,’패스워드’

 

 

 sp_adduser ‘아이디’

 sp_dropuser ‘아이디’

 

 

 % isql -Usa -Ppassword -Sservername
1> use master
2> go
1> sp_addlogin scott, tiger, test
2> go
1> use test
2> go
1> sp_adduser scott
2> go

 

 

 

 

exec  sp_addlogin  ‘homeusr’, ‘password’, @defdb=’ebaihome’, @auth_mech = ‘ASE’
exec sp_locklogin  ‘homeusr’, ‘unlock’

 go

 

use ebaihome
go

exec sp_adduser ‘homeusr’ ,’homeusr’ ,’public’
go 

——————————————————————————————————————————————————
출처 : http://benelog.springnote.com/pages/349014

SYBASE 기본 사용법(시작/종료, Login/Logout, DB생성/삭제/변경, Device등록/삭제,

SYBASE 사용법(요약)

SYBASE home directory는 /home/sybase로 가정하며, 이하 ‘HOME’이라 합니다.

1.User System Account등록
  1)User Account생성(System의 User등록방법에 따라)
     Login as root – System Booting후 Root와 Password 입력)
     Ex) #vi /etc/passwd/
     Format] username:password:UID:GID:comment:user home directory:shell type
     Example]sybase::100:100:SYBASE USER:/home/sybase:/bin/csh

  2)User Directory생성
     #cd /home
     #mkdir sybase
     #chown sybase sybase
     #exit

2.Sysytem Login
  Login as sybase – System Booting후 User name과 Password입력

3.Server를 Start시킴
  1)”HOME”에서 install directory로 변경(cd install)
     Format]startserver -f RUN_SERVERNAME
     ※ RUN_SYBASE인 경우, startserver만 해줌, ServerName는 LAN상 unique해야 함
     ※ showserver – server가 start되어 있는지 install directory에서 확인.

4.Server로 Login
  1)isql -Usa -P(default is null) – isql 사용
     1>SQL Commend 입력
     2>qo
     3>quit  /* isql exit */

5.Shutdown the Server
  1)At isql – recommended
     1>shutdown (with nowait)
     2>go
      /* with nowait option 은 진행중인 process의 정상종료없이 Server가 Down됨 */
  2)At OS prompt
     %kill -9 PID /* PID : dataserver process ID */

6.기존 DataBase(install후 생성)
  1)System Database
     (1)master – db를 관리하는 db(db정보, device정보, login, account등)
        /* master db에 object를 생성하는 것은 피해야 한다. – master db full */
     (2)model – User db를 생성하는 prototype(db를 생성할 때 model db 복제)
     (3)tempdb – join, sorting, temprary table($table_name)등의 작업영역
     (4)sybsystemrocs – Sybase 제공 System Procedures(SP_who, SP_hwwlpdb 등)
     (5)sybsecurity – 시스템 전반적인 사용을 감시하는 db(user, db, table, SQL등)
     (6)sybsyntec – 명령어를 저장하고 있는 db(DML,DDL,DCL 및 기타 명령어)
  2)The pubs2 database 생성
     %isql -Usa -P < $SYBASE/scripts/installpubs2
     /* installpubs2는 pubs2 db를 생성하기 위한 script이며,
        pubs2가 있을 경우에는 생성하지 말 것.(isql상에서 sp_helpdb로 확인)
  3)The pubs2 database query set
     %isql -Usa -P (sa로 login) – 이하 생략
     1>select db_name() /* 사용중인 db 확인 */
     2>go
     1>user pubs2
     2>go
     1>select * from titles
     2>go
     1>vi
     select * from titles
     ~
     :wq query /* OS file로 query저장 */
     1>:r query /* OS file로부터 isql로 query를 read */
     2>go /* 또는 vi editor를 call하여 edit후 save하고 수행 */
     4)Query를 OS File로 작성하여 결과를 OS File로 받아보기 위한 방법
     %vi
     user pubs2
     go
     select * from titles
     go
     :wq query
     %isql -Usa -P <query> query.out /* vi query.out로 결과 확인 */

7.Devicee등록 및 Drop
이는 SQL Server가 Device를 인식하고 그 Device에 db를 생성할 수 있도록 Device initialize를 하여 Server에 Device를 등록해 주는 과정임.
  1) Device위치 선정
     %su root(root account로변환 및 passward입력)
     # cd/user(/user directory에 deice 를 생성하고자 할 경우)
     #mkdir test-dev
     # chwon sybase test-dv(ownership변경 또는 sybase writable)
       /*sybase로login하여”HOME”밑에 생성시 ownership변경 필요없음*/
     # exit
  2) isql로 server에 login
     1> disk init
     2> name=”data_dev”,(log_dev”,)
     3> physname=”usr/test_dev/data_dev,””log_dev”,)
     4> vdevno=1,(2,)
        /* default : 1-9, 최대 255, 0은 master device로reserved */
        /* device등록을 실패할 때에는 다른 vdevno를 부여하거나, 그 번호를 재사용시는
          server restaret */
     5> size = 5120(1024)
        /* size는 page단위이며, 단위는 10MB 의 device임 */
        /* size =512 *MB단위 size */
     6>    go
      /* ()안은 log device에 대한 disk init 이며, 별도로 disk init 하여 등록 */
      /* master device및 device는 raw partition으로도 지정가능 */
     1>  sp_helpdevice-disk init 후 device등록확인
     2>  go
     1> sp_dropdevice data_dev(log_dev)
     2> go
     1>  quit
     /*device에 database가 존재할 경우 drop되지 않음- 먼저 db drop */
     % rm data_dev(log_dev)
         /*server내에서 drop한 다음 os에 해당 file을 지움 */

8. Database생성 및 Drop
Disk init를 하여 server에 등록된 Device 에 새로운 Database 생성
  1> create database mydb on data_dev =5 log on log _dev
  2>  go
  /*위 예제는 data_dev에 data를, og dev 에 log 를 담는 db 생성하는 예제
  device등록시에는 page단위이지만, db생성시에는 MB단위임
  남아있는 device 여분은 mydb 의 확장 및 타 db의 device로 사용
  log size 는 update빈도에 따라 다르지만 log device를 별도로 지정하지 않으면
  db생성 device에 log devie생성
  database 생성시 deice 를 생략하면 master device(default device)에 생성

  1>  sp_helpdb /*mydb생성 확인 및 database list */
  2>  go
  1>  drop data  mydb  /*  database drop */
  2>  go

9. database 에 대한 ownership변경
  1> use mydb  /* database open , 이하 생략 */
  2> go
  1> sp_changedbowner  dully
  2> go
    /* 해당 db  user 이면 ownership이 변경되지 않고,  sp_dropuser 후 ownership 변경*/

10. Database 확장
Database의 용량을 확장할 경우에는 기존 등록된 device 및 disk init에 의해 새로 등록된 device에 database를 확장한다.
  1> alter  database  mydb  on  data _dev = 3
  2> go

11. Object-Nameing  Convention
  1)  Objcet  Name
     (1) Table, default, Procedure등 모두 해당됨
     (2) 대 소문을 구분하여, 최대 30characters
     (3) Object name identify ? db, owber, table (puds2. Friend)-dbo일 경우 생략가능
  2) Transact ? SQL
     (1) 대 소문자 구분 없음(select  or  SELECT)
     (2) 축약형가능(procedure:proc, execute: exec, transaction: tran 등)
  3) 타 DB와  Join
     1>  select  a.name, b.amount from friend a, pubs … charg b
     2> where a.id = b.id
     3> go
  4) Object 종류 – Table, View, Index, Default, Rule, Procedure, Trigger등이 있음

* START UP

Oracle

Sybase

%su – oracle
password:
%svrmgrl
SVRMGR>connect internal
SVRMGR>startup
SVRMGR>exit
%lsnrctl start

%su – sybase
password:
%cd install
%startserver -f RUN_SYBASE
%startserver -f RUN_SYS_BAKUP
※RUN_SYBASE, RUN_SYB_BACKUP는 Server name이므로 확인

* SHUTDOWN

 

Oracle

Sybase

%su – oracle
password:
%svrmgrl
SVRMGR>connect internal
SVRMGR>shutdown
SVRMGR>exit
%lsnrctl stop

%su – sybase
password:
%cd install
%isql -Usa -P
1>shutdown SYB_BACKUP
2>go
1>shutdown

 

* CREATE DATABASE


Oracle

Sybase

%sqlplus system/manager
SQL>create tablespace mpts/datafile ‘/data1/mpdb/mp.dbf’ size 100
default storage(
initial 64K
next 64K
pctincrease 0
minextents 2
);
Tablespace create.

SQL>create tablespace mptmpts/datafiile ‘/data1/mpdb/mp.dbf’ size 20M
deault storage(
initial 64K
next 64K
pctincrease 0
minextents 2
);
Tablespace create.

SQL>create user medpack
2 indetified by medpack000
3 default tablesapce mpts
4 temporary tablespace mptmpts
5 quota unlimited on mpts
6 quota unlimited on mptmpts;
User create.

SQL>grant connect, resource to medpack;
Grant Succeede.

※ 위 예제는 mpts, mptmpts라는 tablespace를 만들고 medpack이라는 User를 생성한다.
  mpts와 mptmpts의 비율은 8:2비율이 적당하고 User생성시 default tablespace와 temporary tablespace를 지정해 준다.
그런후에 connect와 resource라는 rule을 User에게 허용해 준다.

전체적인 순서는
1)2개의 Tablespace생성
2)User생성
3)User에게 rule허용
과 같다.

 

%isql -Usa -P
1>disk init
2>name = ‘mp_dev’,
3>physname = “/data1/mpdv/mp.dev”,
4>vdevno = 2,
5>size = 51200(page단위)
6>go

1>disk init
2>name = “mplog_dev”,
3>physname = “/data1/mpdb/mp.log.dev”,
4>vdevno = 3,
5>size = 10240
6>go

※100MB를 할당하려면 100 * 512 = 51200의 값을 사용한다.

1>create database mepackdb
2>on mp_dev = 100(Mega단위)
3>log on mplog_dev = 20
4>go

CREATE DATABASE: allocating 51200 pages…
CREATE DATABASE: allocating10240 pages…

1>sp_addlogin medpack, medpack000 medpackdb
2>go

Password correctly set.
Account unlocked.
New login created.
(return status = 0)

1>use medpackdb
2>go

1>sp_changedbowner medpack
2>go

Database owner changed.
(return status = 0)


위의 예제는 mp_dev, mplog_dev라는 2개의 device를 만들고 medpackdb를 만든다. 그런후에
medpack이라는 User를 만들어 medpackdb를 기본db로 설정한다. 그리고 나서 medpack의 소유권을
medpack으로 바꾸어 준다.

전체적인 순서는
1)2개의 device 생성
2)db생성
3)User생성
4)db의 소유권 변경
과 같다.

 

* DROP DATABASE

Oracle

Sybase

%sqlplus system/manager
SQL>drop user medpack cascade;

User dropped

SQL>drop tabelspace mpts
2 including contents
3 cascade contraints;

Tablespace dropped

SQL>exit

※그런후에 실제 data file를 삭제한다.

※위 예제는 medpack이라는 User와 그 User에게 할당된 tablespace를 삭제한다.
 전체적인 순서는
 1)먼저 User를 삭제(Drop)
 2)2개의 tablespace를 삭제(Drop)
 3)File System에 있는 File들을 삭제
와 같다.
 
※Oracle에서는 사실상 database는 하나만 존재한다. 각각의 User들은 tablespace를 할당받아 실제의 data를 저장한다.
따라서, User Space의 증가는 tablespace를 늘려주면 가능하다.
(Ref, alter tablesapce….)

%isql -Usa -P
1>drop database medpackdb
2>go

1>sp_dropdevice mp_dev
2>go

Device dropped.
(return status = 0)

※위 예제는 medpackdb이라는 이름의 database를 삭제하고 database가 사용하고 있던 device를 삭제한다. 그리고 나서 User를 삭제한다.
 전체적인 순서는
 1)database 삭제
 2)2개의 device삭제
 3)User삭제
 4)File System에 있는 File들을 삭제
와 같다

※Sybase에서는 device에서 일정한 양의 space를 할당받아 database를 만든다.
device를 만들 때 번호를 적당하게 지정해 주어야 하는데, sp_helpdevice라는 system procedure를 이용한다.

 

—————————————————————————————————————————————————————————-
출처 : http://www.digipine.com/?mid=programming&listStyle=gallery&sort_index=readed_count&order_type=desc&document_srl=218