2010년 6월 14일 월요일

mysql 도움말

mysql 명령어, 예제, 작업
==============================================================================

mysql 명령어, 예제, 작업

** 기본 지식
   1) mysql로 들어간다.
      [/usr/local/mysql/bin]# ./mysql board

   2) Data Type : 테이블 생성시 컬럼의 데이타 타입입니다.
   
      (1) 수치 데이터 타입

         * INTEGER (INT)
     * SMALLINT
         * NUMBER
         * DECIMAL(DEC) (x,y) : x는 실수자리, y는 소수점 이하자리
         * FLOAT

      (2) 문자 데이터 타입

    * VARCHAR (n) : 8비트 문자 길이가 최대 n개인 문자열
         * CHARACTER(CHAR) (n) : n개의 8비트 문자열
         * LONG

      (3) 그외의 데이터 타입

         * DATE/TIME : 날짜/시간
         * LONG RAW
         * RAW
   
      물론 이외에도 셀수 없을 정도로 많이 있습니다.
   
   3) 예제 데이타 :
  mysql> select * from test;
      +------+--------+------+----------+--------+
      | id | name | age | tel | addr |
      +------+--------+------+----------+--------+
      | 1 | 김용일 | 29 | 825-xxxx | 동작구 |
      | 2 | 남상욱 | 29 | 333-4444 | NULL |
      | 3 | 김용성 | 29 | 858-xxxx | 봉천동 |
      | 4 | 이병환 | 12 | 891-xxxx | 하안동 |
      +------+--------+------+----------+--------+
      4 rows in set (0.00 sec)

*****
   
1. 테이블 만들기

   사용법 : create table 테이블이름(변수명 변수값, ......);

   mysql> create table test (id int, name char(10), age int, tel char(15));
  Query OK, 0 rows affected (0.00 sec)

2. 테이블 보기

   사용법 : show tables;

    mysql> show tables;
    +-----------------+
    | Tables in board |
    +-----------------+
    | plaza |
    | test |
    +-----------------+
    2 rows in set (0.00 sec)

3. 테이블 데이타 입력하기

    mysql> insert into test values(1,'김용일','29','02-825-2764');
    Query OK, 1 row affected (0.00 sec)

    특정 필드만 입력
    mysql> insert into test (id, name) values ('','남상욱');
    Query OK, 1 row affected (0.00 sec)

4. 테이블내용 보기

    mysql> select * from test;
    +------+--------+------+-------------+
    | id | name | age | tel |
    +------+--------+------+-------------+
    | 1 | 김용일 | 29 | 02-825-xxxx |
    +------+--------+------+-------------+
    1 row in set (0.00 sec)
     
   
5. 필드 추가
    mysql> alter table test add addr char(20);
    Query OK, 1 row affected (0.00 sec)
   Records: 1 Duplicates: 0 Warnings: 0

    mysql> desc test;
    +-------+----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | id | int(11) | YES | | NULL | |
    | name | char(10) | YES | | NULL | |
    | age | int(11) | YES | | NULL | |
    | tel | char(15) | YES | | NULL | |
    | addr | char(20) | YES | | NULL | |
    +-------+----------+------+-----+---------+-------+
    5 rows in set (0.00 sec)


    참고 :
   
    ALTER TABLE에는 다음 세가지 형식이 있습니다.

    ALTER TABLE table_name ADD ( ... ) ;
    ALTER TABLE table_name MODIFY ( ... ) ;
    ALTER TABLE table_name DROP PRIMARY KEY ;


     (1) ALTER TABLE t1 RENAME t2;
         테이블 이름을 t1에서 t2로 바꿈
     (2) ALTER TABLE t2 CHANGE a a TINYINT NOT NULL, CHANGE b c CHAR(20);
         테이블 내의 컬럼 속성을 바꿈
  원래 컬럼 a는 INTEGER였는데 TINYINT로,
              컬럼 b는 CHAR(10)이었는데 컬럼이름은 c로 이타 타입은 CHAR(20)으로 수정
   
     (3) ALTER TABLE t2 ADD d TIMESTAMP;

     (4) ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
      새로운 인텍스를 생성 컬럼 a에 primary key 생성.

     (5) ALTER TABLE test MODIFY (age NUMBER NULL ) ;
         NOT NULL을 NULL로 바꾸기

     (6) ALTER TABLE test MODIFY (age NUMBER NOT NULL ) ;
         NULL을 NOT NULL로 바꾸기

     (7) ALTER TABLE test MODIFY (name VARCHAR2( 20 ) ) ;
         열의 폭 늘이기

     (8) ALTER TABLE test MODIFY (name VARCHAR2( 15 ) ) ;
         열의 폭 줄이기

     (9) ALTER TABLE t2 DROP COLUMN c;
         컬럼 c를 없애버리고


     (10) ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
         t2 테이블에 c라는 컬럼을 새로 생성시키는데
     
