레이블이 mySQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mySQL인 게시물을 표시합니다. 모든 게시물 표시

2009년 5월 12일 화요일

ActivePerl사용시 DBD::mysql 설치

DBD::mysql - A Perl5 Database Interface to the MySQL database
=============================================================

The driver installation is described in

  INSTALL.html

In short: If you are using

  Windows/ActivePerl

    1.) If you need to use an HTTP Proxy, set the environment
        variable http_proxy, for example like this:

          set http_proxy=http://myproxy.com:8080/

    2.) The actual installation is as simple as

   ppm install DBI
          ppm install DBD::mysql

        As of this writing, the above procedure won't work with
        ActivePerl 5.8.0, because so far a PPM for DBD::mysql is
        not available from the ActiveState server. I don't know
        why. However, Randy Kobes has kindly donated a PPM package
        to his own repository. You can use this as follows:

          ppm install http://theoryx5.uwinnipeg.ca/ppms/DBD-mysql.ppd

2008년 11월 13일 목요일

mySQL 서비스 정리

mySQL은 GPL 라이센스 이다.
  흠 GPL 라이센스에 대해 읽은 것은 많은데 딱히 뭐라 설명하긴 뭐하네.

mySQL standard
   무료이며 누구나 다운 받아 사용할 수 있다.

mySQL enterprise
    유료이며 지원을 받을 수 있고 추가적으로 모니터링 솔루션이 제공된다.

mySQL cluster
    무료이지만 지원을 받지 않고 사용하기 불가능 할 것 같다.
    내용은 혁신적이다 read/ write를 분리하며 failover도 제공한다.

mySQL embedded
    C라이브러리로 제공되며 s/w혹은 h/w 제품을 개발할때 자료 관리를 할 수 있도록 해준다. 프로세스에 mysql을 숨긴다.

Goals of mySQL
    performance, easy to use, reliabilty - 흠 우리랑 100% 동일한데..ㅋㅋ

하지만 일반(우리)와의 차이점 이라면
    이거 좋아?? -> 흠 우린 언제 좋아지나.

경쟁 우위
    storage engine, engine에 따라 memory, store를 결정할 수 있다.
    사용 목적에 따라 db engine의 변경도 자유로움

제공하는 서비스
    level     : bronze, silver, gold, platinum
    access : 7   , 16, unlimit, unlimit
    knowledge base: v,v,v,v
    emergency: x, x, 1hour, 30min

    위와 같이 고객 서비스 차별화를 통해 돈을 벌 고 있음. 해도 그만 안 해도 그만 헌데 하면 막 좋을 것 같은 이런 기분이랄까....


mySQL cluster
    network distribute server 라고 하는데 내용인 즉슨 여러 서버를 tcp/ip로 묶어 작은 패킷을 사용해 데이터를 서로 공유 한다고 함 ( xml을 사용하지 않는것을 강조 했는데 쓸데없는 overhead를 줄이기 위해서 라고 함 그것을 binary protocol이라고 했는데 뭔지 모르겠음), 위에서도 언급했다시피 storage engine에 따라 사용 목적이 다른데 isam engine같은 경우 read는 빠르나 transaction 처리가 없다 이럴때 사용자는 innoDB engine을 사용하는 db에 내용을 넣고 sync된 데이터는 isam engine에서 읽어가면 된다...말 어렵군..

   
사용자 삽입 이미지

내가 원한 그림은 아닌데...모 이런 식임..

그리고 또 하나 중요한 비즈니스는 교육
    DBA, Developer등의 교육이 있을 뿐 아니라 강사가 되기 위한 교육도 있음. 흠 강사라.

Support에 대해선
    support is one reason of choose mysql, all suppotor can fix souce code

case study
    adobe cs는 mysql embedded 솔루션이 들어가있음

apache
    mod_memcached 란것이 있음 - mod_perl과 비슷하게 메모리에 상주해서 mysql의 performance를 높여 주는기능 인듯

