일단 mysql 5.5.14 버전을 설치하는 과정은 구글에서 mysql 5.5 로 만 검색해도 관련 내용이 수두룩 하게 나오지만..
정작 문제는 동일한 버전을 설치하는거임에도 불구하고 사람들마다 설치과정이 조금씩 틀린데다
그분들의 설치과정을 기록한 내용을 보면 오류 없이 잘 사용하는거 같은데 난 오류가 발생한 것들이 있어서
기억차원및 혹 나같은 오류가 발생할지도 모르는 다른 분들을 위해서 작성 (설치 과정은 차동훈 (http://system.neulwon.com) 님의 게시글(http://system.neulwon.com/xe/2341)을 참조해서 진행했고 아래 설치과정의 일부 내용도 참조 했습니다)
1. mysql 5.5.x 버전은 기존 mysql 5.1 이하 버전과 설치방법이 다르고 cmake를 이용해서 설치를 해야 하기때문에.. 관련 cmake 라이브러리를 먼저 설치
yum -y install zlib curl
yum -y install gcc g++ cpp gcc-c++
yum -y install openssl openssl-devel
yum -y install libtermcap-devel ncurses-devel libc-client-devel bzip2-devel
yum -y install bison
2. cmake를 다운받고 압축풀고 설치 진행
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
tar xvfz cmake-2.8.4.tar.gz
cd cmake-2.8.4
mkdir cmake-build
cd cmake-build
../bootstrap
make all
make install
여기까지 별문제 없이 진행되면 cmake 설치는 완료...
3. mysql 을 위한 계정생성 (이건 솔직히 왜 하는지는 아직 잘 모르겠음.. 하지만 대부분 mysql 5.5.x 버전 설치관련 문서들 보면 다 생성을 해주고 있어서 일단 내용에 작성)
groupadd -g 400 mysql
useradd -u400 -g400 -d /usr/local/mysql -s /bin/false mysql
-> 추가적으로 저는 기존 mysql 버전을 /var/lib/mysql 이 경로로 사용했었기 때문에 위에 /usr/local/mysql 부분을 /var/lib/mysql 로 변경해서 처리했음
4. 이제 mysql 설치를 진행
wget ftp://ftp.sqyclub.com/pub/mysql/Downloads/MySQL-5.5/mysql-5.5.14.tar.gz
(이건 참고했던 문서에 있던 mysql 다운 가능 주소인데 2011/09/14 일까지는 다운 가능했음... 다운이 불가능할 경우 mysql 홈페이지에서 직접 받아서 사용하시길)
tar xvfz mysql-5.5.14.tar.gz
cd mysql-5.5.14
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306
make
make install
위와 같이 해서 mysql 설치까지 끝남
(euckr 로 설치를 원할경우에는 위에 cmake 옵션중에 utf8 관련 부분을 다음과 같이 -DDEFAULT_CHARSET=euckr -DDEFAULT_COLLATION=euckr_korean_ci 변경해줍시다)
5. 기본 DB생성 및 보안세팅 과정 (아래 /usr/local/mysql 부분은 저같은 경우 경로가 틀려서 경로를 바꿔서 처리했네요.. 각자 상황에 맞게 하시면 될듯)
cp -arp scripts/mysql_install_db /usr/local/mysql
cd /usr/local/mysql
rm -rf data
sh ./mysql_install_db (혹 data 폴더 생성이 안될경우 옆에 명령어로 해보세요 sh ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data )
chown -R mysql:mysql /usr/local/mysql
chown -R mysql.mysql /usr/local/mysql/data
cp support-files/my-huge.cnf /etc/my.cnf
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chown root.root /etc/init.d/mysqld
chkconfig --add mysqld
chmod 711 /usr/local/mysql
chmod 700 /usr/local/mysql/data
chmod 751 /usr/local/mysql/bin
chmod 750 /usr/local/mysql/bin/*
chmod 755 /usr/local/mysql/bin/mysql
chmod 755 /usr/local/mysql/bin/mysqldump
vi /etc/init.d/mysql 해서 datadir 부분에 /usr/loca/mysql/data 추가
위와 같이 해서 기본 DB생성 및 보안세팅 과정도 전부 완료 했습니다..
이제는 mysql 을 실행시켜서 시작을 하면 되겠죠..^^;;
일단 여기 까지는 구글에서 mysql 5.5.x 로 검색을 해서 나오는 무수히 많은 한글 문서들을 참조하시면 설치는 가능하실 거라 생각합니다..
전 설치하기 전에 기존에 사용하던 mysql 을 삭제하고 디렉토리및 cnf 파일까지 전부 삭제를 하고 새로 설치한다는 생각으로 설치를 진행했습니다..
mysql 5.5.14 설치 후 발생했던 오류 관련 해서 작성하겠습니다..
[오류1]
위와 같이 설치를 전부 마치고 service mysqld start 를 해서 mysql 을 시작하려고 했지만 아래와 같은 오류가 뜨면서 시작이 안되는 사태가 발생했습니다.
The server quit without updating PID file ([실패]ib/mysql/data/localhost.localdomain.pid).
그래서 mysql 을 종료를 다시 해보려고 service mysqld stop 을 하니 나오는건 아래와 같은 메시지 였습니다.
MySQL server PID file could not be found!
위와 같은 상황이 발생을 할 경우에는 ps -auxf | grep mysql 로 떠 있는 mysql 프로세스가 있나 확인 먼저 해보시고 떠 있으면 kill -9 해서 죽여주시고 다시 실행 시도
[오류2]
사이트에 접속시 can't connect to local mysql server through socket /var/lib/mysql/mysql.sock 이런 오류가 발생을 함
my.cnf 파일을 열어서 socket 부분이 /tmp/mysql.sock 로 되어있는데 /var/lib/mysql/mysql.sock 로 변경해줌
[오류3]
설치시에 euckr 옵션을 줘서 설치를 했는데도 한글이 깨지는 문제 발생 my.cnf 파일을 열어서 아래 내용 추가
[mysql]
default-character-set = euckr
[client]
default-character-set = euckr
[mysqld]
character-set-client-handshake=FALSE
init_connect="SET collation_connection = euckr_korean_ci"
init_connect="SET NAMES euckr"
character-set-server = euckr
collation-server = euckr_korean_ci
[mysqldump]
default-character-set = euckr
error log 확인
log 파일 위치 -> # vi /etc/my.cnf
sort aboted -> 메모리 부족으로 인한
log 확인 ->
mysql> check table 테이블명;
재부팅 후 계속 에러메세지 출려되면 해당 테이블 dump -> 해당 테이블 삭제하고 다시 인서트
========================================================
테이블 캐시 최적화하기
서버가 테이블 파일을 접근하여 오픈한 경우, 나중에 파일을 재사용하기 위해 오픈된 상태로 유지할 수 있다. 테이블 캐시는 오픈된 테이블에 대한 정보를 유지하는데 사용한다. table_cache 변수를 사용해서 테이블 캐시 크기를 설정할 수 있다.
서버가 많은 테이블에 접근한다면 테이블 캐시는 금방 가득차고, 새로운 테이블에 접근해야할 때마다 접근 빈도가 낮은 테이블을 닫아서 새로운 공간을 마련해야 한다. 현재 열려 있는 테이블 수는 아래와 같이 확인할 수 있다.
mysql> show status like '%Open_tables%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Open_tables | 475 |
+----------------------+-------+
또는 어드민 명령어로 상태를 확인해도 결괄르 확인할 수 있다.
[root@db bin]# ./mysqladmin status
Uptime: 2667488 Threads: 253 Questions: 196584267 Slow queries: 2052 Opens: 19992 Flush tables: 1 Open tables: 475 Queries per second avg: 73.696
만약 Open_tables 값이 변하지 않거나 느리게 변한다면 table_cache 값이 적절하게 설정되었다고 볼 수 있다. 반면 값이 빠르게 증가한다면, table_cache 값에 비해 오픈해야할 테이블이 많아서 계속해서 테이블을 닫고 여는 작업을 처리한다는 뜻이다.
간혹가다가 잘 돌아가던 서버 페이지가 DB쪽의 문제로 다음과 같은 오류가 생기곤 합니다.
Got error 127 from table handler
※ 아래 참고
shell> perror 126 127 132 134 135 136 141 144 145
126 = Index file is crashed / Wrong file format
127 = Record-file is crashed
132 = Old database file
134 = Record was already deleted (or record file crashed)
135 = No more room in record file
136 = No more room in index file
141 = Duplicate unique key or constraint on write or update
144 = Table is crashed and last repair failed
145 = Table was marked as crashed and should be repaired
발췌 : http://dev.mysql.com/doc/mysql/en/repair.html
다음은 위와 같이 손상된 DB 테이블을 복구하는 mysql 명령어 입니다.
DB에서
mysql> repair table product; //"product"는 오류가 생긴 테이블 입니다.
하시기 전에
mysql>analyze table product;를 실행하면 테이블에 대한 보고서가 작성됩니다.
그리고 나서
mysql>rapair table product;를 실행하면 복원이 됩니다.
예)
mysql> analyze table product;
+-------------+---------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------+---------+----------+-----------------------------+
| kms.product | analyze | status | Table is already up to date |
+-------------+---------+----------+-----------------------------+
1 row in set (0.06 sec)
mysql> repair table product;
+-------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------+--------+----------+----------+
| kms.product | repair | status | OK |
+-------------+--------+----------+----------+
1 row in set (0.10 sec)
서버의 Index 모니터링이 죽어 확인 결과, mysqld 의 cpu사용량 및 메모리 사용량이 매우 높게 나왔다.
mysql의 datadir로 이동 후 localhost.err 파일 확인 결과..
다음과 같은 메세지 출력 됬음을 확인
[Warning] /usr/local/mysql/libexec/mysqld: Forcing close of thread 000 user 에러날떄
# vi /etc/my.cnf
skip-name-resolve
외부클라이언트가 mysql 서버로 connect 시에 dns-lookup , IP에 대한 resolve, 즉 역질의를 skip하는 옵션으로서
Application 과 DB 서버가 따로 있을경우 mysql 부하에 의심이 되므로 적용할 수 있는 옵션이다. 같이 있는 경우에도
적용시에 어느정도 부하가 줄어든 경우도 있었다..
#log-slow-queries = /var/log/slow_query.log
slow_query_log = /var/log/slow_query.log
--> 위에 옵션으로 했을때 데몬 시작 후 localhost.err 파일 확인하면 Warning 메세지가 출력될 수도 있다.
그럴 땐 아래의 syntax에 맞는 옵션을 사용하라는 메세지도 출력되므로 확인 후 다시 재시작.
출처: https://www.crowz.co.kr/357 [★까마기 www.crowz.co.kr]
출처: https://www.crowz.co.kr/357 [★까마기 www.crowz.co.kr]
출처: https://www.crowz.co.kr/357 [★까마기 www.crowz.co.kr]
출처: https://www.crowz.co.kr/357 [★까마기 www.crowz.co.kr]
'OS' 카테고리의 다른 글
DB update 쿼리문 (0) | 2014.09.19 |
---|---|
mysql 4.x 에서 5.1로 마이그레이션 방법 (0) | 2014.09.19 |
mysql 사용자 생성 및 권한 설정 (0) | 2014.09.19 |
mysql 백업 및 복구하기 (0) | 2014.09.19 |
web server와 db서버가 따로 있을 경우 느림증상 (0) | 2014.09.19 |