INT (INTEGER) : 정수
         UNSIGNED : 양수
         NOT NULL : 아무데이타가 없으면 '0'
         AUTO_INCREMENT : 데이타가 자동적으로 입력됨...
                          첨이 '1'이면 다음 데이타 열은 '2'
      그다음은 '3' 이런식으로...

         ADD INDEX (c) : 컬럼 c에 대해서 인텍스 생성
                          인덱스란 쉽게 예기해서
     책의 차례를 생각하시면 쉽겠네요..
                          책에서 뭘 찾아볼때 차례를 보면
                          쉽게 찾아지지요.. 그것 처럼 인텍스를
                          지정해주면 데이타를 검색(SELECT)할때
           빠르게 할수 있습니다.



6. 데이타 삭제 (Deleting Data)

   TABLE 내에 있는 한 개 이상의 열을 삭제하기 위해 사용합니다.

   mysql> delete fromtest where name='김용일';

   DELETE문에서도 SELECT문과 마찬가지로 WHERE 구문에서 AND, OR, IN, NOT, BETWEEN
   등을 쓰실수가 있습니다.


7. 데이타 업데이트 (Updating Data)

   mysql> update test set id=2,tel='333-4444' where name='남상욱';

   mysql> update test set addr='동작구' where id='1';

8. 합계 구하기

     * SUM (Column_name) : 특정 컬럼에서 조건에 만족하는 모든열의 값을 다더함
     * AVG (Column_name) : 평균값 추출
     * MAX (Column_name) : 최대값추출
     * MIN (Column_name) : 최소값 추출
     * COUNT (Column_name) : 열의수를 추출

   mysql> select sum(age) from test;
   +----------+
   | sum(age) |
   +----------+
   | 58 |
   +----------+
   1 row in set (0.00 sec)


   mysql> select id, age, (id+age), (id+age)/2 from test;
   +------+------+----------+------------+
   | id | age | (id+age) | (id+age)/2 |
   +------+------+----------+------------+
   | 1 | 29 | 30 | 15.00 |
   |2 | 29 | 31 | 15.50 |
   +------+------+----------+------------+
  2 rows in set (0.05 sec)

9. 정렬
   mysql> select * from test order by namedesc;
   +------+--------+------+----------+------+
   | id | name | age |tel | addr |
   +------+--------+------+----------+------+
   | 2 | 남상욱 | 29 | 333-4444 | NULL |
   | 1 | 김용일 | 29 | 825-xxxx | |
   +------+--------+------+----------+------+
   2 rows in set (0.00 sec)

10. 20살 이상이 몇명인가를 찾는다.

    mysql> select count(*) from test where age >=20;
    +----------+
    | count(*) |
    +----------+
    | 2 |
    +----------+
    1 row in set (0.00 sec)

11. null 값 검색하기

    mysql> select * from test where addr is not null;
    +------+--------+------+----------+--------+
    | id | name | age | tel | addr |
    +------+--------+------+----------+--------+
    | 1 | 김용일 | 29 | 825-xxxx | 동작구 |
    +------+--------+------+----------+--------+
    1 row in set (0.00 sec)

    mysql> select * from test where addr is null;
    +------+--------+------+----------+------+
    | id | name | age | tel | addr |
    +------+--------+------+----------+------+
    | 2 | 남상욱 | 29 | 333-4444 | NULL |
    +------+--------+------+----------+------+
    1 row in set (0.01 sec)

12. 검색 하기

    mysql> select * from test where name like '%용%';
    +------+--------+------+----------+--------+
    | id | name | age | tel | addr |
+------+--------+------+----------+--------+
    | 1 | 김용일 | 29 | 825-xxxx | 동작구 |
    | 3 | 김용성 | 29 | 858-xxxx | 봉천동 |
    +------+--------+------+----------+--------+
    2 rows in set (0.00 sec)

    mysql> select * from test where age >=10 and age <=20;
    +------+--------+------+----------+--------+
    | id | name | age | tel | addr |
    +------+--------+------+----------+--------+
    | 4 | 이병환 | 12 | 891-xxxx | 하안동 |
   +------+--------+------+----------+--------+
    1 row in set (0.00 sec)

  mysql> select * from test where addr in('동작구','봉천동');
    +------+--------+------+----------+--------+
    | id | name | age | tel | addr |
    +------+--------+------+----------+--------+
    | 1 | 김용일 | 29 | 825-xxxx | 동작구 |
    | 3 | 김용성 | 29 | 858-xxxx | 봉천동 |
    +------+--------+------+----------+--------+
    2 rows in set (0.02 sec)

    mysql> select * from test where addr not in('동작구','봉천동');
    +------+--------+------+----------+--------+
    | id | name | age | tel | addr |
    +------+--------+------+----------+--------+
    | 2 | 남상욱 | 29 | 333-4444 | NULL |
    | 4 | 이병환 | 12 | 891-xxxx | 하안동 |
    +------+--------+------+----------+--------+
    2 rows in set (0.00 sec)

13.유닉스 시간

mysql> select unix_timestamp(curdate());
   +---------------------------+
   | unix_timestamp(curdate()) |
   +---------------------------+
   | 934210800 |
   +---------------------------+
   1 row in set (0.05 sec)
mysql 설치및 옵션,가동
==============================================================================
mysql 설치및 옵션,가동