performance tunning service
    benchmark tool사용
    scenario를 잘 구성해서 test를 해봐야 함.
    multi user가 access해야 함 등등의 조건이 있었음
    * 가장 중요한 핵심은 테스트 환경을 올바로 구성해야 제대로 된 데이터를 뽑아 낼 수 있음

    이전, 이후, bottle neck분석 등이 된 되는 지식 서비스..

my.conf 에 대해
    mysql의 설정은 my.conf를 통해서 이루어 진다.

show status
    상태 확인

sort_buffer_size와 관련된 parameter
    > show_status 명령
     | Sort_merge_passes        | 3078       | !!shold be zero
     우리 서버는 3078 이나 되네..흠흠...sort_buffer_size를 늘려야 함


join_buffer_size
query_cache_size
query_cache_type
    > Qcache_hits - to get data
    > Qcache_lowmem_prunes

show innodb stats
    InnoDB_buffer_pool_size
    InnoDB_buffer_file_size
우리는 innoDB를 사용하진 않음.

show status like '%key%';

여러 팁 ( myisam engine )
    sort할 필드도 index를 만들어 줘야 함
    declare not null if true; - 이건 지금도 사용하는 중
    key(a,b) 일 경우 where b=5 만 사용할 경우 index를 사용하지 않는다.
        정말일까?

unique index, btree index, force index에 관한 언급이 있었음

status 초기화를 통해 상태를 더욱 잘 볼 수 있음
flush status;
run query;
show status;
흠 데이터가 너무 커서 서버를 리부팅 해야 할까??

clustering != Replication
    뭐가 다른데?

Memcached clustering

사용자 삽입 이미지
메모리에 db를 올리는건데 우리 orders자료는 수백만 건인데 어찌 다 올리지? 가능할까?

case 또 나옴
    leapfrog school house 란 교육용 solution만드는 회사 소개 함
        classroom management system

    adobe 는 libmysqld라는 library사용 중
    POS 나 biotech에서도 사용 중

    zimbra - collaboration tool에서도 사용 중
        예전에 본 적 있는데 혁신적이던데.
 
    S2 NetBox - security h/w embedded linux & mysql

mysql 2008

mySQL이 sun에 흡수되고서는 확실히 우리나라에서 마케팅이 활발해 졌습니다.

sun도 모든 os를 open했으며 mySQL을 도입 함으로써 오픈소스 시장의 법칙을 확실히 깨닫고 있다는 느낌입니다.

제가 생각하는 오픈소스의 법칙은 뭐 간단합니다.
일단 개발을 하고 관심있는 사람들을 끌어 들이죠, 물론 참여하기 좋아하는 사람들이 있기 마련이고 일단 발을 들여놓은 사람들은 활동적이고 열정적인 사람일 가능성이 많죠, 이거 참 좋으네 후끈..사람 구하기가 정말 힘든데 ㅎㅎㅎ

그렇다면 돈도 안 들이고 함께 구할 사람도 구하며 무료이기 때문에 사용자를 넓힐 수 있는거죠, 물론 먹고 살 걱정이 있어선 안되겠죠, 자신의 일 80, 나머지 20 입니다.

그러다 일이 잘되면 회사를 만들고 비즈니스를 하되 프로그램 판매가 아닌 컨설팅 및 support가 주된 수익 모델이 되는거죠, 물론 enterprise버젼은 추가 기능과 함께 서비스도 구매 해야 하고 말이죠.

개인도 여러개의 오픈소스 프로젝트에 참여 할 수도 있겠죠, 물론 성공하는 프로젝트도 있겠지만 수 많은 실패 하는 프로젝트도 있을 겁니다. 자연계의 경우를 보더라도 수 많은 실패가 있어야 그 중 성공이 탄생하는 법이죠, 거대 기업이 오픈 소스를 이기기 힘든게 이 이유라고 합니다.

