젠장... 먼가 싶었다.

select * from emp as e where e.ename='JACK';     

이 SQL문이 이상하다고 느낀 적이 있는가?

그러나 오라클에서는 조금 달랐다.

select * from emp e where e.ename='JACK';     

즉, Table alias 에서 'as' keyword가 없다.

결론은???

오라클이 남들에 비해 늦게 표준을 적용한다는...

ㅋㅋ 찾아보기 전에 강사에서 물어봤더니... 단호하게 table alias는 'as' 붙이면 안됩니다. 그러는거다.

"왜요?" ... " 그냥 안됩니다."
"원래 SQL에는 as를 쓸수 있고, 생략이 가능한 걸고 알고 있는데... 오라클에서만 먼가 다른건가요?"..." table alias 사용시에는 'as' 쓰면 안됩니다."

"... 네..."

젠장. 그래서 혼자 찾았다. 근데, 많은 사람들이 궁금하지 않았는지... 별루 자료가 없더만...

결국 찾았다!~ 쿄쿄

SQL-92에서는 table alias에 'as' keyword를 사용하지 못하는 것으로 정의 되어 있다.

후에 정립된 SQL-99나 SQL-2003의 경우에는 'as' keyword를 사용할수도, 생략할 수도 있는 것으로 되었다.

근데... 남들 다 SQL-99 이상을 적용했는데... 오라클만 SQL-92를 기초하고 있다.

시대에 뒤쳐지는 오라클... 에휴...


원문 : error while loading shared libraries: libmysqlclient.so.10: cannot

error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory
 
