Solaris 10 에서 MySQL을 설치하는 방법입니다.
1.전제조건.
Solaris 에서 MySQL을 설치하는데에는 여러방법이 있다. 대부분 sunfreeware.com 에서 Gcc 관련 패키지들을 설치해서 리눅스에 동일한 환경을 구축해서 컴파일을 하게 된다. 하지만Solaris 10에는 Sun Studio 12 를 함께 제공한다. 예전에는 구매를 해서 사용해야 했지만 무료로 전환되어서 썬에 가입만 하면 무료로 제공받을 수 있다.
Sun Studio 는 솔라리스에 맞게 제작된 컴파일러이고 따라서 당연히 Gcc 컴파일보다도 더 많은 쵝적화를 이룰 수 있다. 이번 MySQL 설치는 sunfreeware.com 에서 아무런 패키지도 설치하지 않고 Sun Studio 와 Solaris 에서 기본 제공되고 있는 라이브리만을 가지고 컴파일 설치하는 방법이다. (사실 Sun Studio 만 제대로 설치되어 있다면 아무런 일도 할 필요가 없다.)
2.다운로드.
MySQL 5.1.38 ~ 5.1.40 까지는 버그가 존재한다. 현재 릴리즈 되고 있는 최신버전에는 이러한 버그를 해결한 것이다. 따라서 가능하면 최신버전을 다운로드 하는 것이 좋다.
3.컴파일 및 설치.
컴파일은 Sun Studio 로 한다. Sun Studio는 최적화 옵션을 제공하며 이는 MySQL에 가능한한 최고의 퍼포먼스를 제공해준다. 일단 쉘을 바꿔서 진행한다.
[code bash]# /usr/bin/bash
bash-3.00# export CC=/opt/sunstudio12.1/bin/cc
bash-3.00# export CFLAGS="-xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic -m64 -xregs=no%frameptr -I/usr/sfw/include/openssl"
bash-3.00# export CXX=CC
bash-3.00# export CXXFLAGS="-xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic -m64 -xregs=no%frameptr -I/usr/sfw/include/openssl"
bash-3.00# export LDFLAGS="-xtarget=generic -m64 -L/usr/sfw/lib/amd64 -R/usr/sfw/lib/amd64"
bash-3.00# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --with-server-suffix=-standard --enable-thread-safe-client --enable-local-infile --with-big-tables --enable-shared --with-plugins=max --with-ld=/usr/ccs/bin/ld
bash-3.00# /usr/sfw/bin/gmake
bash-3.00# /usr/sfw/bin/gmake install
[/code]
여기서 중요한 것은 '--with-ld' 를 지정해줘야 한다. 이것을 지정하지 않으면 컴파일 오류가 난다.
MySQL 구동을 위해서 환경을 설정해준다.
[code bash]bash-3.00# groupadd mysql
bash-3.00# useradd -c "MySQL Database" -g mysql -d /usr/local/mysql mysql
bash-3.00# cd /usr/local/mysql
bash-3.00# ./bin/mysql_install_db
bash-3.00# chown -R mysql:mysql data
bash-3.00# cp /usr/local/mysql/share/my-medium.cnf /etc/my.cnf [/code]
솔라리스에서도 리눅스와 마찬가지로 라이브러리 PATH를 파일에 적어놓고 이것을 참조한다.
32bit 라이브러리는 /var/ld/ld.config, 64bit 라이브러리는 /var/ld/64/ld.config 에 기록한다. 파일형식은 텍스트여서 편집기로 편집하면 된다.
그런데 솔라리스에서는 명령어가 존재한다. 이를 이용해서 컴파일 설치된 MySQL의 라이브러리를 파일에 추가한다.
[code bash] bash-3.00# crle -64 -u -l /usr/local/mysql/lib [/code]
4. 튜닝.
솔라리스에서는 메모리 관련 라이브러를 교체하는 것 만으로도 대단한 성능향상이 있다고 한다. 방법은 간단하다.
[code bash]# 64bit
bash-3.00# LD_PRELOAD_64=/usr/lib/amd64/libmtmalloc.so
bash-3.00# export LD_PRELOAD_64
# 31bit
bash-3.00# LD_PRELOAD=/usr/lib/libmtmalloc.so
bash-3.00# export LD_PRELOAD
[/code]
이것을 MySQL 시작스크립트인 /usr/local/mysql/share/mysql.server 에 두번줄에 삽입해준다.
5.SMF
솔라리스 10에서의 가장 큰 기능인 SMF에 MySQL을 등록해보자. SMF은 지능형 서비스 관리 설비로 기존 SystemV에서 사용하는 방법을 진일보 시킨 것이다.
SMF는 메니페스트 파일에서 서비스 관리에 관한 설정를 한다. xml 파일 형식을 가지며 이것을 SMF에 등록을하면 그때부터는 SMF에서 제공하는 명령어를 사용해서 서비스를 관리할 수 있다. SMF에 관해서 꼭 알아두자.
SMF에 등록하기위해서 MySQL의 매니페스트 파일인 xml 이 필요하다. 내용은 다음과 같다.
[code xml]<?xml version="1.0"?><!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
Copyright 2004 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
pragma ident "@(#)server.xml 1.2 04/08/09 SMI"
-->
<service_bundle type="manifest" name="MySQL">
<service name="application/database/mysql" type="service" version="1">
<dependency name="filesystem" grouping="require_all" restart_on="none" type="service">
<service_fmri value="svc:/system/filesystem/local"/>
</dependency>
<dependency name="database_configuration" type="path" grouping="require_all" restart_on="refresh">
<service_fmri value="file://localhost/etc/my.cnf"/>
</dependency>
<dependent name="mysql-runlevel" grouping="require_all" restart_on="none">
<service_fmri value="svc:/milestone/multi-user-server"/>
</dependent>
<exec_method type="method" name="start" exec="/usr/local/mysql/share/mysql/mysql.server %m" timeout_seconds="10"/>
<exec_method type="method" name="stop" exec="/usr/local/mysql/share/mysql/mysql.server %m" timeout_seconds="5"/>
<exec_method type="method" name="restart" exec="/usr/local/mysql/share/mysql/mysql.server %m" timeout_seconds="5"/>
<property_group name="general" type="framework">
<!-- to start stop database -->
<propval name="action_authorization" type="astring" value="mysql.operator"/>
<propval name="value_authorization" type="astring" value="mysql.administrator"/>
</property_group>
<instance name="default" enabled="true"/>
<stability value="Unstable"/>
<template>
<common_name>
<loctext xml:lang="C">
MySQL Database Server
</loctext>
</common_name>
<documentation>
<manpage title="mysql" section="1" manpath="/usr/local/mysql/man"/>
<manpage title="mysqld" section="1" manpath="/usr/local/mysql/man"/>
<manpage title="mysqladmin" section="1" manpath="/usr/local/mysql/man"/>
</documentation>
</template>
</service>
</service_bundle>
[/code]
이것을 '/var/svc/manifest/application/database/mysql.xml'로 저장한다. 그리고 소유권과 퍼미션을 조정해준다.
[code bash]bash-3.00# chown root:sys /var/svc/manifest/applicaiton/database/mysql.xml
bash-3.00# chmod 444 /var/svc/manifest/applicaiton/database/mysql.xml
[/code]
파일이 이상이 없는지 체크를 한다.
[code bash]bash-3.00# svccfgsvc:> validate /var/svc/manifest/applicaiton/database/mysql.xml
svc:>
[/code]
메시지가 없다면 문법적으로 이상이 없는 파일이다. 이제 SMF를 등록한다.
[code bash] bash-3.00# svccfg -v import /var/svc/manifest/applicaiton/database/mysql.xml [/code]
SMF 관리 목록에 추가 된다.
[code bash] bash-3.00# svcadm -v enable application/database/mysql [/code]
이 서비스를 SMF에서 관리하겠다고 등록하는 것이다. 이렇게 되면 정말 잘 동작하는지를 체크해야 하는데 다음과 같이 한다.
[code bash]bash-3.00# svcs -x mysql
svc:/application/database/mysql:default (MySQL Database Server)
상태: online(2010년 8월 21일 토요일 오후 10시 16분 32초 이후)
참조: mysql(1)
참조: mysqld(1)
참조: mysqladmin(1)
참조: /var/svc/log/application-database-mysql:default.log
영향: 없음
bash-3.00#
[/code]
뭔가 잘못되었다면 메시지가 나온다.
이로서 Mysql 최신버전을 솔라리스 10에서 Sun Studio 12 를 이용해 최적화하면서 설치하고 SMF 에까지 서비스를 등록해 봤다.
0 개의 댓글:
댓글 쓰기