거대 기업은 기업의 특성상 수 많은 실패를 할 수는 없거든요. 그들은 돈이 될만한 프로젝트만을 진행하며 한 번 진행할때 올인할 수 밖에 없는 특성을 가지고 있습니다.

흠 어떤 오픈소스 프로젝트를 해봐야 할까? 흠흠...

sun에서 공식 블로그를 열었다고 대대적으로 홍보를 하더라구요. 헌데 오류나네요

어제 mySQL 2008 컨퍼런스에 갔더니 공식 블로그에 참여 하라고 대대적 홍보를 하더라구요.
냉큼 들어가서 가입을 해 봤죠..
사용자 삽입 이미지
모 이멜을 넣는 부분이 없는데도 불구하고 오류 메시지는 email이 없다는 것 같으네요.
이게 저만 발생하는 오류 일까요?
ㅋㅋㅋ

오후에 또 한 번 가입 해 봐야겠습니다.

2008년 5월 14일 수요일

group 별 데이터의 row의 개수를 셀 때.

이럴때 사용하는것이 distinct임

SELECT COUNT(DISTINCT order_id) cnt FROM orders 
           where _date >= '2008-01-15'
             and _date <= '2008-05-14'
            
모 위와 비슷한 식으로써 사용이 가능

2008년 2월 14일 목요일

테이블 덤프 dump

Table을 Backup하기 전에 Lock을 하는게 좋다.

Flush는 active한 전체 index가 backup전에 disk에 기록되도록 하는 명령임

Backup을 수행하기 전에 Table을 Lock하구 Fush Table해야 함.


Syntax :
Backup Table 명령을 실행하면된다네..

Syntax :

BACKUP TABLE tbl_name [, tbl_name] ... TO '/path/to/backup/directory'



또 다른 방법..

mysqldump 프로그램이나 mysqlhotcopy script 을 사용해도 됨

 

shell> mysqldump --opt db_name > backup-file.sql

shell> mysqldump [options] db_name [tables]

okis의 예

 mysqldump --opt pimz ok_product ok_review -p > /home/pimz/public_html/okis/dump_1.sql


Restore

shell> mysql db_name < backup-file.sql

2007년 10월 31일 수요일

query한 결과를 table에 넣기

예제:
insert into aa ( id )
         select user_name as id from user;

>>-INSERT  INTO--table_name--+-----------------------+---------->
                             |    .-,-----------.    |
                             |    V             |    |
                             '-(----column_name-+--)-'

                .-,-----------.
                V             |
>--+-VALUES--(----+-literal-+-+--)-+---------------------------><
   |              +-NULL----+      |
   |              '-DEFAULT-'      |
   +-select_statement--------------+
   '-DEFAULT VALUES----------------'


table 생성

create table Q1_00_Sales
   (product char(30), month char(5), dollars dec(7,2));


값 입력




insert into Q1_00_Sales (product, month, dollars) select prod_name, month, dollars from sales natural join product natural join period natural join store where qtr = 'Q1_00' and city like 'Los Gatos%'

2007년 10월 24일 수요일

[query] 특정 문자 삭제, 특정 문자 추가

# 특정 문자 삭제
update products set name= replace(name, '(K)', '') where  product_id="8B3OJ02SBKZ55";  

# 특정 문자 삽입
update products set name= CONCAT('(K)', name) where  product_id=' 8B26T100GRZXL ;

2007년 9월 20일 목요일

query결과 file 저장 샘플

SELECT seq,pack,trans_no,collect_date,trans_date_pos,status,order_cs,trans_who INTO OUTFILE '/tmp/out1.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
FROM orders where trans_date_pos > '2007-9-4 00-00-00' and trans_date_pos<'2007-9-6 23:59:59' ;

2007년 9월 17일 월요일

[5.0] UNION에 대해서

UNION is used to combine the result from multiple SELECT statements into a single result set

뭘까?

2007년 5월 29일 화요일

mySQL Bind 설치..

Bind정보를 파일로 보다는 DB로 가지고 있는게 더 좋지...해보자..