1. libmysqlclient.so.10 파일을 find로 찾아 라이브러리 패스에 추가
# vi /etc/profile
export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:LD_LIBRARY_PATH
2. 라이브러리가 설치되어 있지 않다면 Mysql Shared-library 설치. (http://downloads.mysql.com/archives.php)
# rpm -ivh MySQL-shared-3.23.44-1.i386.rpm
 
 
symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
 
# vi /etc/profile
   export LD_ASSUME_KERNEL=2.4.1

'도서관 I > Database' 카테고리의 다른 글

Oracle Table Alias ㅡ,.ㅡ  (4) 2009.07.02
[바람이] sysbench-0.4.8  (0) 2007.09.03
[바람이] Mysql InnoDB - DoubleWrite  (0) 2007.08.07
[펌] MySql Storage Engines  (0) 2007.07.11
[바람이] MySql 5.0.37 Windows Source 설치 조건  (0) 2007.07.02
mysql의 innoDB를 사용하여 OLTP의 workload를 수행합니다.

정확한 인스톨및 사용법은 다음을 참고하시기 바랍니다.

http://sysbench.sourceforge.net/




P.S : MySQL에 TPC-C를 수행하는 시뮬레이터가 아닙니다.

InnoDB uses simulated asynchronous disk I/O: InnoDB creates a number of threads to take care of I/O operations, such as read-ahead.

There are two read-ahead heuristics in InnoDB:

  • In sequential read-ahead, if InnoDB notices that the access pattern to a segment in the tablespace is sequential, it posts in advance a batch of reads of database pages to the I/O system.

  • In random read-ahead, if InnoDB notices that some area in a tablespace seems to be in the process of being fully read into the buffer pool, it posts the remaining reads to the I/O system.

InnoDB uses a novel file flush technique called doublewrite. It adds safety to recovery following an operating system crash or a power outage, and improves performance on most varieties of Unix by reducing the need for fsync() operations.

Doublewrite means that before writing pages to a data file, InnoDB first writes them to a contiguous tablespace area called the doublewrite buffer. Only after the write and the flush to the doublewrite buffer has completed does InnoDB write the pages to their proper positions in the data file. If the operating system crashes in the middle of a page write, InnoDB can later find a good copy of the page from the doublewrite buffer during recovery.

원문 : http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&m_no=20752&cat1=14&cat2=422&cat3=448&lang=e

InnoDB의 버퍼를 공부하다 보니 DoubleWrite Buffer에 대해서 나오길래 찾다가 MySql 홈페이지에서 찾았다.

InnoDB는 시뮬레이티드 비동기 (simulated asynchronous) 디스크 I/O를 사용한다: InnoDB는 읽기-위주 (read-ahead)와 같은 I/O 연산을 잘 처리하기 위해 수많은 쓰레드를 생성한다.

 

InnoDB에는 두 가지의 읽기-위주 방법이 존재한다:

  • 시퀀셜 읽기-위주의 경우, InnoDB가 테이블스페이스에 있는 세그먼트에 대한 접속 패턴이 시퀀셜이라는 것을 인지한다면, 앞에 존재하는 데이터베이스 페이지의 읽기 배치 연산을 I/O시스템에 보낸다.
  • 무작위 읽기-위주의 경우, 만일 InnoDB가 테이블스페이스의 어떤 부분이 버퍼 풀 안으로 전체적인 읽기를 진행하는 것처럼 인지한다면, 나머지 읽기 연산을 I/O 시스템에 보낸다.

InnoDBdoublewrite라고 불리우는 기발한 파일 플러시 기법 (novel file flush technique)을 사용한다. 이 기법은 OS 크래시 또는 전원 문제 이후의 복구 연산을 보다 안전하게 하도록 하며, fsync() 연산에 대한 필요성을 절감시킴으로써 다양한 유닉스 버전의 성능을 향상시켜준다.

 

이중 쓰기란, 데이터 파일에 페이지를 쓰기 전에, InnoDB는 우선 페이지를 이중 쓰기 버퍼라고 불리우는 인접한 테이블스페이스에 기록한다는 것을 의미한다. 이중 쓰기 버퍼에 기록을 하고 이것을 플러시한 후에야 InnoDB는 그 페이지를 데이터 파일의 적당한 위치에 기록을 하게 된다. 만일 OS가 페이지 쓰기 중간에 크래시 된다면, InnoDB는 나중을 복구를 할 때 이중 쓰기 버퍼에서 제대로 된 페이지를 찾을 수가 있게 된다.



이는 한글 메뉴얼 site에서 번역본을 찾은 것이며, 조금 번역이 잘못된 것을 고쳐 보았다.


다음은 조금 이해하기 어려운 용어를 정리해 보았다. 도움이 되길...

* 읽기-위주 (read-ahead)
  - 딱히 번역할 말을 나도 찾지 못하겠다. 쩌비.
    우선, read-ahead란 일반적으로 데이터는 연속된 공간에 순차적으로 저장되어지는 점(locality)을 모태로 읽기 연산이 발행하면, 특정한 몇몇 페이지(단지 읽기의 단위를 표현하고 싶었다.)를 미리 같이 읽어 버리는 기법을 말한다. 즉, 여기에서는 버퍼에 7번 페이지를 읽어달라고 요청이 오면, 8번 페이지도 곧 읽기 요청이 올것이라고 예상하고, 미리 7번 8번 페이지를 같이 읽어들이는 기법을 말한다.
    이는, 8번이 될 수도 있고, 8~n번 페이지를 모두 동시에 읽을 수도 있으며, 이는 여러 알고리즘 기법에 따라 다르다.
    그리고, 꼭 8번이 되지 않을 수도 있으며, 임의(random)의 한 페이지을 미리 읽는 기법도 있으니, 참고하기 바란다. (위에 보니 나와있다... 헐... 미리 다 읽고 써야겠다.)

출처 : 팡두 님의 네이버 블로그
원문 : Mysql Storage Engine



Mysql Storage Engine

 

plug in storage engine 구조

             Table 별로 각자 다른 Storage Engine을 사용가능

하나의 Storage Engine에서 다른 Storage Engine으로의 변화를 간단한 SQL명령만으로 가능

                           ALTER TABLE mytable ENGINE-MyISAM;

#1. Storage Engin 별 특징

Feature

MyISAM

BDB

Memory

InnoDB

Archive

NDB

Storage Limits

No

No

Yes

64TB

No

Yes

Transactions(commit, rollback ,etc)

 

 

 

Locking granularity

table

page

table

row

row

row

MVCC/Snapshot Read

 

 

 

Geospatial support

 

 

 

 

 

B-tree indexes

 

Hash indexes

 

 

 

Full text serch index

 

 

 

 

 

Clustered index

 

 

 

 

 

Data Caches

 

 

 

Index Caches

 

 

Compressed data

 

 

 

 

Encrypted data(via function)

Store cost(space used)

low

low

N/A

high

very low

low

Memory cost

low

low

medium

high

low

high

Bulk Insert Speed

high

high

high

low

very high

high

Cluster database support

 

 

 

 

 

Replication support

foreign key support

 

 

 

 

 

Backup/Point-in-time recovery

 

Query cache support

Update Statistics for Data Dictionary

 

1. MyISAM

             1.1 기본적인 특징

l        MySQL의 기본 Storage Engine

l        Data 저장에 실제적인 제한이 없슴(논리적-물리적 제한은 있음)

l        Data를 매우 효율적으로 저장

l        빈번한 Data 사용의 부하를 잘 소화함

l        B-tree, R-tree그리고 Full-text Index를 지원

l        특정 Index에 대한 Memory Cache를 지원

l        Data 압축에 대한 옵션을 제공

l        지리적 Data를 지원

l        Table 레벨의 Lock을 지원

l        Transaction을 미 지원

l        Backup 및 특정 시점으로의 복구 지원

 

.frm

Table구조정보(스키마정보)

.myd

Data

.myi

Index 정보

DB는 디렉토리별로 생성/관리된다.
Table
은 디렉토리내 파일로 생성/관리되고, 하나의 Table 3개의 Data파일로 구성된다
.




Table을 구성하는 row는 다음과 같이 3가지 형식으로 분류할 수 있다.

**
고정포맷(fixed row format)

컬럼타입으로 varchar, text, blob을 사용하지 않을때.
가능하다면 가급적 고정포맷을 사용하는 것이 좋다
.
동적포맷보다 Memory사용이 적고, Index파일크기도 작아진다. 당연히 속도 또한 향상된다
.
파일구조의 고정길이레코드가 고정포맷, 가변길이레코드가 동적 포맷이라고 생각해주면 이해하기 쉬울 것이다
.

**
동적포맷(dynamic row format)

컬럼타입으로 varchar, text, blob을 사용할때. 주의) varchar(3)보다 작다면 고정포맷이 사용됨
고정포맷에 비해 디스크사용에 있어 효율성을 가지나, 속도는 상대적으로 느리다.
Table
에 빈번한 레코드의 수정/삭제가 이루어지면 단편화가 유발하므로 주기적인 optimize table이 요구된다
.
text, blob
은 별도로 저장되므로, optimize table을 수행할 필요성이 없다
.

**
압축포맷(compressed row format)

