묻고답하기

[출처] http://kldp.org/script/bbs/read.php?table=prj&no=1346

MySQL이 지원하는 트랜잭션 지원 3가지 테이블 중에서,

BDB(버클리DB), GEMINI는  MySQL 소스만 가지고는 사용이 안되구요.
다른 추가의 파일들이 있어야 합니다.

MyISAM만이 MySQL 소스만 가지고 운영 가능 하더군요.


또한 kldp나 phpschool의 대부분의 설치 관련 설명서에 보시면,

./configure --with-charset=euc_kr

이런식의 옵션을 주어서 컴파일을 하게 되는데요.

이것 절대 안됩니다.  
이렇게 하면, MyISAM를 사용 못합니다. (일종의 버그 입니다.)
단, MyISAM 파일만 사용한다면 상관 없구요. (즉 트랜잭션, row-level
locking 사용안
한다면 상관 없습니다.)

MyISAM 제작자에게 문의 해 보았더니요.

Hi!

Maybe the problem is in the Korean character support in MyISAM.
You have 2-byte characters? I have never tested them.
;
;
;

Regards,

Heikki

뭐 이런식의 메일 왔습니다.

다음 메일에서는 자기쪽에서 테스트가 안되니까...
테스트해서 결과 (gdb 덤프)를 보내달라고 했는데, 아직 못 보냈네요.


아무튼 아래의 설치 과정에 Kldp의 설치과정과 조금 다름니까,
주의 해서 보십시오.


MySQL 설치 (MyISAM 사용)

1. 소스 파일이나 소스 파일을 구합니다.
   (저의 경우는 /usr/local/src 에 저장했습니다.)
   mysql-3.23.38.tar.gz

2. 소스 파일의 압축을 풉니다.
   #tar xvzf  mysql-3.23.38.tar.gz

3. 이때 생성된 mysql-3.23.38 디렉토리로 이동합니다.
   #cd mysql-3.23.38
  
3.1. MySQL 3.23.38에 포함된 MyISAM는 몇가지 버그가 있습니다.
   http://www.innodb.com 에서 Bug and fix 메뉴에 가시면 내용
있습니다.

   mysql/innobase/include/page0cur.ic 의 173 라인 수정
             page_cur_search_with_match(page, tuple, mode,
                                        &up_matched_fields,
                                        &up_matched_bytes,
                                        &low_matched_fields,
                                        &low_matched_bytes,
                                        cursor);

   위의 사이트에서 2개의 파일 ibuf0ibuf.c , row0undo.c  를 다운 받아서
   교체 합니다.

4. configure 의 옵션 목록을 봅니다.
   #./configure --help > ttt
   #vi ttt
  
   (필요한 옵션을 잘 읽어 보시고 선택하십시오. 아래의 5번에는 제가 선택

    내용이 있습니다.)

5. configure 를 실행하여 컴파일 준비를 합니다.

   이때 가장 빠른 성능을 위해 static 컴파일과 한글지원 옵션을 추가 합니