Step 1.  mySQL Bind를 다운로드 받는다.
http://sourceforge.net/project/downloading.php?group_id=103722&use_mirror=nchc&filename=mysql-bind-0-1.tgz&40318992
여기서 받았음

Step 2.  서버로 옮긴 후 앞축을 풀었다.
tar -xvzf mysql-bind-0-1.gz

Step 3. mysqldb.c 와 mysqldb.h 를
 bind9/bin/named , bind9/bin/named/include 에 복사 한다.

Step 4. bin/named/Makefile.in 내부에 DBDRIVER_OBJS and DBDRIVER_SRCS 라인을 추가 한다.
(e.g. add mysqldb.c to DBDRIVER_SRCS and mysqldb.@O@ to DBDRIVER_OBJS).

Step 5. mysql_config --cflags 의 결과에 DBDRIVER_INCLUDES 추가한다.
DBDRIVER_INCLUDES = -I'/usr/include/mysql'

Step 6. mysql_config --libs의 결과에 DBRIVER_LIBS 구가
DBDRIVER_LIBS = -L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lns
s_dns -lresolv

#---------------------------------
#
# Add database drivers here.
#
DBDRIVER_OBJS = mysqldb.c
DBDRIVER_SRCS = mysqldb.@O@
DBDRIVER_INCLUDES = -I'/usr/include/mysql'
DBDRIVER_LIBS = -L'/usr/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv
#---------------------------------



Step 7. bind9/bin/named/main.c 의 내부에 mysqldb.h를 인쿨르드 한다. ( #include "mysqldb.h" )

7-1. main.c의 setup() 내부에 mysqldb_init() 추가
       ns_server_create(ns_g_mctx, &ns_g_server) 앞에 있어야 함
7-2. cleanup()에 mysqldb_clear() 추가

Unregistration should be in cleanup(), by adding the call mysqldb_clear()

Step 8 Bind 새로 설치
You should now be able to change to your BIND directory and build BIND with the commands

./configure
make
make install

ENTRY IN NAMED.CONF
===================

zone "mydomain.com" {
  type master;
  notify no;
  database "mysqldb dbname tablename hostname user password";
};

zone 파일을 변경해야 한다
In the database line, dbname is the name of the MySQL database,
tablename is the name of the table for this domain/zone,
hostname is the name of the database host,
user and password are for access to the database.

DATABASE SCHEMA
===============

You should create a database for the driver and add one table for each domain. The following SQL will create a table for one domain.
 Change mydomain to something that will represent the domain more clearly.

CREATE TABLE mydomain (
  name varchar(255) default NULL,
  ttl int(11) default NULL,
  rdtype varchar(255) default NULL,
  rdata varchar(255) default NULL
) TYPE=MyISAM;


INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'SOA', 'mydomain.com. www.mydomain.com. 200309181 28800 7200 86400 28800');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns0.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns1.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.');
INSERT INTO mydomain VALUES ('w0.mydomain.com', 259200, 'A', '192.168.1.1');
INSERT INTO mydomain VALUES ('w1.mydomain.com', 259200, 'A', '192.168.1.2');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('mail.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ns0.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');

2007년 4월 16일 월요일

계정 추가 및 변경

계정 추가

insert into user (Host, User) values ('%', 'aptman');
update user set Password = password('aptman') where User = 'aptman';
flush privileges;



변경

1.update user set password=password('비밀번호') where user = '[user]';
2.flush privileges;

권한
GRANT ALL PRIVILEGES ON DBNAME.* TO ID@localhsot IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

하드코어 방식