읽기전용이다.

myisampack명령어로 만들 수 있다.
디스크공간을 적게 차지하므로 CD Backup할 때 사용하면 된다
.

MyISAM
은 동시성제어를 위해 Table단위 Lock(table-level locking)을 사용한다
.
참고로, 대부분의 상용 DBMS들은 행 단위 Lock(row-level locking)을 사용한다
.
행 단위 Lock킹이 더 세밀하고 정밀한 제어가 가능한 반면, Table단위 Lock킹은 단순하다.


READ LOCAL lock
query
(select)에서만 사용됨.
갱신작업들을 블록. 다른 query문들은 블록 안됨
.
insert
문에서 .myd 파일의 끝에 Data를 추가하는 경우에는 블록 되지 않음
.

READ, or shared locks
모든 갱신작업들(insert는 모두 적용됨)이 블록 됨. myisamcheck는 이 Lock을 사용
.

WRITE, or exclusive locks
insert(
몇몇 종류만), update, delete시 사용됨. 다른 모든 읽기작업/쓰기작업이 블럭됨
.

Index : key buffer
에 캐싱되어 모든 MySQL 스레드들이 공유

Data : OS
의 캐싱에 의존.

주의) 캐싱에 대해

InnoDB
Index/Data 캐싱 모두를 관리하는 것에 비해 MyISAM, Index MySQL서버가 관리하고, Data는 관리하지 않는다.(Data OS캐싱에 의존한다는 의미)
InnoDB
innodb_buffer_pool_size, MyISAM key_buffer_size변수를 사용한다
.

자주 사용되는 Table들의 .myi파일크기를 합하면 대략적은 Index 캐싱크기를 구할 수 있다
.

3
가지 Index 사용가능: b-tree, r-tree, full text 트랜잭션 지원 안됨
.
mysqldump, mysqlhotcopy
Backup가능


MyISAM MERGE
Table
들을 union으로 묶은 일종의 view.
실제 Data는 기반Table들에 있음
.
보통 history Data나 로그를 가지는 Table들에서 사용됨
.
오라클의 파티셔닝과 그 개념이 유사
.

1.2 적합한 사용처

- 트레픽이 많은 웹사이트

- Data ware house

- 정적인 Table, 로그 Table
-
쓰기작업이 별로 없는 select 위주의
Table.
- current insert
기능이 read시에 insert가 가능하게 하므로 로그 Table에 사용될 수 있다
.

 

2. InnoDB

2.1 기본적인 특징

l        ACIDTransaction 지원

l        Table space 64TB Data의 저장을 지원

l        MyISAM보다 Data 저장 비율이 낮음

l        다른 Engine들에 비해 느린 Data 로드 속도

l        MVCC/Snapshot read를 지원

l        B-tree clusteredIndex를 지원

l        특정 DataIndex에 대한 Memory Cache 지원

l        외부키 지원

l        Data 압축옵션을 제공하지 않음

l        row레벨 Lock을 지원하며 여러가지 isolation레벨을 지원

l        자동 에러복구 기능

l        Backup 및 특정시점으로의 복구지원

 

ACID 트랜잭션, multi-versioning, row-level locking, foreign key제약조건 지원됨.
크래쉬후 자동복구 지원

Data
Index가 모두 저장되는 Tablespace 개념이 사용됨.
오라클의 Tablespace와 같이 여러개의 파일들로 구성될 수 있다
.
select
Lock킹이 필요치 않으며, 갱신작업들은 행단위 Lock킹을 사용
.
높은 동시성을 제공하지만, MyISAM에 비해 3배정도의 디스크 사용량을 요구함
.
최적의 성능을 위해 많은 Memory InnoDB buffer pool에 할당되어야 함
.
Cluster
Primary key btreeIndex 사용

commit
된 트랜잭션은 redo log에 기록되고, 이는 적정한 시간에 Tablespace에 기록된다.
mysqldump
Backup가능
.

참고
>
show variables
는 서버변수 값을 파악 시 사용한다. 오라클에서의 show parameter와 유사하다
.
mysql> show variables like 'have%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_bdb         | NO    |
| have_crypt       | NO    |
| have_compress    | YES   |
| have_innodb      | YES   |
| have_isam        | NO    |
| have_raid        | NO    |
| have_symlink     | YES   |
| have_openssl     | NO    |
| have_query_cache | YES   |
+------------------+-------+
9 rows in set (0.00 sec)

SQL> show parameter timed
NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------
timed_os_statistics                  integer     0
timed_statistics                     boolean     TRUE

2.2 적합한 사용처

- Online Transaction을 지원하는 Application

- 민감한 정보를 갖는 Table(회원Table, 돈에 관련된 Table)
-
갱신(읽기/쓰기) 위주의 트랜잭션이 요구되는
Table.
- Index
가 많이 걸린 대량의
Table.

3. MEMORY(HEAP)
모든 Data들은 Memory에 저장됨.
다른 Table타입들에 비해 속도가 월등히 빠르지만, 서버가 셧다운 시 Data는 모두 소실된다
.
동등조건( ex) where a=10) 검색에 HASH기반 검색을 제공한다
.
이는 범위 검색 시 Index가 사용되지 못한다는 것을 의미한다. varchar, blob, text컬럼 사용 못 함
.
4.1
버전부터는 tree기반 Index도 사용가능 함.

일시적으로만 사용되는 임시 Table.

 

4. Cluster(NDB)

