Solaris

[INSTALL] MySql 5.0 설치하기 (물론 젠투에서)

알 수 없는 사용자 2008. 2. 28.
728x90
====================================================================================
* 2007년 2월 19일의 첨언
 이미 젠투 portage 에 5.0.X 들이 stable로 올라와 있습니다. 이젠 수동으로 설치하지 마시고
 emerge 하세요. ^^ 게다가 5.0.3 부터는 instance manager 라는 것이 있어서 여기의 설정으로
 는 emerge 한 mysql 의 기동 스크립트들과 잘 동작하지 않을 수 도 있답니다.
====================================================================================

* 맨 끝의 기동 스크립트 부분이 좀 문제가 있습니다. 그 부분은 아직 진행 중이라고 봐주세요.

뭐 쉽게 ACCEPT_KEYWORDS="~x86" emerge -pv mysql 해버려도 되지만.. 개발과 관계되거나 혹은 내가 직접 해보고 싶은 것은 하나 하나 삽질을 해야 적성이 풀리는 관계로, 소스를 다운 받아 거기서부터 설치를 진행하도록 하겠다. (물론 mysql 에서 미리 static 으로 컴파일 해둔 녀석을 어떻게 해도 넘어설 수 는 없다는 소문이 있긴 있다. ^^)

설치에 참고한 문서는 mysql 홈페지지의 온라인 메뉴얼 중 2.8. MySQL Installation Using a Source Distribution 부분 부터 관련된 부분들이다.

0. root 계정으로 작업한다.
    사전 작업:
        groupadd mysql
        useradd -g mysql -d /dev/null -s /usr/sbin/nologin mysql