1. 소스를 가지고 설치(http://www.tcx.se/)
           
   Tcx 홈페이지에 가면 리눅스 배포판 버전에 따라서 컴파일 되어있는 바이너리 버전을 구하실수
있습니다.
   
   설치방법은:
   
          shell> tar xvfz mysql-VERSION-SYSTEM.tar.gz
          shell> mv mysql-VERSION-SYSTEM /usr/local/mysql
          shell> cd /usr/local/mysql
          shell> ./configure --with-charset=euc_kr --prefix=/usr/local/mysql
          shell> make
          shell> make install
          shell> ./scripts/mysql_install_db (처음 한번)
          shell> ./bin/safe_mysqld &

2. 설치 옵션
   기본적으로 '/usr/local'에 프로그램이 설치되고 '/usr/local/var'에 데이타베이스파일이 남는다.

  1) --prefix = PREFIX
       컴파일후 관련된 파일들이 설치되는 디렉토리입니다.
       기본값 : /usr/local/

  2) --exec-prefix = EPREFIX
기본값은 '--prefix'에서 지정해준 값과 같습니다.
       특별한 경우가 아니면다르게 할 이유는 없는것 같습니다.

  3) --bindir=DIR
       클라이언트 실핼파일과 스크립들..
       기본값 : PREFIX/bin

  4) --libexec=DIR
       mysql 데몬
      기본값 : PREFIX/libexec

  5) --localstatedir=DIR
       데이타 파일과 로그파일
       기본값 : PREFIX/var
       (이 디렉토리에 실제 데이타와 로그파일이있습니다.)


  6) 클라이언트 프로그램만으로 사용할 때 (서버 기능없이 클라이언트로만 사용할때)
     shell> ./configure --without-server
         
  7) 기본 설치디렉토리를 '/usr/local/mysql'로 변경
     shell> ./configure --prefix=/usr/local/mysql
     
  8) 기본 설치디렉토리를 '/usr/local'로 하고, 데이타베이스 디렉토리를 '/usr/local/mysql/data'로 변경
     shell> ./configure --prefix=/usr/local --localstatedir=/usr/local/mysql/data

  9) 소켓 디렉토리 변경 (기본값은 `/tmp' or `/var/run')
     shell> ./configure --with-unix-socket-path=/path/to/socket/dir
             ==> `/path/to/socket/dir' 반드시 절대경로이어야 한다.
   
  10) compile statically-linked (정적적으로 프로그램을 컴파일)
      shell> ./configure --with-client-ldflags=-all-static  
                      --with-mysqld-ldflags=-all-static
   
  11) libg++ 이나 libstdc++이 없이 gcc만 사용할때
     shell> CC=gcc CXX=gcc ./configure
   
  12) 'DEFAULT' 필드를 사용하지 않도록 하려면
      shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure

  13) 다국어 지원 (한글 지원 필독)
           
       MySQL은 기본적으로 charset이 ISO-8859-1(Latin1) 이다.
           
      다국어를 지원하려면 charset옵션을 사용한다.
      특히, 한국어 지원코드는 EUC_KR이다.
           
      shell> ./configure --with-charset=CHARSET
         
      shell> ./configure --with-charset=euc_kr
             ==> 메세지 및 데이타베이스, 필드 한글 사용
   
  ** CHARSET 지원코드
           
          `CHARSET' may be one of `big5', `cp1251', `cp1257', `czech',
          `danish',`dec8', `dos', `euc_kr', `german1', `hebrew', `hp8',
          `hungarian', `koi8_ru', `koi8_ukr', `latin1', `latin2', `sjis',
          `swe7', `tis620', `ujis', `usa7', `win1251' or `win1251ukr'.
   
   * character set설정한 다음 다시 변경하려면 아래와 같은 명령을 준
      다음 './configure' 를 다시 실행한다.
           
      shell> make distclean
             
      * 서버와 클라이언트간에characters를 변경하려면
           
      `SET OPTION CHARACTER SET'
       
  13) 디버깅코드 옵션
      shell> ./configure --with-debug
           
  14) 강제로 MIT-pthreads를 실행할때
      shell> ./configure --with-mit-threads
   
  그 이외에도 './configure --help'를 하면 추가적인 옵션을 보실수가 있습니다.

     
3. 만약 환경설정에 문제가 있다면

    shell> rm config.cache
  shell> make clean
       위 두분장을 실행하거나 또는 다음과 같이 한다.
shell> make distclean
         
    그리고 나서 환경설정을 새로한다.
     