4.1 기본적인 특징

l        Transaction 지원

l        모든 DataIndexMemory에 존재

l        TableMemory 제한은 5.1버전부터 사라짐

l        매우 빠른 Data 로드 속도

l        MVCC/Snapshot read지원

l        B-tree Index 지원

l        Primary key 사용시 최상의 속도를 나타냄

l        99.999% uptime을 제공

l        Cluster간 어떤것도 공유하지 않는 구조(shared Nothing)

l        SQL API와 함께 고속의 접근을 위한 API제공

l        Online Backup과 특정 시점으로의 복구 지원

 

4.2적합한 사용처

고가용성이 반드시 필요한 Application

고속의 Data/key look up이 필요한 Application

 

5. Archive

5.1 기본적인 특징

l        5.0에 새롭게 도입

l        자동적인 Data 압축을 지원

l        다른 Storage Engine 대비 80%의 저장공간 절약

l        실제적인 저장용량의 제한 없슴

l        가장 빠른 Data 로드 속도

l        MVCC/Snapshot read를 제공

l        Index 미지원

l        빠른 Insert 속도를 위해 특별한 입력 버퍼를 제공

l        Insert select만을 지원

l        row레벨 Lock을 지원

l        Backup 및 특정 시점으로의 복구 지원

Data베이스에는 빈번하게 사용되는 Data뿐만 아니라 의사 결정이나 통계에 사용하기 위해 계속 누적되는 Data도 많은 부분 존재한다. 이런 경우 Data베이스의 용량은 필연적으로 계속해서 증가하기 마련이고 이러한 Data가 차지하는 공간을 줄이고 효율적으로 사용하기 위해 도입된 것이 바로 Achive Storage Engine이다.

 

MySQL에서는 그 동안 빈번히 사용되지 않는 대용량 Data를 처리하기 위해 압축 MyISAM Table이라는 것을 사용했다. Achive Storage Engine이 압축 MyISAM Table에 비해 어떤 장점이 있는지 살펴보자.

 

압축 MyISAM Table MyISAM Table을 압축해 보관하는 것으로써 반드시 Table이 오프라인 상태여야 했지만 Achive Table Online 상태에서 모든 작업을 할 수 있다.

• MyISAM Table
을 압축하기 위해서는 DBA가 운영체제 상에서 myisampack이라는 유틸리티를 실행시켜야 했지만 Achive Table MySQL 클라이언트 상에서 MySQL SQL 커맨드로써 가능하다.

압축 MyISAM Table은 오직 SELECT만 가능하였지만 Achive Table SELECT INSERT가 모두 가능하며 끊김 없는 읽기 메커니즘을 통해 쓰는 동안 읽기 작업이 중단되지 않는다.

• Achive Table
은 일반 MyISAM Table에 비해 75%나 용량이 감소하며 압축 MyISAM Table에 비해서도 7% 이상 용량이 작다.

 

5.2 적합한 사용처

해를 두고 계속되는 Data를 위한 Data ware house

Data 저장 Application

Data 검사

 

6. Federated

6.1 기본적인 특징

l        5.0에 새롭게 도입됨

l        원격의 물리적 Data 베이스에 대한 논리적 Data 베이스를 생성

l        하나의 Data 베이스에서 다른 타겟 오브젝트로의 포인터역할

l        원격 Data 접근을 위한 특별한 미들웨어가 필요하지 않음

l        실행 속도는 네트워크 요소에 따라 좌우됨

l        실제 Data 베이스의 Engine 특성에 따라 처리됨

l        Table 정의를 통한 SSL보안 처리

l        모든 SQL 오퍼레이션 지원( as per target object)

 

6.2 적합한 사용처

분산 Data 베이스 환경

Federated Storage Engine은 오라클의 DB Link와 같은 기능의 Storage Engine으로써 원격 서버에 있는 Table을 로컬 Table과 같이 사용할 수 있도록 한다. 이를 통해 여러 대의 MySQL 서버를 용도에 따라 구분하고 필요한 경우에는 서로 참조해 사용할 수 있다.

 

Federated Storage Engine의 사용은 매우 간단한 작업만으로 가능하다. 두 대의 MySQL 서버를 사용한다고 가정하고 어떻게 Federated Storage Engine을 사용할 수 있는지 알아보자. 먼저 실제로 Table이 생성되고 Data가 저장될 MySQL 서버에 다음과 같이 Table을 만들었다.

 

그리고 이 Table은 원격에서 사용하는 서버에 다음과 같이 Federated Storage Engine 기반의 Table을 만들어서 바로 사용할 수 있다.

 

 

7. 기타 StorageEngine

7.1 기본적인 특징

l        RAM에 상주하는 Memory Table; Data가 셧다운시 사라짐

l        Memory Table B-tree Hash Index 둘다 지원함

l        BDB Table Commit/rollback Transaction 지원을 제공

l        Merge Table은 기본적으로 MyISAM Table의 모음

l        Merge TableData 파티셔닝의 한 방법

l        커스텀 Storage Engine 역시 Mysql에 사용가능

 

7.2 적합한 사용처

l        Memory: Data 오브젝트의 빠른 검색

l        BDB : Online Transaction 프로세싱

l        Merge : 분할된 Data를 가진 대용량 Data 베이스

l        커스텀 : 특별 Application 상황


로깅이나 검색에서는 MyISAM

