리눅스, 자료실, 성경검색, 추억의게임, 고전게임, 오락실게임, rootman, http://www.rootman.co.kr
* 18.232.146.10 *
| Home | Profile | Linux | 자료실 | zabbix | Mysql 5.6 | 갤러리 | 성경검색 | 해피니스 | 자유게시판 | 게시물검색 | L | O | R |    

Shell mysql Database 테이블 모두 최적화하기

페이지 정보

profile_image
작성자 rootman
댓글 7건 조회 16,794회 작성일 04-03-21 15:48

본문

서버에 Mysql 데이터 양이 많이 쌓이고, 쿼리 작업이 활발히 일어날경우, 이에 따른 db 의 공간 부담율도 커지게 됩니다.


이에 따라, 양이 많을 경우 하나하나 최적화를 해줄수도 없고, 아래와 같이 간략하게 쉘을 돌려봤습니다.
전엔 php 쉘로 돌렸는데 다소 느린것 같더군요.
bash 로 변경해 봤습니다.


혹, 필요하신분들 있으시면 가져다가, 쓰세요.
화일명으로 저장후 실행권한 주시고, /etc/cron.daily 에 넣어 주세요.
하루에 한번씩 돌리면 좋을듯 하네요.


조금이라도 도움이 되었으면 하는 바램으로....


-----------------------------------------------------------------
#!/bin/sh
# 2004/03/20
# http://www.rootman.co.kr
# 제목 : mysql Database 테이블 모두 최적화하기
# 변경사항 : mysql root 변경
# --------------------------------------------------
#
DB_cnt=0;
DB_pass="루트패스워드"
Total_Table=0;
DB_str=`mysql -u root -p${DB_pass} -e"show databases"`;
for DB_for in ${DB_str}
do
if [ ${DB_for} != "Database" ]; then
TABLE_cnt=0;
Table_str=`mysql -u root -p${DB_pass} -e"show tables" ${DB_for}`;
for TABLE_for in ${Table_str}
do
Op_Str=`mysql -u root -p${DB_pass} -e"optimize table $TABLE_for" ${DB_for}`;
echo " - DB명 : ${DB_for} --> ${TABLE_for} ";
let TABLE_cnt=TABLE_cnt+1;
done
echo "------------------------------------------> 테이블명 : ${TABLE_cnt} 최적화완료.";
let Total_Table=Total_Table+${TABLE_cnt};
sleep 1;
let DB_cnt=DB_cnt+1;
fi;
done
echo "====================================================================================";
echo "- 호스트명 : `hostname` 에 대한 DB ${DB_cnt}개, 토탈테이블 ${Total_Table} 최적화 완료.";
echo "====================================================================================";

댓글목록

profile_image

매니아님의 댓글

매니아 작성일

  그럼 매일 자동으로 구동되는지요.
아니면 수동으로 해야되는 알고 싶어요..

profile_image

알마니님의 댓글

알마니 작성일

  이거 조은데 리모트 DB에 대해서도 작동되게 해주세요
-h DB호스트 를 추가햇더니 에러가 나네요
그러니까 이 쉘은 리눅스에서 돌리구 DB는 다른서버구요
이런경우에는 어떻게 해야할지???

profile_image

써니님의 댓글

써니 작성일

  테이블명을 가져올때 헤더부분인 Tables_in_DB명 부분이 다 나오길래 조금 바꿨습니다.
안쪽에 있는 do loop에 if 문 추가요.

    do
        if [ ${TABLE_for}  != "Tables_in_"${DB_for} ]; then
          Op_Str=`mysql -u root -p${DB_pass} -e"optimize table $TABLE_for" ${DB_for}`;
          echo " - DB명 : ${DB_for} --> ${TABLE_for} ";
          let TABLE_cnt=TABLE_cnt+1;
        fi;
    done

profile_image

여우님의 댓글

여우 작성일

  우아.. 감사히잘쓰겟습니다..... 좋은데요...

Total 645건 1 페이지

검색