4. 컴파일한다. (반드시 root로 할것!)

    shell> make

    컴파일시 `sql_yacc.cc' 부분에서 다음과 같은 에러가 난다면
       
           Internal compiler error: program cc1plus got fatal signal 11
             or
           Out of virtual memory
             or
           Virtual memory exhausted
   
     이 문제는 'gcc'가 huge amouts 메모리를 요구하기 때문이다. 이럴때는
  환경설정에서 다음과 같은 옵션을 주고 다시 컴파일 한다.

     shell> ./configure --with-low-memory

         
5. 인스톨을 한다. (역시 root로)
     
shell> make install


6. 기본 데이타베이스 설치(중요!!!!!!!!)
     
    설치가 끝난후 아래와 같은 명령을 한번만 한다.
     
   shell> ./scripts/mysql_install_db
         
    이 명령은 설치후 단 한번만 하는 명령으로 기초테이블 6개가 설치된다.
      (`user', `db', `host', `tables_priv', `columns_priv' and `func')

   이유는 Grant Table이라해서 MySQL 테이타 베이스에 user, db, host, funct라는 이름
    을 가진 테이블을생성합니다.

    간단히 이야기 하자면 어떤 클라이언트가 MySQL 서버에 접속을 해서 테이블 생성, 삭제,테이타
추가,
    수정, 삭제등에 대한 권한을 부여하기 위해서 만들어 주는 테이블 입니다.

    클라이언트가 MySQL 서버에 접속해서 DB를 사용할려면 'mysql_install_db'에 의해서 생성된 user에

    등록이 되어 있어야 합니다.
    물론 여기서 유저와 패스워드는 시스템상의 유저와 패스워드와는 별개입니다.
     

7. MySQL 서버 시작 (대몬 띄우기)
   이렇게 Grant Table 생성까지 마치고 나서 MySQL 데몬을 띄우기만 하면 됩니다.

우선 MySQL이 설치된 디렉토리로 이동한다.
       
  shell> cd mysql 설치한디렉토리
       
    그리고 나서 아래와 같은 명령을 준다.

    shell> ./bin/safe_mysqld &

    만일 시스템 부팅시 자동으로 데몬이 뜨기 원한다면
    '/usr/local/mysql/bin/mysql.server' 스크립을 사용 하시면 됩니다.
    시작시 mysql.server start, 종료시 stop 옵션을 주시면 됩니다.
     

8. 에러 없이 실행되면.. 아래와 같은 명령을 내려서 설치된 프로그램을 검증해 본다.

   mysql 기본 디렉토리 : /usr/local/mysql/
    mysql 명령어 디렉토리 : /usr/local/mysql/bin/
         
   설치된 MySQL의 버전을 알아본다.
    shell> ./mysqladmin version
         
    그러면 아래와 비슷한 화면이 나올 것이다.
       
     mysqladmin Ver 6.3 Distrib 3.22.21-1, for pc-linux-gnu on i686
           TCX Datakonsult AB, by Monty
           
           Server version 3.22.21-1
           Protocol version 10
           Connection Localhost via UNIX socket
       TCP port 3306
           UNIX socket /tmp/mysql.sock
           Uptime: 16 sec
     
           Running threads: 1 Questions: 20 Reloads: 2 Open tables: 3
     
     그리고 다래와 같은 명령도 한번 해본다.
       
     shell> ./mysqladmin variables

         
9. MySQL 서버를 중지해 본다.
     
    shell> ./mysqladmin -u root shutdown
       

10. safe_mysqld로 서버를 재시작해본다.
     
    shell> ./safe_mysqld --log &
     
11. '/etc/rc.d/rc.local' 파일에 다음 한줄 삽입
       (디렉토리는 설치시설정에 따라 달라질 수 있습니다.)
         
       /usr/bin/mysql.server start &
     
12. 한글 메러 메세지 및 한글 필드 사용 팁

      mysql.server 파일을 열어서 다음 내용을 수정 (2~3군데 정도 됨)
         ==> 'mysqld' 부분을 mysqld --language=korean
           
     또는, 옵션 설정파일 'my.cnf'에 다음 내용을 삽입
         ==> [myslqd] 셕션에 아래와 같은 한 줄을 넣는다.
       
       language=korean

13. 문제점 해결방안
     
   솔찍히 남들은 다 된다고 하는데 나만 안되는 그것처럼 답답한 일이 없을 겁니다.
   여기서는 컴파일시나 설치, 설치후 설정시 생기는 일반적인 문제들에 대해서 간단하게
   이야기 해보겠습니다.
   
   (1) 재설정 또는 재 컴파일시..
             
   설정을 바꾸거나 컴파일하다가 실패를 해서 다시 컴파일하고자 할경우는 이전에 설정되어서
cache로
       남아있는 것을 지우는 것이 좋습니다.
     
       shell> rm -f config.cache
       shell> make clean
   
   
   (2) 컴파일도중 Out of virtual memory or Virtual memory exhausted 에러가 날때
   
       sql_yacc.cc를 컴파일 하는 과정에서 보통 저 에러가 납니다.
       에러가 나는 경우에는 configure실행시 --with-low-memory 옵션을 추가해 주시면 됩니다.
       ./configure --with-low-memory
   
       (개인적으로 저 에러가 났지만 다시 컴파일하니까 에러없이 컴파일이 되었지만 만일 계속해서
        저 에러가 난다면 옵션을 주시면 해결하실수 있을겁니다.)
   
   
   (3) Compile with Linux x86
   
       x86 시스템에 설치된 리눅스에서 MySQL을 컴파일 하고자 할경우에는 libc 5.4.12나 그
이상버전이
       필요합니다.
       glibc의 경우는 2.0.6나 이상버전..
   
       => /usr/lib/libc.a(putc.o): In function `_IO_putc':
          putc.o(.text+0x0): multiple definitionof `_IO_putc'
          위와 같이 에러가 날경우..
   
       shell> CXX=gcc ./configure
   
       =>레르헷 리눅스에서 컴파일시 에러가 날때는 가장 쉬운 방법이 glibc의 버전을 업그 레이드
하는 겁니다.
               
     
    (4) 컴파일(make)하고 설치(make install)를 하고 shell> mysql_install_db를 실행시키는 순간
        'mysql daemon ended'라는 메시지가 나오면서 실행이안될때..
   
        => 대부분 저런 메시지가 나오기 전에 바로 앞줄에 에러 메시지가 나옵니다.
           그 메시지의 내용을 보면 무슨 이유때문에 서버가 실행이 안되는지 파악하실 수 있습니다.
               
           대부분은 데이타 파일과 로그파일이저장되는 디렉토리가 잘못 설정되어 있거나 존재하지
           않을 경우 저런 메시지가 생깁니다.

         shell> /usr/local/mysql/bin/mysqld --help 해보시면
   
                base_dir: /usr/local/mysql/
   data_dir: /usr/local/mysql/var/
                language: /usr/local/mysql/share/mysql/english/
                 ....
                 ....
   
     중간부분에 위와 같은 메시지가 나옵니다.
         저 같은 경우는 data_dir이`/usr/local/mysql/var`로 되어 있습니다.
         /usr/local/mysql에 var 디렉이 있는지 확인해 보시고 없으면 만드세요.
         보통 설치(make install)을 하면 생기지만 저 같은 경우는 안생기더군요.
               
         거의 그런경우가 없지만 동일한 Socket파일이나 TCP_PORT를 다른 프로그램이 사용할
경우에도
     위와 같이 에러 메시지가 나옵니다.

         그럴경우,
   
  shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
              shell> MYSQL_TCP_PORT=3307
            shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> scripts/mysql_install_db
              shell> bin/safe_mysqld &
   
       기본 sock 파일은 /tmp/mysqld.sock
          기본 포트는 3306입니다.


14. 벤치마크 테스트를 해본다. (옵션)
     
    벤치마크에 관심이 있는 사람은 다음과 같은 명령어로 테스트 해보자.
       
    shell> cd sql-bench

    [/usr/local/mysql/sql-bench]# ./run-all-tests
    Can't locate DBI.pm in @INC (@INC contains:
    /usr/lib/perl5/5.00503/i386-linux
    /usr/lib/perl5/5.00503
    /usr/lib/perl5/site_perl/5.005/i386-linux
    /usr/lib/perl5/site_perl/5.005 .) at
    ./run-all-tests line 20. BEGIN failed--compilation aborted at ./run-all-tests
    line 20.
     
    만약에 sql-bench 디렉토리가 없다면, rpm 패키지를 이용해보자.

   (mysql홈페이지에서 구할 수 있다.)
       
       
15. 자동으로 MySQL 서버 시작과 종료
     
    MySQL 서버의 start와 stop argument로 시작과 종료를할 수 있다.
         
    shell> mysql.server start
    shell> mysql.server stop

    부팅과 동시에 MySQL 서버를 시작하려면 레드햇 리눅스의 경우
     `/etc/rc.d/rc.local' 파일에 아래와 같이 한줄을 삽입한다.
     (디렉토리를 설치된 디렉토리를 정확히적어준다.)

    /bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld &'
   
    또한, mysql.server를 사용하여..
       
    mysql.server start &

    mysql.server 가 실행되면 두개의 프로세서가 실행됩니다.
    (디렉토리는 설치경로에 따라 달라질 수 있습니다)
       
    /usr/bin/safe_mysqld
    /usr/bin/libexec/mysqld
         
         
   * 한글 사용 팁
     ([/usr/local/mysql/support-files]#
     mysql.server 파일을 수정하므로써 별다른 옵션없이 한글을 사용 할 수있습니다.)
           
    mysql.server를 vi 에디터 등으로 열어서 'mysqld' 를 실행시키는 부분을 모두 찾아서
    'mysqld --language=korean' 로 바꿔줍니다. 아마2~3 군데 쯤 될겁니다.