등록정보나 배너시스템에서는 InnoDB
임시Table, 뉴스의 헤드라인, 로드가 많은 페이지의 Data에 대해선 heap을 사용한다.

우선 지금 설치하고자 하는 MySql의 버전을 확인하시기 바랍니다.
지금은 mysql 5.0.37 입니다.
메뉴얼에 나와있는 버전은 2.4.14.6 이네요.

* 설치 조건
1. windows 2000 , XP나 그 이후 버전에서 동작함
    단, vista에서는 Visual Studio 2005가 인스톨되어 있어야 함

2. CMake. CMake는 다음 경로에서 다운 받을 수 있음
   http://www.cmake.org/ 
   download에 가서 최신 버전을 다운 받으면 됨

3. Microsoft Visual C++ 2005 Express Edition,
    Visual Studio .Net 2003 (7.1),
    Visual Studio 2005 (8.0)
    중에 하나의 Compiler System이 있어야 함 (VS 6.0은 안될 거 같네요. 저두 인스톨 중)

4. 만약 Visual C++ 2005 Expreess Edition을 사용한다면, 다음 싸이트에서 자신에 맞는 SDK를 다운받아서
   사용할 것
   http://msdn.microsoft.com/platformsdk/

5. 3GB~5GB의 여유 공간

이정도 입니다.


출처 : 한국리눅스유저그룹
원문 : MySQL 소스 인스톨 완전해부

MySQL 소스 인스톨 완전해부

MySQL 소스 인스톨  

[EUC_KR 정렬옵션 추가  및 한글 메시지 사용]

MySQL에서 한글 캐릭터 셋으로 정렬을 하기 위해서는 소스 컴파일을 해야 한다. 바이너리 배포판은 Latin1으로 설정되어 있어 한글로 정렬이 제대로 되지 않는다. 검색이 되지 않는 것은 아니다

컴파일 전에 반드시 확인해야 할 사항은  C 컴파일러의 버전이다 gcc 2.7.x 버전은 버그가 있으므로 MySQL을 설치하기 위해서는 꼭 2.8.x 버전으로 업그레이드하자.
레드햇 6.0  이상의 LINUX 라면 전혀 문제가 없다.

1) 설치준비

우선 http://www.mysql.org에서 최신 버전의 소스를 받아온다.
이 글을 쓰고 있는 현재 최신 버전은 3.23 베타 버전과 3.22.25 버전이다.
/tmp에 소스배포판이 있다고 가정하고 컴파일을 시작하자 먼저 압축을 푼다

압축풀기 : zcat mysql-version.tar.gz | tar xvf -
[root@localhost /tmp]# zcat mysql-3.22.23b.tar.gz | tar xvf -
                       mysql-3.22.23b/
                       mysql-3.22.23b/Makefile.in
                       mysql-3.22.23b/README
                       mysql-3.22.23b/stamp-h.in
                       mysql-3.22.23b/Makefile.am
                ...
                ...
                 ...
                mysql-3.22.23b/support-files/mysql.spec.sh
                mysql-3.22.23b/support-files/my-example.cnf.sh
                mysql-3.22.23b/support-files/mysql-log-rotate.sh
                mysql-3.22.23b/support-files/mysql.server.sh
                mysql-3.22.23b/support-files/binary-configure.sh

2) configure 스크립트 실행

압축이 풀린 디렉토리로 이동한후 cofigure 를 실행한다 사용가능한 옵션을 자세히 보려면 --help 를 붙여주면 된다.

[root@localhost /tmp]# cd mysql-3.22.23b
[root@localhost mysql-3.22.23b]# ./configure --help
            Usage: configure [options] [host]
            Options: [defaults in brackets after descript-xions]
            Configuration:
              --cache-file=FILE       cache             test results in FILE
              --help                              print this message
              --no-create                         do not create output files
              --quiet, --silent       do             not print `checking...' messages
              --version                           print the version of autoconf that created configure
              ...

다른 옵션은 모두 디폴트 값을 쓰고 --prefix=PREFIX 와  --with-charset=CHARSET 두가지만 설정을 하겠다.

--prefix : 컴파일이 끝난 후 파일들이 인스톨되는 디렉토리를 정해준다.
--with-charset  : 정렬에 사용될 캐릭터 셋을 정해 준다. 한글정렬을 위해 필요하다.
 
기본적으로 정해진 값은 latin1 이며 다음 값들 중 하나로 설정해 줄 수 있다.

 use specified charset (default is latin1, must be one of: big5 danish cp1251 cp1257 croat czech dec8 dos euc_kr german1 hebrew hp8 hungarian koi8_ru koi8_ukr latin1 latin2 swe7 usa7 win1251 win1251_ukr ujis sjis tis620)

그럼 두 가지 옵션을 주고 configure 스크립트를 실행하자. 설치될 디렉토리는 /usr/local/mysql 로 하고 euc_kr 정렬 옵션을 준다

                #./configure --prefix=/usr/local/mysql --with-charset=euc_kr

 loading cache ./config.cache
            checking host system type... i586-pc-linux-gnu
            checking target system type... i586-pc-linux-gnu
            checking build system type... i586-pc-linux-gnu
            checking for a BSD compatible install... (cached)
            ...
            ...
            ...
           
MySQL has a Web site at http://www.tcx.se/ which carries details on the latest release, upcoming
features, and other information to make your work or play with MySQL more productive. There you can
also find information about mailing lists for MySQL discussion.

Remember to check the platform specific part in the reference manual for hints about installing on your platfrom. See the Docs directory.
           
Thank you for choosing MySQL!

3) make


이제 본격적으로 컴파일할 준비가 끝났다. 마음을 가다듬고 컴파일을 시작하자

[root@localhost mysql-3.22.23b]# make
                          make  all-recursive
                   make[1]: Entering directory `/tmp/mysql-3.22.23b'
                   Making all in Docs
                   make[2]: Entering directory `/tmp/mysql-3.22.23b/Docs'
                   make[2]: Nothing to be done for `all'.
                   ...
                   ...
                   ...