create database testdb;
insert into db values ('%', 'testdb', 'testuser', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
insert into user (Host, User) values ('localhost', 'testuser');
insert into user (Host, User) values ('%', 'testuser');
update user set Password = password('password1234') where User = 'testuser';
flush privileges;

쿼리에 조건을 주기

SELECT category1,
IF(category1 < 10, CONCAT("0", category1),category1) AS is_bookmarked
FROM ns_product
where category1 <> ""
order by id limit 10;


설명 10보다 작은 숫자는 앞에 0을 붙여서 출력하고 그렇지 않은 경우는 그냥 출력함


+-----------+---------------+
| category1 | is_bookmarked |
+-----------+---------------+
| 10        | 10            |
| 5         | 05            |
| 5         | 05            |
| 1         | 01            |
| 8         | 08            |
| 10        | 10            |
| 8         | 08            |
| 1         | 01            |
| 3         | 03            |
| 5         | 05            |
+-----------+---------------+
결과...


case 2.

select ifnull(sum(case when e_sort='0' then e_count end),'0')
..

인덱스 생성

인덱스 생성
- alter table을 이용한 인덱스 생성이 더 flexible함
- 인덱스명은 생략가능

ALTER TABLE 테이블명 ADD INDEX 인덱스명 (인덱스컬럼);
ALTER TABLE 테이블명 ADD UNIQUE 인덱스명 (인덱스컬럼);
ALTER TABLE 테이블명 ADD PRIMARY KEY (인덱스컬럼);
ALTER TABLE 테이블명 ADD FULLTEXT (인덱스컬럼);

CREATE INDEX 인덱스명 ON 테이블명 (인덱스컬럼);
CREATE UNIQUE INDEX 인덱스명 ON 테이블명 (인덱스컬럼);
CREATE FULLTEXT INDEX 인덱스명 ON 테이블명 (인덱스컬럼);

unique인덱스와 primary key인덱스와의 차이
unique은 null허용하지만, primary key는 null허용 안함
unique은 하나의 테이블에 여러개 올 수 있지만, primary key는 하나만 존재

테이블생성시 지정
CREATE TABLE 테이블명
(
... column declarations ...
INDEX 인덱스명 (인덱스컬럼),
UNIQUE 인덱스명 (인덱스컬럼),
PRIMARY KEY (인덱스컬럼),
FULLTEXT 인덱스명 (인덱스컬럼),
...

);

:= 문장을 이용한 변수의 설정

:= 문장을 이용한 변수의 설정

현재 dbakorea의 데이터베이스강좌게시판에 등록된 총 게시물은 43개이다. 43개의 강좌를 읽은 수(hit수)는 각각 다르다.
평균 hit수를 구해 보자.

mysql> select @total_hit := sum(hit), @total_record := count(*) from zetyx_board_database;
+------------------------+---------------------------+
| @total_hit := sum(hit) | @total_record := count(*) |
+------------------------+---------------------------+
| 3705 | 43 |
+------------------------+---------------------------+
1 row in set (0.00 sec)

mysql> select @total_hit/@total_record as 평균HIT;
+-----------------+
| 평균HIT |
+-----------------+
| 86.162790697674 |
+-----------------+
1 row in set (0.00 sec)



select substring(subject from 9) from zetyx_board_database where substring(subject, 1, 8) = '[ORACLE]';

쿼리 결과를 파일로 저장하기

쿼리 결과를 가끔씩 파일로 보고 싶더라구...


mysql> select * into outfile '[파일명]'

             from csinfo;


저장위치
/usr/local/mysql/data/[계정]/[파일명]

서버 restart

/usr/local/mysql/bin
safe_mysqld &


* To start mysql server:
# /etc/init.d/mysqld start

* To stop mysql server:
# /etc/init.d/mysqld stop

* To restart mysql server
# /etc/init.d/mysqld restart

Tip: Redhat Linux also supports service command, which can be use to start, restart, stop any service:
# service mysqld start
# service mysqld stop
# service mysqld restart

(B) If you are using mysql on Debian Linux then use following command:

* To start mysql server:
# /etc/init.d/mysql start

* To stop mysql server:
# /etc/init.d/mysql stop

* To restart mysql server
# /etc/init.d/mysql restart

More MySQL articles are here and here.

MySQL 서버가 살아 있는지 확인

db 서버가 살아있는지 확인

mysqladmin -u root -p ping