22. MySQL 서버 옵션
     
    MySQL 서버는 다음 세가지 디렉토리에 옵션을 적어줄 수 있다.
       
        *디렉토리* *사용목적*
      `/etc/my.cnf' 글로벌 옵션
        `DATADIR/my.cnf' 서버-스펙 옵션
        `~/.my.cnf' 사용자-스펙 옵션

    * 전형적으로 `/etc/my.cnf' 파일은 다음과 같다.

          [mysqld]
          datadir=/usr/local/mysql/var
          socket=/tmp/mysqld.sock
          port=3306
       
    [mysql.server]
          user=mysql
          basedir=/usr/local/mysql

`mysql.server' 스크립트는 `user', `datadir', `basedir', `bindir' and `pid-file' 의 변수를 가진다.
       

    * 파일 옵션

    #주석 : - 주석 라인은 `#' or `;' 로 시작한다.
    [group] : - 옵션을 주고자하는 프로그램이나 그룹의 이름
   option : - 프로그램 실행시 --option 적을 내용
    option=value : - 프로그램 실행시 --option=value 적을 내용
    set-variable = variable=value : - 프로그램 실행시 --set-variable variable=value 에 적을 내용
               
   
  * 전형적인 글로벌 옵션 파일 예 :

        [client]
        port=3306
   socket=/tmp/mysql.sock
       
        [mysqld]
        port=3306
        socket=/tmp/mysql.sock
        set-variable = key_buffer=16M
        set-variable = max_allowed_packet=1M
       
        [mysqldump]
        quick
         
    * 전형적인 사용자 옵션 파일 예 :
       
        [client]
        # The following password will be sent to all standard MySQL clients
        password=my_password

        [mysql]
        no-auto-rehash


     * 한글 메세지와 한글 필드등을 사용하려면..
         
       (./configure --with-charset=euc_kr 로 컴파일 했을경우)
       
       [myslqd] 셕션에 아래와 같은 한 줄을 넣는다.
       
    language=korean
         
       
     * 또는 mysqld 실행할때 옵션을 줘서 실행
       
          mysql --langueage=korean
           