컴파일 시간은 AMD K6-2 350MHz, 64M RAM을 가진 PC에서 5분 20초 정도 가 소요되었다. 참고로 예전에 3.21.20 버전을 486DX66 , RAM 16M의 리눅스 머신에서 컴파일 했을 때는 2 시간 30분 정도 걸렸던 기억이 난다. 만일 컴파일 중에 문제가 발생하면 INSTALL-SOURCE 파일을 참고한다. 여러 가지 상황별로 문제 해결 방법이 자세히 설명되어 있다.

4) make install

컴파일에 의해 만들어진 파일들을 인스톨하자

[root@localhost mysql-3.22.23b]# make install      
                   Making install in Docs
                   make[1]: Entering directory `/tmp/mysql-3.22.23b/Docs'
                   make[2]: Entering directory `/tmp/mysql-3.22.23b/Docs'
                   make[2]: Nothing to be done for `install-exec-am'.
                   /bin/sh ../mkinstalldirs /usr/local/mysql/info
                   mkdir /usr/local/mysql
                   ...
                   ...
                   ...
                   make[2]: Leaving directory `/tmp/mysql-3.22.23b'
                   make[1]: Leaving directory `/tmp/mysql-3.22.23b'
[root@localhost mysql-3.22.23b]#

5) 권한 테이블 초기화 :  mysql_install_db 실행

인스톨이 완료된 MySQL 디렉토리로 이동한다

[root@localhost mysql-3.22.23b]# cd /usr/local/mysql 

그 다음은 MySQL 데이터베이스의 각종 권한을 관리하는 데이터베이스 mysql에 테이블을 생성하는 스크립트를 실행해야 한다. 

/usr/local/mysql/bin에 있는 mysql_install_db 스크립트가 그 역할을 한다.

참고로 바이너리 베포판은 이 파일이 script-xs 디렉토리에 있다.

기본 테이블 생성 : ./bin/mysql_install_db
[root@localhost mysql]# ./bin/mysql_install_db
                 Creating db table
                 Creating host table
                 Creating user table
                 Creating func table
                 Creating tables_priv table
                 Creating columns_priv table

To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system
           
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
This is done with:
    /usr/local/mysql/bin/mysqladmin -u root password 'new-password'
See the manual for more instructions.
           
Please report any problems with the /usr/local/mysql/bin/mysqlbug script-x!

The latest information about MySQL is available on the web at http://www.mysql.com
            Support MySQL by buying support/licenses at http://www.tcx.se/license.htmy.
           
[root@localhost mysql]#
 
데이터 파일의 위치는 /usr/local/var 이며 데이터베이스는 디렉토리로 테이블은 파일로 존재한다. 참고로 바이너리 인스톨 시에는 데이터 디렉토리는  /usr/local/mysql/data 이다.

권한 테이블들이 만들어졌으면 먼저 MySQL root 유저의 패스워드를 변경해야 한다.
시스템의 root와는 전혀 상관이 없는 MySQL 의 기동, 권한관리, 데이터베이스 사용자 등록 등의 작업을 하는 사용자 이다.

MySQL root 암호 변경방법
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'

위와 같은 방법으로 변경한다.

그러나 다음과 같은 에러가 발생할 것이다.
[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -u root password '1234'
 /usr/local/mysql/bin/mysqladmin: connect to server at 'localhost' failed
 error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)'
 Check that mysqld is running and that the socket: '/tmp/mysql.sock'  exists!
 [root@localhost mysql]#

원인은 MySQL 의 데이터베이스 서버 데몬이 동작하지 않기 때문이다.

6) MySQL 서버 데몬의 기동 : safe_mysqld

safe_mysqld 스크립트는 서버 데몬인 mysqld (MySQL 디렉토리의 libexec 에 있다) 를 시작하거나 비정상적으로 종료된 경우 재시작 한다.

먼저 데몬을 기동 시키자. 한글로 메시지를 보기 위해  옵션을 줄 수 있다.

# ./bin/safe_mysqld --language=korean &
     
=====
팁 : MySQL 의 각종 메시지를 한글로 보기를 원하면 --language=korean 옵션을 이용한다.
======

그리고 서버 데몬을 백그라운드로 동작시키기 위해 반드시 명령 뒤에 &를 붙여준다

[root@localhost mysql]# ./bin/safe_mysqld &                                               
                       [1] 24879

[root@localhost mysql]# Starting mysqld daemon with databases from  
                        /usr/local/mysql/var  <- enter 를 한번 쳐준다
[root@localhost mysql]#

프로세스를 확인해 보자

[root@localhost mysql]#  ps -ef | grep mysql
 root     24879   634  0 23:33             pts/1    00:00:00 sh ./bin/safe_mysqld
 root     24891 24879  0 23:33 pts/1                00:00:00 /usr/local/mysql/libexec/mysqld
 root     24893 24891  0 23:33 pts/1                00:00:00 /usr/local/mysql/libexec/mysqld
 root     24894 24893  0 23:33 pts/1                00:00:00 /usr/local/mysql/libexec/mysqld
 root     24909   634  0 23:41             pts/1    00:00:00 grep mysql
     
위와 같이 3개의 데몬이 떠 있으면 정상이다.

pstree 명령으로도 확인해 보자

[root@localhost mysql]#  pstree  
           
            init-+-atd
                 :
                 |-hanterm---bash-+-pstree
                 |                            `-safe_mysqld---mysqld---mysqld---mysqld
                 :