다.
  (static 관련은 필요에 따라 사용바람)
   # ./configure --with-charset=euc_kr --with-client-ldflags=-all-static
                       --with-mysqld-ldflags=-all-static
                      
                      
   (위의 모든 줄은 연결해서 입력해야 합니다. enter 치지 마세요)
  
  
   --without-debug         디버깅 모드를 OFF하여 성능을 높입니다.
  
   --with-innodb           Innodb 사용
     (   ' MyISAM를 사용하는 경우에는 아래와 같이 일부 옵션을 바꾸어야 합
니다.
               --with-extra-charsets=complex ' 모든 언어 지원  
             --with-extra-charsets=latin1,euc_kr
                --with-charset=latin1    
                
        * 주의 : MyISAM 사용시에는 절대 --with-charset=euc_kr 를 사용하
지 마시기 바랍니다.
          configure 에서 euc_kr를 사용하게 되면, innoDB의 대부분에서 에러
가 발생하기 때문에
          사용이 불가능 합니다.
          
          꼭, --with-charset=latin1   으로  컴파일 하시구,
          my.cnf에 한글 사용하도록 지정하여 사용하셔야 합니다.
    )  
  
   --with-berkeley-db      BDB 사용
        (http://www.sleepycat.com 에서 BDB를 먼저 받아서 설치한
후에 사용 가능 한듯 )
        
   --with-gemini=/usr/local/var           Gemini DB 사용
        (http://www.nusphere.com 에서 MySQL Advantage 란 것을 구입해야
사용할 수 있는듯 하네요)
  

    ( 이것중에서 선택적으로 사용가능합니다. 2개 모두 또는 둘중에 하나...)
    
    
     --without-bench      벤티마크 관련 파일을 생성하지 않습니다.

   제가 사용한 예 입니다.

   #./configure --with-charset=latin1 --with-client-ldflags=-all-static
                       --with-mysqld-ldflags=-all-static --without-debug
                       --with-innodb --without-bench
                       --with-extra-charsets=complex

   여기에 추가로 기본 설치 디렉토리를 바꿀 수 있습니다.
   (기본적으로 '/usr/local'에 프로그램이 설치되고 '/usr/local/var'에 데이
타베이스파일이 남는다.)
   만약 첫번째 파티션의 용량이 부족하다면 이것을 이용해서 바꾸십시오.
                      --prefix=/usr/local/mysql    
                               위의 라인은 기본설치디렉토리를 바꾼 것입니
다.
                      --localstatedir=/usr/local/mysql/data
                               위의 라인은 데이타베이스 디렉토리를 바꾼
것입니다.
   위와 같이 디렉토리르 지정하기 전에 지정한 디렉토리가 존재하는지 확인하
십시오.
   (주의: /usr/local/var 디렉토리는 기본으로 존재하지 않습니다. 데이타디
렉토리를 바꾸지 않은 경우에는 만들어 주세요)


6. gcc 버전을 확인합니다.
   #gcc --version

   gcc 버전은 2.8.x 이상 사용한다

7. 컴파일을 합니다.
   #make

8. 인스톨 합니다.
   #make install

9. Perl을 사용하실 분은 kldp.org의 mysql 설치 문서를 참조하세요.

10. man 페이지 설치
    #cd man
    
    #make install

    #cd ..


* 기종의 DB가 있는 상태에서 upgrade를 하고 계시다면,
  아래의 과정을  생략 하셔도 됩니다.

11. 데이타베이스 설치
    설치가 끝난후 아래와 같은 명령을 한번만 한다.    
    
    #./scripts/mysql_install_db      

     이 명령은 설치후 단 한번만 하는 명령으로 기초테이블 6개가 설치된다.
     (`user', `db', `host', `tables_priv', `columns_priv' and `func')

12.1 MySQL 서버 시작 (테스트를 위해서)
    우선 MySQL이 설치된 디렉토리로 이동한다.    

      #cd mysql_installation_directory
      #cd /usr/local/bin                       - 여기서의 설정되도록 했으
면...

     파일이 있나 확인

      #ls my*
      mysql*                       mysql_setpermission*  mysqladmin*  
mysqlimport*
      mysql_fix_privilege_tables*  mysql_zap*            mysqlbug*    
mysqlshow*
      mysql_install_db*            mysqlaccess*          mysqldump*  

      그리고 나서 아래와 같은 명령을 준다.

      #./safe_mysqld &

12.2. 에러 없이 실행되면..
     아래와 같은 명령을 내려서 설치된 프로그램을 검증해 본다.
     (아래에서 BINDIR은 mysql의 실행파일들이 설치된 디렉토리를 이야기 한
다)

     설치된 MySQL의 버전을 알아본다.
      (MySQL의 설치된 디렉토리에서 bin 디렉토리에 있는 'mysqladmin' 실행)

       #BINDIR/mysqladmin version

      그러면 아래와 비슷한 화면이 나올 것이다.    
        ./mysqladmin  Ver 8.20 Distrib 3.23.38, for pc-linux-gnu on