23. 일단PATH를 걸어놓고 사용하시는 것이 계속적으로 MySQL관련 바이너리를 실행시킬 때
편하므로
   .bash_profile에다가 패스를 추가하시기 바랍니다.

   (/usr/local/mysql/bin)

   mysql> 프롬프트 에서 어떤 SQL명령어가 실행되게 할려면 'g' 또는 ';'을 SQL문 마지막에 적으시고

          엔터키를 치시면 됩니다.
mysql 초기 작업, 예제
==============================================================================

mysql 초기 작업, 예제

1. 간단한 데이타베이스 테스트를 한다. (여러분의 컴퓨터에 따라 내용이 틀려질수 있습니다.)
     
   아래와 같은 명령을 해본다.
     
   [/usr/local/mysql/bin]# ./mysqlshow
   +-----------+
   | Databases |
   +-----------+
   | admin |
   | board |
   | mysql |
   | reload |
   |test |
   +-----------+

   [/usr/local/mysql/bin]# ./mysqlshow mysql
   Database: mysql
   +--------------+
   | Tables |
   +--------------+
   |aaaa |
   | bbbb |
   | columns_priv |
   | db |
   |func |
   | guestbook |
   | host |
   | student |
   |tables_priv |
   | user |
   +--------------+

   [/usr/local/mysql/bin]# ./mysql -e "select host, db, user from db" mysql
   +-----------+---------+--------+
   | host | db | user |
   +-----------+---------+--------+
   | % | test | |
   | % | test\\_% | |
   | localhost | admin | |
   | localhost | admin | nobody |
   +-----------+---------+--------+


2. DB 생성/삭제 (mysqladmin create | drop)
  (/usr/local/mysql/bin/)

  1) DB 생성 :
     DB를 생성해야지만 테이블을 만들수 있고 테이블을 만들어야지만 데이타를 저장할 수 가
있습니다.

     shell> ./mysqladmin create <DB_name>


  2) DB 삭제
     shell> ./mysqladmin drop <DB_name>

3. 그 이외 관련 명령..
   shell> mysqladmin shutdown => mysql daemon shutdown
   shell> mysqladmin reload => Grant table 다시 읽기..
            사용자의 패스워드를 바꿨거나, 새로운 DB를 추가했거나 할때
                          다시 읽어줘야지만 mysql이 인식합니다.
   shell> mysqladmin version => mysql을 설치했거나 업그레이드 했을때 버전확인
   shell> mysqladmin --help => 그이외에 옵션 확인

4. MySQL에서 DB에 접근하기..

   shell상에서 MySQL DB에 접근하기 위해서는 'mysql'이라는 명령을 씁니다.

   shell> mysql <DB name>
     
   만일 'ERROR 1045 : Access Denied for user....'와 같은 에러가 나올경우
   shell> mysql -u root <DB name>

   이라고 해보시기 바랍니다.처음 설치를 하고 특별히 패스워드를 설정해 주지않으면 일단은
아무나
   접근이 가능합니다.
   
   일단은 루트를 위한 패스워드를 설치시 생긴 Grant table에 추가를 해야합니다.
   (물론 혼자 사용한다면 구지 할 필요까지는 없다고 생각하지만 항상 다중 사용자 개념으 로
생각하시는
    것이나중을 위해서도 좋으리라 생각됩니다.)
         
5. root 패스워드 추가하기

   shell> mysql mysql
     or
   shell> mysql -u root mysql

      Welcome to the MySQL monitor. Commands end with; or g.
      Your MySQL connection id is 4 to server version: 3.22.33-beta

      Type 'help' for help.

   mysql> UPDATE user SET password=PASSWORD('root_password')
          -> WHERE User='root';
    or
   mysql> UPDATE user SET password=PASSWORD('root_password') WHERE User='root';

   Query OK, 1 row affected (0.01 sec)
       
   위 예에서 'root_password'라고 적혀있는 부분에 원하시는 패스워드를 기입해 넣으시기 바랍니다.

   저기서 주의 하셔야 할점은그냥 password='root_password'하시면 패스워드가 encrypt 되지 않고
   그대로 'root_password'가 되어버리니 꼭 password=PASSWORD('password_what_you_want')