7) 관리자 암호 변경
이제 데몬이 기동 되었으니 다시 한번 암호변경을 시도해 본다.

[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -u root password '1234'
[root@localhost mysql]#
     
언제나 그렇듯이 무소식이 희소식이다.


8) 테스트

정상적으로 동작하는지 몇 가지 테스트를 해보자. 우선 mysql 이라는 클라이언트 프로그램을 이용해 권한관리 데이터베이스인 mysql에 접속해 보자

사용법 : ./bin/mysql [OPTIONS] [database]

더 많은 옵션을 알고 싶으면 ./bin/mysql --help 라고 입력하면 된다.

[root@localhost mysql]# ./bin/mysql mysql                               
ERROR 1045: 'root@localhost' 사용자는 접근이 거부 되었습니다. (Using password: 아니오)

접속이 거부되었다는 에러가 발생하였다. 당연하다 위에서 이미 MySQL 관리자 암호를 변경했기 때문에 암호를 이용해야 한다.

[root@localhost mysql]#  ./bin/mysql -p1234 mysql

위와 같이 passwd를 의미하는 -p 옵션 뒤에 공백 없이 암호를 입력하면 된다.

다음과 같이 -p옵션을 이용하고 나중에 암호를 입력하는 방식이 좀더 바람직하다.

[root@localhost mysql]# ./bin/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 MySQL monitor.  Commands end with ; or g.
  Your MySQL connection id is 5 to server version: 3.22.23b

  Type 'help' for help.
         
  mysql>

           
몇 가지 명령을 각자 테스트  해 보자
           
mysql> status
      --------------
      ./bin/mysql  Ver 9.32 Distrib 3.22.23b, for pc-linux-gnu (i586)
Connection id:                      6
            Current database:       mysql
            Current user:                       root@localhost
            Server version                      3.22.23b
            Protocol version        10
            Connection                          Localhost via UNIX socket
            UNIX socket                         /tmp/mysql.sock
            Uptime:                             8 min 43 sec

Threads: 1  Questions: 37  Slow queries:             0  Opens: 10  Flush tables: 1  Open tables: 6
            --------------

mysql> select pi()*4/10 ;
            +------------+
            | pi()*4/10  |
            +------------+
            | 1.25663706 |
            +------------+
            1 row in set (0.00 sec)

mysql> select 'Hello World? I'm MySQL' AS string1;
            +------------------------+
            | string1                |
            +------------------------+
            | Hello World? I'm MySQL |
            +------------------------+
            1 row in set (0.00 sec)

           
mysql> select now() ;
            +---------------------+
            | now()               |
            +---------------------+
            | 1999-07-16 00:05:42 |
            +---------------------+
            1 row in set (0.00 sec)

           
mysql> use mysql
       Database changed
       mysql> desc user ;
       +-----------------+---------------+------+-----+---------+-------+
       | 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       |       |
       +-----------------+---------------+------+-----+---------+-------+
       17 rows in set (0.00 sec)

mysql> select Host, User ,Password , Select_priv, Insert_priv from user ;
     +-----------------------+------+------------------+-------------+-------------+
     | Host                  | User | Password         | Select_priv | Insert_priv |
     +-----------------------+------+------------------+-------------+-------------+
     | localhost             | root | 446a12100c856ce9 | Y           | Y           |
     | localhost.localdomain | root |                  | Y           | Y           |
     | localhost             |      |                  | N           | N           |
     | localhost.localdomain |      |                  | N           | N           |
     +-----------------------+------+------------------+-------------+-------------+
     4 rows in set (0.00 sec)

           
mysql> q
       Bye
[root@localhost mysql]#
     
9) MySQL 서버 중지
MySQL서버의 동작을 중지시키기 위해서는 다음의 명령을 사용한다.

==============================
서버 중지 :  ./bin/mysqladmin  shutdown
=============================
[root@localhost mysql]# ./bin/mysqladmin -p shutdown                    
                       Enter password:
[root@localhost mysql]# mysqld daemon ended

[1]+  Done
./bin/safe_mysqld --language=korean

[root@localhost mysql]# 
     
이상으로 소스배포본의 컴파일 작업은 모두 끝났다. 뒷부분에서 MySQL에  대해 더욱 자세히 다룰 것이다.


He can do, She can do, why not me?
1. mysql 각종 설정 확인

mysql> status



2. database확인
 
mysql> show databases;
+--------------------+
| Database                |
+--------------------+
| information_schema |
| mysql                     |
| test                        |
+--------------------+
3 rows in set (0.00 sec)
mysql>



3. database 선택

mysql> use test



4. database 내에 table 확인 (먼저 use를 통해 database를 선택해야 함)

mysql> show tables;


5. database  생성 및 table 생성

mysql> create database [database 이름];
mysql> use [database 이름];
mysql> create table [table 이름] ([Attr 이름] [Attr 타입] , [Attr 이름] [Attr 타입] ... );