1. 소스 파일을 다운로드 받는다. 경로는 변경될 수 있으므로 mysql 홈페이지(http://www.mysql.com) 에서 확인한다. 브라우져의 사용이 가능하다면 wget 이 아니라 직접 다운로드 받아도 된다.
    wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.21.tar.gz/from/http://mysql.new21.com/

2. 압축해제.
    tar xvfz mysql-5.0.20a.tar.gz

3. 몇 가지 빌드에 필요한 프로그램들의 버전을 확인 하는 절차가 있는데, emerge --sync 와 emerge -Dv world 를 충실하게 해주었다면 큰 문제는 없을 것이다. (그냥 2006.0 버전으로 설치 후 아무것도 안해줘도 버전은 큰 문제는 안 될 것이다)

4. CFLAGS 를 설정한다. mysql 에서 추천하는 값은 (CFLAGS 를 make.conf 에 넣은 것이 아니라 configure 와 한 라인에 둠으로써 임시로 적용되게 해두었다에 주의할 것)

    CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --enable-thread-safe-client
       
   이다. 거의 대부분의 시스템에서 안정된 컴파일 버전을 얻을 수 있다고도 써있다. 내 시스템은..
   
   CFLAGS="-O3 -march=pentium4 -fomit-frame-pointer -pipe -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --localstatedir=/data/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-charset=utf8 --with-extra-charsets=complex --with-collation=utf8_unicode_ci --with-big-tables --enable-thread-safe-client
        
    으로 해두었다. configure 부분은 역시나 메뉴얼을 보면 자세히 나와있다. 위에 서 쓴 것만 해석하자면, 대부분의 파일들은  /usr/local/mysql 밑에 설치하고 데이터 파일은 /data/mysql 밑에 위치 시키고, 최적의 성능을 위해 static 으로 컴파일, 더해서 문자셋은 utf8 로 하고, 추가적인 문자셋은 필요하다면 로딩하는 형태로하고, 대용량 테이블을 지원하는 형태로 컴파일 하시오이다.

5. 컴파일 및 설치

    make
    make install
 
6. 설정 파일 복사 및 설정 수정

    cp support-files/my-medium.cnf /etc/my.cnf
    
    my.cnf 파일을 열어서 필요한 설정들을 수정해 준다. 설정에 대한 것은 메뉴얼을 참고한다. 설치를 진행하는 시스템에는 다음과 같이 했다. 표시가 안된 것들은 기본값으로 쓰는 것들이다.
    
        [client]
        port            = 3306
        socket          = /tmp/mysqld.sock
        
        [mysqld]
        port            = 3306
        socket          = /tmp/mysqld.sock
        skip-locking
        key_buffer = 16M
        max_allowed_packet = 1M
        table_cache = 64
        sort_buffer_size = 512K
        net_buffer_length = 8K
        read_buffer_size = 256K
        read_rnd_buffer_size = 512K
        myisam_sort_buffer_size = 8M
        pid-file=/var/run/mysql/mysqld.pid    

        log-bin=mysql-log-bin
        
        innodb_data_home_dir = /data/mysql
        innodb_data_file_path = ibdata1:64M;ibdata2:64M:autoextend
        innodb_log_group_home_dir = /var/log/mysql
        innodb_log_arch_dir = /var/log/mysql

        innodb_buffer_pool_size = 32M
        innodb_additional_mem_pool_size = 4M

        innodb_log_file_size = 10M
        innodb_log_buffer_size = 8M
        innodb_flush_log_at_trx_commit = 1
        innodb_lock_wait_timeout = 50

7. 설치가 된 /usr/local/mysql 디렉터리로 이동.  디렉터리 생성 및 소유자/그릅 수정
    mkdir /var/run/mysql
    mkdir /data/mysql
    mkdir /var/log/mysql

    chgrp mysql /var/run/mysql
    chmod g+rw /var/run/mysql
    chgrp mysql /var/log/mysql
    chmod g+rw /var/log/mysql

    chown -R root .
    chown -R mysql /data/mysql
    chgrp -R mysql .
    chgrp -R mysql /data/mysql

8. 권한 테이블등의 시스템 테이블 생성.

    bin/mysql_install_db --user=mysql
    
9.  기동 스크립트 복사 및 rc-update 추가
    mysql 에서 제공하는 기동 스크립트가 있긴 한데, 젠투에서는 잘 동작하지 않는 것 같다. (혹시 누가 잘 되시는 분은 덧글 좀 부탁드립니다). 따라서 젠투 portage 에 있는 파일을 이용하도록 할 것이다.

    cp /usr/portage/dev-db/mysql/files/mysql.init /etc/init.d/mysql
   
    파일을 다음과 같이 편집했다.
/etc/init.d/mysql :

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-db/mysql/files/mysql.init,v 1.7 2004/07/14 21:41:15 agriffis Exp $

depend() {
    need net
    use dns
}  

checkconfig() {
    if [ ! -f /etc/my.cnf ] ; then
            eerror "No /etc/my.cnf file exists!"
    fi

    dir=`my_print_defaults mysqld | grep -- --innodb_data_home_dir | sed -e "s|^.*=(.*)|1|"`

    if [ ! -d $dir ] ; then
            eerror "You dont appear to have the mysql database installed yet."
            eerror "Please run /usr/bin/mysql_install_db to have this done..."
            return 1
    fi
}  

start() {
    checkconfig || return 1
    ebegin "Starting mysqld"
    /usr/local/mysql/bin/mysqld_safe >/dev/null 2>&1 &
    eend $?
}

stop () {
    ebegin "Stopping mysqld"
    start-stop-daemon --stop --quiet
            --pidfile=/var/run/mysql/mysqld.pid --retry 20
    eend $?
}

    실행 권한을 부여 한다.

       chmod +x /etc/init.d/mysql

10. /etc/env.d/ 에 70mysql 이라는 파일을 만들고 다음의 내용을 입력한다.
    PATH="/usr/local/mysql/bin"
    ROOTPATH="/usr/local/mysql/bin"
    LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql
    LD_RUN_PATH=/usr/local/mysql/lib/mysql
    LDPATH=/usr/local/mysql/lib/mysql

    env-update
    source /etc/profile

11. /etc/init.d/mysql start

12. 보안 관련 사항
    처음에 root 와 anonymous 계정이 자동으로 생성된다. root 는 모든 권한을 anonymous 계정은 (계정 이름이 없다. user 테이블에 보면 공백으로 나타난다) test 데이터 베이스에 권한이 있다. 그런데 이 두 계정은 비빌번호가 없이 생성되기 때문에 좀 거시기 하다. 따라서 다음의 절차를 따른다.

    - root 패스워드 변경

        (1) mysql 접속

            * root 사용자인 상태에서 처음 mysql 에 접속하려고 하면 (혹은 mysqladmin 을 사용하려고 하면) root 계정의 localhost 접속 권한이 없다는 메시지가 나오면서 안되는 경우가 있다. 그럴땐

            /etc/init.d/mysql stop
            /usr/local/mysql/bin/mysqld_safe --skip-grant &

            한 뒤

            mysql>use mysql
            mysql>update user set password='';
            mysql>commit;
            mysql>exit

          start-stop-daemon --stop --quiet --pidfile=/var/run/mysql/mysqld.pid --retry 20
          /etc/init.d/mysql start

        (2) 변경
      
          mysql>
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
       
mysql>SET PASSWORD FOR 'root'@'<hostname>' = PASSWORD('newpwd');

              * <hostname> 부분은 mysql 이 실행되는 호스트명을 적어준다.
            
     - anonymous 계정 삭제

       (1) mysql 접속
       (2) 삭제      
          mysql>DELETE FROM mysql.user WHERE User = '';
          mysql>FLUSH PRIVILEGES;

* 문제점.
    위의 /etc/init.d/mysql 파일의 문젠지 너무 오버해서 커스터마이징(?) 해버린 내 문젠지 가끔 mysql start/stop 이 말을 안들을 때가 있었다. 원인 팍악중. 이럴땐 다운로드 받은 디렉터리의 support-files 디렉터리에 있는 mysql.server 파일을 이용해 start/stop 해주면 된다.
    => 해당 프로세스가 start 상태로 표시는 되었지만 (어디에?) 그 이후의 작업에서 뭔가 문제가 생겨 실제로는 실행 되지 않은 경우. /etc/init.d/mysql stop 하면 그냥 [!!] 표시만 되고, start 해도 * WARNING: "mysql" has already been started. 라고만 나온다. 이때는 강제로 stop 상태로 변경해주자.
    /etc/init.d/mysql zap
      * Manually resetting mysql to stopped state. <- 요렇게 표시된다.
    mysql 의 에러로그를 보고 해당 에러를 처리한 후에 다시 /etc/init.d/mysql start 하면 된다.

728x90

댓글