하시면됩니다.

   위의 'PASSWORD'는 일종의 MySQL에서 지원하는 데이터 타입 입니다.

   다음부터 MySQL서버에 접속하시려면
   shell> mysql -u root -ppassword <DB name>
      or
   shell> mysql --user=root --password=root_password <DB name>

   위와 같이 하시면 됩니다. 저기서 '-p'옵션과 패스워드는 스페이스로 띄워서는 안됩니다.
   
   shell> mysql -u root -ppassword mysql

   mysql> select * from user;
      or
   mysql> select * from user g

   한번 컬럼 네임들을 유심히 살펴보시기 바랍니다.
   MySQL은 항상 호스트+유저 개념으로 DB에 접근이 가능합니다.
   해당 호스트에 속하는 유저만이 DB에 접근할 수 있습니다.

   컬럼에 보면
   Host User password Select_priv Insert_priv.......쭉~~~ 해서 총 17개의 컬럼이 있습니다.
   이것들은 해당 호스트(기본으로는 localhost)의 유저(root)가 DB를가지고 할 수 있는 권한을 나타내
줍니다.
       
   Select_priv 에 만일 'Y'로 되어있다면 그 호스트의 유저는 DB의 테이타를 검색(select)할 수 있는
   권한이 있다는 것입니다.

6. 기본 데이타 베이스 권한 설정
       
   그 다음 db 테이블을 한번 볼까요...


   mysql> select * from db;

   만일 2번에 설명드린데로 원하시는 DB를 생성하셨다고 가정하에 이 DB를 어떻게 다른
응용프로그램에서
   접근해서 사용할 수 있을까요.. 그걸 한눈에 볼수 있는 것이 바로 'db' 테이블 입니다.
지금 보면 기본적으로는 'test'라는 DB가 있지요..
   
   ----------------------------------------------------------------------------
   Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv |
   ----------------------------------------------------------------------------
     % | test | | Y | Y | Y | Y |
   ----------------------------------------------------------------------------

   위와 같이 되어 있을겁니다. 물론 나머지는 생략한 것입니다.
   어느 호스트(%)에서든지 test라는 Db는 누구나 접근할 수 있습니다.(중요!!!!!!!!!)
   
   만일 여러분께서 개인적으로 사용할DB를 생성코자 하신다면
   위에서 설명드린데로 DB를 생성하신 다음에 Db 테이블에다가 어느 호스트의 어느 사용자의
소유이고
   그 소유자가 가지고 있는 권한을 설정해 주셔야 응용프로그램에서 Db에 접근해서 사용할 수
있습니다.


    PHP를 아파치 모듈로 사용하신다면 아파치의 유저 설정을 'nobody'로 하셨으면 user
테이블에다가
   'nobody' 유저를 등록하셔야 하고 웹상에서 사용할 Db(어떤 DB이던지 간에)를 Db테이블에서
    User란에 'nobody'로 데이타를 Insert해야지만 그 DB를 사용할 수 있습니다.
    웹상에서 말입니다.

   아까도 말씀드렸지만 MySQL은 호스트+유저 개념이고 생성된(mysqladmin create <DB name>에
의해서)
   DB또한 사용할 수 있는 유저를 등록해야 사용하실수가 있습니다.


   간단히 정리하자면...

    1) 처음설치후 루트 패스워드를 추가

    2) 사용하고자 하는 DB를 'mysqladmin create <DB name>'로 추가

    3) shell> mysql -u root -ppassword mysql

    4) mysql DB안에 있는 user, db테이블에다가 새로운 사용자 및 새로이 생성하신 DB에 대한