6. table의 schema 보기

mysql> describe [table 이름];







이번에 졸업 논문에 MySql을 사용하게 되었다.
때문에 여기저기 돌아다니다가 겨우 알게 된 링크.
영어실력이 부족해서인가... 왜이리두 찾기 어려웠던지...

운영체제 별로 정리되어 링크가 있다.
링크의 제일 마지막에 가면 windows & linux 용 소스 코드도 있다.

이제 이걸 어떻게 인스톨하는지는 해보고 나서 다시 올려야징... 아웅...

오늘은 여기까징!

http://dev.mysql.com/downloads/mysql/5.0.html

이번에 KCC 2007 학술대회에 참가했다.
플래시 메모리 기반 데이터베이스에 대해서 발표를 했다.
그런데, 하필 좌장이셨던, 이우기 교수님께서 TPC-C에 대해서 질문을 하셨고, TPC-C를 잘못 알고 있던 나는 잘못 대답을 하고 말았다.
그 순간, "그게 아니고..." 라는 이우기 교수님의 말씀에, 얼마나 창피하던지...
ㅋㅋ, 가만히 있으면, 중간이라도 간다고... 하필, 대답을 해서리... ㅋㅋ @^-^@
하긴... 그때 분위기가 가만 있을 수 없는 분위기이긴 했다.
그때, 이우기 교수님의 표정은, "어서 대답을 해보게나." 라는 눈빛이였기 때문에 어쩔 수가 없었다.
아무튼, 다신 TPC에 대해서는 잊지 않으리라!!!

정리 들어갑니다.!!!
대부분은 네이버에서 가져온 겁니다. 쩌비... 제가 멀 아나요... 흑흑

1. TPC란?
   트랜잭션 처리 성능 평의회(Transaction Processing Performance Council)에서 발표한 벤치마크(benchmark) 테스트 모델들이다. 보통 TPC라고 하면, 트랜잭션 처리 성능 평의회를 뜻하지만, TPC-alphabet 으로 표기 하여, 벤치마크 테스트 모델을 이야기 한다. TCP는 온라인 트랜잭션 처리(Online Transaction Processing) 시스템의 처리 성능을 평가하는 기준이 된다.

2. 트랜잭션 처리 성능 평의회란?
온라인 트랜잭션 처리(OLTP) 시스템의 처리 성능을 측정하는 성능 평가 기준의 표준 규격을 제정하기 위해 1988년에 결성된 비영리 단체. 사무국은 미국 캘리포니아 주의 산호세에 있다. 미국의 탠덤, DEC, IBM, 영국의 ICL, 일본의 NEC 등 OLTP 시스템 제조업체 34개사와 반도체 제조업체, 사용자 단체 등이 참가하여 OLTP 시스템의 성능 평가 기준을 ‘TPC 벤치마크’라는 이름으로 발행하고 있다. 1989년에 발표한 TPC 벤치마크 A 모델을 시작으로 TPC-A, TPC-B, TPC-C, TPC-D 등 4종류의 표준 규격을 결정했으나 이들은 이미 구형이 되었고, TPC-H(애드 혹 결정 지원), TPC-R(비즈니스 보고 결정 지원), TPC-W(웹 전자 상거래) 등이 새로이 규격화되었다. TPC 벤치마크를 공표하기 위해서는 TPC 위원회에 완전 공개 보고서(FDR:Full Disclosure Report)를 제출하여 승인을 받아야 한다. FDR에는 테스트 실시 시의 시스템 구성이나 가격을 명시해야 한다. TPC 벤치마크는 네트워크를 포함하는 하드웨어 성능과 운영 체계(OS)를 포함하는 소프트웨어 성능을 종합해서 평가할 수 있는 것이 특징이다. TPC 벤치마크의 결과는 성능치와 가격 대 성능비로 표시된다.

3. TPC-A
1989년에 최초로 발표된 규격으로, 은행 창구 업무를 모델로 한 OLTP 시스템 전체의 기본적인 성능을 측정하는 것이다.

4. TPC-B
1990년에 발표되었는데, TPC-A 모델과 대체로 같으나 온라인 처리의 부하를 테스트 내용에서 제외했다. 측정 결과는 tps(초당 트랜잭션 수)로 표시한다. 단말 장치 등을 포함하는 시스템 전체의 가격 공표를 의무화하고 있어서 다른 벤더들의 시스템을 가격 대 성능비로 비교할 수 있다.

5. TPC-C
1992년에 발표되었는데, TPC-A 모델이나 TPC-B 모델보다 복잡한 유통업의 수주·발주 온라인 시스템의 성능 평가를 위한 것이다.

6. TPC-D
트랜잭션 처리 성능 평의회 TPC 에서 제정하여 발표하는 온라인 트랜잭션 처리 OLTP 시스템의 처리 성능을 측정하는 벤치 마크 표준 규격의 D 모델 의사 결정 지원 시스템 DSS 의 성능을 평가하기 위한 것이다



어째, 다 가져다 붙인거 같은 느낌이 들긴 하지만, 한 눈에 보고 정리하시길...
근데, 당최 내가 잘못 대답한 웹에서 여러 유저들이 동시에 게시판에 접근하는 질의를 평가하는 모델은 어떤거얌???
보아하니, TPC-A~D 에는 없는거 같은데... 아놔~~~

+ Recent posts