i686
        TCX Datakonsult AB, by Monty

        Server version          3.23.38
        Protocol version        10
        Connection              Localhost via UNIX socket
        UNIX socket             /tmp/mysql.sock
        Uptime:                 1 min 40 sec

        Threads: 1  Questions: 1  Slow queries: 0  Opens: 6  Flush
tables: 1  Open table
s: 2
      그리고 아래와 같은 명령도 한번 해본다.

        #BINDIR/mysqladmin variables | more
        
        
        이곳에서 확인할 것은  
        
        | character_set        | euc_kr                |
        
        이런 값이 있어야 합니다.  
        혹시 이 값이 latin1 이라면 아래 쪽의 my.cnf 설정에서 바꿀 수 있습
니다.
      

12.3. MySQL 서버를 중지해 본다.
        #BINDIR/mysqladmin -u root shutdown

12.4 safe_mysqld로 서버를 재시작해본다.
        #BINDIR/safe_mysqld  &

12.5 간단한 데이타베이스 테스트를 한다.
        아래와 같은 명령을 해본다.    
       #BINDIR/mysqlshow
          +-----------+
          | Databases |
          +-----------+
          | mysql        |
          | test           |
          +-----------+          
       #BINDIR/mysqlshow mysql
          Database: mysql
          +--------------+
          |    Tables         |
          +--------------+
          | columns_priv  |
          | db                  |
          | func               |
          | host               |
          | tables_priv      |
          | user               |
          +--------------+          
        #BINDIR/mysql -e "select host,db,user from db" mysql
          +------+--------+------+
          | host  |    db     | user  |
          +------+--------+------+
          | %      | test      |          |
          | %      | test_%  |          |
          +------+--------+------+

12.6 MySQL 서버를 중지해 본다.
        #BINDIR/mysqladmin -u root shutdown
      
12.7 자동으로 MySQL 서버 시작과 종료  
     MySQL 서버의 start와 stop argument로 시작과 종료를 할 수 있
다.      
     소스 디렉토리(/usr/local/src/mysql-3.23.38/support-files)에
mysql.server 스크립트 파일이 있습니다.
       #chmod 755 mysql.server

       # mysql.server start
       # mysql.server stop

     mysql.server 파일을 /etc/rc.d/init.d 디렉토리에 복사합니다.

       # cp mysql.server /etc/rc.d/init.d


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

       # MySQL database server starting...      
       /etc/rc.d/init.d/mysql.server start


13. 메세지의 한글 사용 ( 권장하지 않음 )
      configure에서 지정한 문자셋으로 한글 데이타나 테이블의 이름등에 한
글 사용이 가능합니다.
      (혹은 my.cnf 설정에서 지정해도 됩니다.)

    
      여기에서 이야기하는 한글 사용은 MySQL의 에러 메세지등이 한글로 나오
게 하는 방법입니다.

       (mysql.server 파일을 수정하므로써 별다른 옵션없이 한글을 사용
        할 수 있다. 이 경우 2.18절의 한글 사용법은 건너뛴다.)        
        mysql.server를 vi 에디터 등으로 열어서 'mysqld' 를 실행시키는
        부분을 모두 찾아서 'mysqld --language=korean' 로 바꿔준다.
        아마 2~3 군데 쯤 될것이다.