소유자를 추가

    예)
   
    [/usr/local/mysql/bin]# ./mysqladmin create board
    Database "board" created.

    [/usr/local/mysql/bin]# ./mysql mysql(or ./mysql -u root -ppassword mysql)
   
    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>insert into user values ('host', 'kimyi','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    Query OK, 1 row affected (0.03 sec)

    mysql> select * from user where user='kimyi';
    +------+-------+----------+-------------+-------------+........
    | Host | User | Password | Select_priv | Insert_priv |.......
    +------+-------+----------+-------------+-------------+.......
    | host | kimyi | | Y | Y |.......
    +------+-------+----------+-------------+-------------+........
    1 row in set (0.00 sec)
   
    mysql> desc db;
    +-----------------+---------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------------+---------------+------+-----+---------+-------+
    | Host | char(60) | | PRI | | |
    | Db | char(32) | | PRI | | |
    | User | char(16) | | PRI | | |
    | 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 | |
    | Grant_priv | enum('N','Y') | | | N | |
    | References_priv | enum('N','Y') | | | N | |
    | Index_priv | enum('N','Y')| | | N | |
    | Alter_priv | enum('N','Y') | | | N | |
    +-----------------+---------------+------+-----+---------+-------+
    13 rows in set (0.00 sec)

    mysql> insert into db values('localhost','board','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); Query OK,
    1 row affected (0.02 sec)

    mysql> select * from db where user='';
    +-----------+---------+------+-------------+-------------+
    | Host | Db | User | Select_priv | Insert_priv |
    +-----------+---------+------+-------------+-------------+
    | % | test | | Y | Y |
    | % | test\\_% | | Y | Y|
    | localhost | admin | | Y | Y |
    | localhost | board | | Y | Y |
    +-----------+---------+------+-------------+-------------+
    4 rows in set (0.00 sec)

   
7. 꼭!중요!!!!! mysql 데몬을 다시 띄워야 새로운 MySQL 유저 mysql이 사용 가능합니다.
   
    [mysql]# ./bin/mysqladmin reload

    만일 생성한 DB(mysqladmin create....)에다가 테이블을 생성하고자
    하신다면 직접 그 생성된 DB로 들어가서 CREATE 구문으로
    생성시킬수도 있지만 보통 그렇게는 안하죠..

    CREATE TABLE plaza (
    no int(8) DEFAULT '0' NOT NULL auto_increment,
      num int(8) DEFAULT '0' NOT NULL,
      date int(11) DEFAULT '0' NOT NULL,
      host tinytext,
      name tinytext,
      passwd varchar(13),
      email tinytext,
      url tinytext,
      title tinytext,
      text mediumtext,
      refer int(8) DEFAULT '0' NOTNULL,
      reyn int(1) DEFAULT '0' NOT NULL,
      reno int(8) DEFAULT '0' NOTNULL,
      rede int(8) DEFAULT '0' NOT NULL,
      reto int(8) DEFAULT '0' NOTNULL,
      PRIMARY KEY (no),
      KEY num (num),
      KEY reno (reno)
    );

    자주 사용하시는 편집기로 위와같이 원하시는 컬럼 이름, 타입등을 적으신다음에 저장 합니다.

    형식) shell> ./mysql 'DB name' < 'filename'
   
    예)[/usr/local/mysql/bin]# ./mysql board < /www/htdocs/mysql.sql
    위에서 'DB name'은 새로이 생성하신 DB이고 'filename'은 편집기로 작성하신 파일입니다.
    그럼 제대로 테이블과, 컬럼들이 생성되었는지 알고 싶으시면
     
    [/usr/local/mysql/bin]# ./mysqlshow board
    Database: board
    +--------+
    | Tables |
  +--------+
    | plaza |
    +--------+
    위와 같이 나옵니다.

    DB에 존재하는 테이블을 보고 싶을때 (한 DB안에 여러 테이블이 있을수 있습니다.)

    형식 ) shell> mysqlshow <DB_name> <table_name>

    예)[/usr/local/mysql/bin]# ./mysqlshow board plaza
       Database: board Table: plaza Rows: 0
       +--------+-------------+------+-----+---------+----------------+
       | Field | Type | Null | Key | Default | Extra |
       +--------+-------------+------+-----+---------+----------------+
       | no | int(8) || PRI | 0 | auto_increment |
       | num | int(8) | | MUL |0 | |
       | date | int(11) | | | 0| |
       | host | tinytext | YES | | | |
       | name | tinytext | YES | | | |
       | passwd | varchar(13) | YES | | | |
   | email | tinytext | YES | | | |
       | url | tinytext | YES | | | |
       | title | tinytext | YES | | | |
       | text | mediumtext | YES | | | |
       | refer | int(8) || | 0 | |
       | reyn | int(1) | | |0 | |
       | reno | int(8) | | MUL | 0| |
       | rede | int(8) | | | 0 | |
       | reto | int(8) | | | 0 | |
       +--------+-------------+------+-----+---------+----------------+
   

    ==> 특정 DB안에 생성된 Table내의 컬럼 이름, 타입, key유무등을 보고자 할때 사용합니다.
     

8. 설정파일 사용하기

   패스워드를 입력시키고 나면 매번 MySQL관련 명령을 실행시키면 'Access denied'라는 에러가
납니다.
   매번 유저네임과 패스워드를 입력해 주어야 한다는 이야기지요.. 이거만큼 귀찮은 것 없습니다.

   그래서 편하게 매번 유저네임과 패스워드를 입력하지 않고도 서버에 접속할 수 있도록 하는 것이

   옵션파일입니다.

   MySQL을 처음 설치('/usr/local/mysql'에 설치했다고 가정)하고 나면
   '/usr/local/mysql/support-files/'이라는 디렉토리에 'my-example.cnf'라는 파일이 있습니다.
    안에 내용을 보시면 금방 어떻게 설정하는지 아실수 있을겁니다.
   
   이파일을 설정후에

   '/etc/my.cnf' 또는 '/usr/local/mysql/etc/my.cnf'로 카피를 하시면 전체 사용자에게 적용이 되고
   '~/.my.cnf'로 옮기시며 해당 사용자에게만 적용이 됩니다.

   안에 내용을 잠시 보면

      # Example mysql config file.
      # You can copy this to one of:
  # /usr/local/mysql/etc/my.cnf to set global options,
      # mysql-data-dir/my.cnf to set server-specific options (in this
      # installation this directoryis /usr/local/mysql/var) or
      # ~/.my.cnf to set user-specific options.
   #
      # One can use all long options that the program supports.
      # Runthe program with --help to get a list of available options

      # This will be passed to all mysql clients
      [client]
      password = 안갈켜 주~~지..
      port = 3306
      socket = /tmp/mysql.sock
   
    # Here is entries for some specific programs
      # The following values assume you have at least 32M ram

      # The MySQL server
      [mysqld]
      port = 3306
      socket = /tmp/mysql.sock
      skip-locking
      set-variable = key_buffer=16M

      ........... 이하 생략...


   형태는 위와 같이 생겼습니다. 패스워드만 수정하시면 거의 수정할 필요는 없을것 같군요.
      필요하시다면 수정하시고요..

 

 

출처 : http://formail.org/wowmake/linuxdb.txt