14. MySQL 서버 옵션
        MySQL 서버는 다음 세가지 디렉토리에 옵션을 적어줄 수 있다.    
        
       *디렉토리*             *사용목적*
       `/etc/my.cnf'          글로벌 옵션
       `DATADIR/my.cnf'    서버-스펙 옵션
       `~/.my.cnf'            사용자-스펙 옵션

      my.cnf 파일을 소스 디렉토리(mysql-3.23.38/support-files)에
      my-????.cnf  로 존재합니다. 이 파일을 수정하여 원하는 위치에 복사
해 주시면 됩니다.
      ???? 는 huge, large, medium, small 입니다.
      my-???.cnf 을 열어 보시면 앞부분의 설명에 시스템의 메모리, CPU 등
의 수 에 따라 조금씩 다른
      설정을 예로 만들어 둔 것입니다.  앞부분을 주의 깊게 읽어 보시고, 사
용할 파일을 잘 결정 하신 후에

       #vi my-medium.cnf
       #cp my-medium.cnf /etc/my.cnf

                  
       #vi /etc/my.cnf
      
       my.cnf 에 몇가지를 수정 합니다.
      
     * 아래의 예는  my-medium.cnf 파일을 복사한 후에 수정한 예 입니다.
    
     --------------------- my.cnf 예 입니다. --------------------
       # The following options will be passed to all MySQL clients
       [client]
       #password       = your_password
       port            = 3306
       socket          = /tmp/mysql.sock
      
       # Here follows entries for some specific programs
      
       # The MySQL server
       [mysqld]
       port            = 3306
       socket          = /tmp/mysql.sock
       skip-locking
       set-variable    = key_buffer=16K
       set-variable    = max_allowed_packet=1M
       set-variable    = thread_stack=64K
       set-variable    = table_cache=4
       set-variable    = sort_buffer=64K
       set-variable    = net_buffer_length=2K
       server-id       = 1
      
       # Uncomment the following if you want to log updates
       #log-bin
      
       # Uncomment the following if you are NOT using BDB tables
       skip-bdb
       # 저는 bdb를 사용하기 않기 때문에 원래의 주석을 제거 했습니다.
      
  
       # Uncomment the following if you are using Innobase tables
       # innoDB를 사용하기 위해서 아래 전부의 주석을 제거 하여 사용합니
다.
       innodb_data_home_dir = /usr/local/var/
       innodb_log_group_home_dir = /usr/local/var/
       innodb_log_arch_dir = /usr/local/var/
       innodb_data_file_path =
ibdata1:25M;ibdata2:37M;ibdata3:10M;ibdata4:30M
       # 위의 라인이 가장 중요한 부분 인데요.
       # 사용하실 데이타 베이스의 통 합계 만큼을  4개의 파일에 나누어서
크기를
       # 지정하시면 됩니다.   즉, 4개의 합계 크기가 원하는 총 DB의 크기입
니다.
      
       set-variable = innodb_mirrored_log_groups=1
       set-variable = innodb_log_files_in_group=3
       set-variable = innodb_log_file_size=5M
       set-variable = innodb_log_buffer_size=8M
       innodb_flush_log_at_trx_commit=1
       innodb_log_archive=0
       set-variable = innodb_buffer_pool_size=16M
       set-variable = innodb_additional_mem_pool_size=2M
       set-variable = innodb_file_io_threads=4
       set-variable = innodb_lock_wait_timeout=50
      
       # 이 값을 원래 없는데요. 한글을 기본으로 사용하기 위해서 추가합니
다.
       default-character-set = euc_kr
      
       [mysqldump]
       quick
       set-variable    = max_allowed_packet=16M
      
       [mysql]
       no-auto-rehash
       # Remove the next comment character if you are not familiar with
SQL
       #safe-updates
      
       [isamchk]
       set-variable    = key_buffer=8M
       set-variable    = sort_buffer=8M
      
       [myisamchk]
       set-variable    = key_buffer=8M
       set-variable    = sort_buffer=8M
      
       [mysqlhotcopy]
       interactive-timeout
      -----------------------------------------------------------------
      
      
       이 내용중에 innoDB에 관련 된 부분이 주석 처리 되어 있습니다.
       이것을 필요한 값들을 수정하신 후에
       주석을 제거 하고 사용 하시면 됩니다.


     * 한글 에러 메세지를 사용하려면..
       [myslqd] 셕션에 아래와 같은 한 줄을 넣는다.
         language=korean      

     * 또는 mysqld 실행할때 옵션을 줘서 실행
         mysql --langueage=korean

15. 시스템이 공유라이브러리가 필요할때, 잘 찾을수 있도록 아래와 같이 수정
해 준다.

     리눅스의 경우 우선 root로 로긴해서.. /etc/ld.so.conf 파일에 다음 한
줄을 추가하자.
         /usr/local/lib/mysql
     그리고 나서
         /sbin/ldconfig
     를 실행한다.

16. my.cnf를 수정하여 innoDB를 사용하게 하였다면, 처음 실행시
innodb_data_home_dir 에 관련 파일들을
     생성합니다. 이때는 서버가 무자게 느려 지는 데요.  이상이 아니므로 걱
정하지 않으셔도 됩니다.
    
     초기화가 끝나면 다시 정상적인 속도가 나옵니다.
    
     # cd /usr/local/var
     # ls -al
       합계 120024
       drwx------    4 root     root         4096  6월  9 09:07 .
       drwxr-xr-x   19 root     root         4096  6월  9 09:05 ..
       -rw-rw----    1 root     root        25088  6월  9 09:07
ib_arch_log_0000000000
       -rw-rw----    1 root     root      5242880  6월  9 09:10
ib_logfile0
       -rw-rw----    1 root     root      5242880  6월  9 09:07
ib_logfile1
       -rw-rw----    1 root     root      5242880  6월  9 09:07
ib_logfile2
       -rw-rw----    1 root     root     26214400  6월  9 09:10 ibdata1
       -rw-rw----    1 root     root     38797312  6월  9 09:07 ibdata2
       -rw-rw----    1 root     root     10485760  6월  9 09:07 ibdata3
       -rw-rw----    1 root     root     31457280  6월  9 09:07 ibdata4
       drwx------    2 root     root         4096  6월  9 09:05 mysql
       -rw-r--r--    1 root     root         1344  6월  9 09:07
spider.mbyn.co.kr.err
       -rw-rw----    1 root     root            5  6월  9 09:07
spider.mbyn.co.kr.pid
       drwx------    2 root     root         4096  6월  9 09:10 test
      
      위와 같이 my.cnf에 지정한 파일들이 생성 되어 있습니다.
      
17. MyISAM 사용 예

[root@spider var]# mysql test
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 7 to server version: 3.23.38

Type 'help;' or 'h' for help. Type 'c' to clear the buffer

mysql> create table test (id int not null primary key auto_increment,
name varchar(50) not null, key test_name(name)
) type=innodb;
Query OK, 0 rows affected (0.02 sec)

mysql> show table status;
+------+--------+------------+------+----------------+-------------+-----
------------+--------------+-----------+----------------+-------------+--
-----------+------------+----------------+-----------------------+
| Name | Type   | Row_format | Rows | Avg_row_length | Data_length |
Max_data_length | Index_length | Data_free |
Auto_increment | Create_time | Update_time | Check_time | Create_options
| Comment               |
+------+--------+------------+------+----------------+-------------+-----
------------+--------------+-----------+----------------+-------------+--
-----------+------------+----------------+-----------------------+
| test | MyISAM | Dynamic    |    0 |              0 |       16384
|            NULL |        16384 |         0 |        
     1 | NULL        | NULL        | NULL       |                |
MyISAM free: 95232 kB |
+------+--------+------------+------+----------------+-------------+-----
------------+--------------+-----------+----------------+-------------+--
-----------+------------+----------------+-----------------------+
3 rows in set (0.00 sec)

mysql> insert into test (name) values ('aaa');
Query OK, 1 row affected (0.04 sec)

mysql> insert into test (name) values ('bbb');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test;
+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
+----+------+
2 rows in set (0.00 sec)

# 트랜잭션 시작
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test (name) values ('ccc');
Query OK, 1 row affected (0.00 sec)

mysql> insert into test (name) values ('dddd');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
|  3 | ccc  |
|  4 | dddd |
+----+------+
4 rows in set (0.00 sec)

# 트랜잭션 취소
mysql> rollback;
Query OK, 0 rows affected (0.02 sec)

# 트랜잭션 이전의 데이타만 나옵니다.
mysql> select * from test;
+----+------+
| id | name |
+----+------+
|  1 | aaa  |
|  2 | bbb  |
+----+------+
2 rows in set (0.00 sec)
글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
초보자 NEW FAQ에서 본문 글이 쓰여지지 않는 문제가 있습니다. [1] 2016.05.27 by 감사하는마음이죠
댑펑 포인트를 db 상에서 업데이트 할 경우의 질문 [3] 2016.05.27 by 기진곰
은빛늑대 코어 업데이트 후 에러메시지 [1] 2016.05.27 by 기진곰
맘스프라임 무료상담신청 핸드폰으로 알림오도록 하고 싶어요. [1] file 2016.05.27 by 기진곰
모두아네c127c mysql DB에 접속이 안됨으로 홈페이지에 로그인이 안됩니다. [1] file 2016.05.27 by 기진곰
거침없이드라이브 XE1.4에서 XE1.8로 업데이트 후 홈페이지 접속 불능 [1] 2016.05.27 by 로이조52
kjmedi626 관리자주소를 모르겠습니다...ㅠㅠ [4] 2016.05.27 by kjmedi626
흑사탕 게시판을 들어가면 [5] 2016.05.27 by 라자루스
라디요 Xe 1.8.20 업데이트 내용 중에 [2] 2016.05.27 by 라디요
은우마스터 특정 메뉴 감추기 [1] 2016.05.27 by 라온넷닷컴
비틀즈 관리자만 ip주소로 로그인하게 하기 [5] 2016.05.27 by 라온넷닷컴
hjkguy767 그누보드5 들여오기 마이그레이션 툴 나올려면 아직 멀었을까요? [4] 2016.05.27 by 기진곰
바오밥나무 네이버 사이트등록 때문에 며칠째 헛발질 중입니다. [4] 2016.05.27 by 바오밥나무
바오밥나무 게시판 비밀 체크, 글자 바꿀 수 있나요? [2] 2016.05.27 by 바오밥나무
찬란하리 마이그레이션, 이름 모를 게시판의 글을 XE로 옮겨가기 [3] 2016.05.27 by SimpleCode
펭구 [긴급]코어 업데이트 도와주세요.. [6] 2016.05.27 by SimpleCode
김호띠 사이드탭 [2] 2016.05.28 by 김호띠
김호띠 회원랭킹출력 및 FA아이콘 [4] 2016.05.28 by 김호띠
하오 게시물이 수정되지 않습니다. [1] 2016.05.28 by sejin7940
흑사탕 에디터가 보이지 않습니다 [2] 2016.05.28 by 흑사탕
DJKain door 가변형 레이아웃을 사용하는데요 갑자기백지현상이 생깁니다 [1] 2016.05.28 by DJKain
DJKain 이용약관/개인정보취급방침 애드온 사용시 오류 문제 file  
팔공산 게시글 본문 아래 목록이 첫 목록만 나옵니다. [1] 2016.05.28 by 팔공산
라디요 '모바일 홈 화면 아이콘'설정  
라디요 embed 구문  
야야야료 이런 경우는 왜그런건가요?????  
핫펍co xe_documents 테이블에 컬럼을 추가 하고, 추가한 컬럼을 게시판에 보여주고 싶습니다. [3] 2016.05.28 by 핫펍co
마꼬꼬 letsencrypt를 사용하면서 클라우드 플레어 CDN을 사용해도 되나요? [2] 2016.05.28 by 마꼬꼬
마꼬꼬 VPS에서 CPU와 RAM의 차이가 큰가요? [1] 2016.05.28 by 기진곰
tndls**** xe재설치문의 [1] 2016.05.28 by 기진곰