티몬에서는 작년부터 매일 오전 10시마다 슈퍼꿀딜을 판매하고 있다슈퍼꿀딜은 한정 수량 + 착한 가격으로 판매하는 딜로, 인기있는 상품의 경우에는 종종 단시간에 판매가 완료된다.

 

        

 

매일 오전 10시, 트래픽을 몰고오는 티몬의 슈퍼꿀딜 이벤트

 

 

그렇다보니 일시적으로 트래픽이 몰리게 되고 속도가 느려지면서 구매처리가 지연되는 경우도 간혹 발생한다. 이러한 상황을 개선하기 위해서 먼저 코드 측면의 불필요한 부분, 개선할 부분을 찾는 것도 중요하지만,  외의 측면에서 최적화된 Web Server / WAS(Web Appliaction Server) 설정을 하는 것도 중요한 포인트가   있다.

 

 글에서는 티몬의 일부 서비스에서 사용 중인 아파치 웹 서버(Apache Web Server) + 톰캣 서버(Tomcat Server) 환경에 대해 간략히 알아보고 주요 설정 값들에 대한 의미와 일시적으로 트래픽이 몰리는 상황에서 보다 최적화된 성능을 내려면 어떻게 해야 하는지 알아보겠다.

 

 

 

서비스 환경 이해하기

 

아파치 웹 서버 + 톰캣 서버로 구성된 환경

먼저 아래 그림으로 일반적인 아파치 웹 서버와 톰캣 서버 구성된  서비스 환경을 대략적으로 한눈에 살펴보자.

일반적으로 사용자가 웹 브라우저 통해 접근하게 되고 해당 브라우저에서 발생하는 사용자 요청은 80포트로 Apache Web server 거쳐 Tomcat Connector 통해 Tomcat Server까지 도달하게 된다.

 

 

 

 

Apache Web Server + Apache Tomcat Server로 구성된  서비스 환경 1)

 

 

 

 

Apache Web Server 모듈

버전은 2.2.X 기준으로 작성

 

1) MPM (Multi Processing Module : 다중처리모듈)

MPM은 받아들인 요청을 처리하기 위해 자식들에게 분배하는 방식으로 대표적으로 Prefork / Worker 방식이 있다. 리눅스의 경우는 Prefork 기본 방식이며, 컴파일 시 옵션을 -with-mpm=worker  경우 Worker 방식으로 설치된다.

 

 

 

1-1)Prefork MPM

 

 

Prefork MPM의 동작  방식 2)

 

 

실행중인 프로세스를 복제하여 실행한다. 쓰레드가 한개인 자식 프로세스를 N개 사용하며, 각 프로세스는 한번에 한 연결을 담당한다. (프로세스 : 쓰레드 = 1:1관계) 여러 시스템에서 Prefork의 속도는 Worker와 비슷하지만, 더 많은 메모리를 사용한다. 메모리 영역까지 복제하여 동작하기 때문에 프로세스간 메모리 공유가 없어 안정적이다.

 

 

 

1-2)Worker MPM

 

 

Worker MPM의 동작 방식 3)

 

 

여러 개의 자식 프로세스가 각각 여러 쓰레드를 사용한다. (요청이 쓰레드 단위로 처리됨) 각 쓰레드가 한번에 한 연결을 담당하며, 쓰레드간의 메모리를 공유한다. Prefork 방식보다 기본 메모리는 많이 사용하지 않는다

 

동시 접속이 많은 경우, Prefork 방식보다 Worker 방식이 조금 더 나을 수 있는 반면, Worker 방식은 하나의 쓰레드가 문제가 생길 경우, 해당 쓰레드에 접근 중인 모든 프로세스에 영향을 미치게 되므로 안정성이 떨어지는 문제가 있다. 따라서 안정성에서 우수한 Prefork 방식이 많은 기업에서 주로 사용되고 있다. 

 

 

 

Apache Web Server 주요 설정

아파치  서버에서 가장 중요하게  설정은 MaxClient 와 ServerLimit 이다. MaxClient는 "동시에 접속 가능한 클라이언트의 최대 "를 의미하며 ServerLimit은 "프로세스 수의 최대 "를 의미한다. 값의 범위는 ServerLimit >= MaxClient 로 설정되면 된다참고로 이들의 기본값은 모두 256이다

 

  가지 설정이 없었다거나 너무 크다면메모리 점유율이 커지면서 OS단에서 문제가 되거나, CPU 100% 점유로 동작불능 상태가 되는 불상사가 일어날지도 모른다 설정 값의 임계치는 서버의 실제 메모리 용량과 아파치 프로세스의 평균 메모리 소비량의 이  가지 값에서 최대 어느 정도까지 프로세스를 생성할  있는지 계산  있다

 

예를 들어 메모리 용량은 4GB, httpd 프로세스 하나당 10MB라고 메모리를 평균적으로 사용한다고 가정해보자기타 시스템에서 기본적으로 점유하는 메모리를 200MB정도에 WAS에서 메모리를 1GB 잡았다고 하고 나머지는 대략 2.8GB 정도를 아파치가 모두 사용할  있다고 본다면, 2.8GB / 10MB =  280 정도로 최대로 설정이 가능하다.

 

실제 설정 값은 위에서 계산한 10MB라는 값이 아파치 1 프로세스의 평균적으로 사용하는 값이므로여유 있게 기본값인 256 정도로 설정하는 것이 좋을 것이다  설정 값들은 공식 사이트를 참고하여 기본  혹은 권장하는 값을 참고하기 바란.

 

 

 

Tomcat Server 주요 설정

버전은 7.X  기준으로 작성.

 

아래는 주요 설정이 포함된 $TOMCAT_HOME/conf/server.xml  Connector 설정이다.

 

 

 

 

 

문제 발생 당시의 현상 재현

다음은 트래픽이 많이 몰림으로 인해 속도 지연의 현상이 발생했던 당시 환경을 유사하게 재현했다. 

 

[아파치 설정값]

참고 : https://httpd.apache.org/docs/2.2/en/mod/prefork.html

 

 

 

 

[톰캣 설정값]

톰캣은 최초 설정 값들을 공식 사이트를 참고하여 기본  혹은 권장하는 값으로 설정하였다.

 

참고 : http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

 

 

 

 

 

[현상 재현] 

- Apache Jmeter 특정 jsp (Thread Sleep 10 발생페이지로 접근하여 초당500건의 부하를 발생시킴

(캡쳐 참조 / 부하량은 최초 서버 설정에서 에러 없이 전체건 처리 가능한 범위로 설정)

 

 

 

 

쓰레드 상태는 아래  가지 방법으로 모니터링

1) 톰캣 JMX 활성화  Jconsole 모니터링

2) http://{serverIP}/manager/status 페이지에서 실시간 모니터링

 

 

[Request 결과]

Client (Jmeter) : 평균  9.5 TPS (Transactions Per Seconds / 1초당 처리 가능한 트랜잭션 건수)

 

 

Server (Jconsole) : max Thread 도달

 

 

 

관리자 status 페이지에서 current busy Thread maxThreads값인 200 도달 확인

 

 

 

 

 

최적화된 설정값 찾기

Prefork 방식은 Apache MaxClients : Tomcat MaxThreads = 1:1관계로  수 있다. 따라서 최소 256 이상으로 설정을 해야하기 때문에 maxThreads값을 기존 200 -> 256으로 변경하였다.

 

 

[Test 1. maxThreads 값을 256 으로 설정했을 때]

 

 

 

 

 

 

[Request 결과]

- Client (Jmeter) : 평균  16.8 TPS (이전 테스트 대비7.3 TPS 증가)

 

 

- Server (Jconsole) : max Thread 도달

 

 

 

추가로 maxThreads 512 세팅하여 256 이상일 경우에 성능에 변화가 있을지 테스트해 본 결과, TPS 비롯하여 사용하는 쓰레드 최대치 모두 256 설정했을 때와 유사한 결과를 보였다.

 

 

+ 번외로  서버의 maxClients 설정을 maxThreads보다 적게 잡았을 때도 참고용으로 보면 좋을  같아 테스트해본 결과를 아래 추가하였다.

 

[Test 3. maxClients 설정을 maxThreads보다 적게 잡았을 때]

 

 

 

 

 

[Request 결과]

- Client (Jmeter) : 평균  10.6 TPS

 

 

- Server (Jconsole) : maxClient 설정값 만큼만 쓰레드 사용

 

 

 

위와 같이 가장 중요한 최대 쓰레드와 동시접속 대해 메모리와 평균 메모리 사용량을 기반으로 계산하여 설정하고 WAS 설정 또한 그에 맞게 조정해 놓은 상황에서, 다른 설정  최적화   있는 부분은 없을까?

 

예전에 개발을 담당했던 서비스 중에 특정시간을 기점으로 선착순 100% 당첨이 되는 이벤트가 있었다. 이벤트가 오픈되는 시점에 트래픽이 몰리는 현상과 함께 많은 수의 요청에 대한 응답시간이 오래 걸리는 현상이 발생했다. 해당 현상을 해결하고자 당시 아파치 설정의 MinSpareServers / MaxSpareServers / MaxRequesstsPerChild 값을 아래와 같이 변경하였다.

 

 

 

 

 

 

변경한   MinSpareServers 설정은 앞에 설명했던 바와 같이 Prefork 방식에서의 만큼 "유지하고자 하는 최소의 자식 프로세스 " 이다. 평소엔 무리가 없지만 갑자기 트래픽이 증가할 경우에는 MinSpareServers 보다 많은 자식 프로세스가 필요하기에 위와 같은 방식으로 미리 생성하였다. 그리고 MaxRequestsPerChild "재생산까지 처리해야 하는 횟수"이므로 가능한  숫자를 설정해야 cpu사용량이 좋아지므로 프로세스가  많은 요청을 처리할  있도록 변경하였다.

 

결국 종합적으로 프로세스의 생성 횟수를 최소화 하는 목적으로 위와 같이 설정을 변경한 결과, 특정 시점에서의 응답시간은 이전보다 현저히 줄어든 것을 확인할  있었다다만 24시간 내내 트래픽이 몰리는 것이 아니기 때문에, 평소에도 100개의 프로세스가 유지되어야 하는 점이 하나의 Trade-Off 된다   있다.

 

 

 

정리하며

 글에서는 아파치 웹 서버와 톰캣 서버에 대해 간략히 알아보고,  가지 가정된 상황에서 적절한 설정 값을 찾는 테스트를 해보았다. 또한 추가로 실제 경험했었던 설정  튜닝 사례도 살펴보았다아파치  서버 + 톰캣의 구성은 아파치  서버가 어느 정도 검증이 되어있기에 안정적인 측면에서 아직도 많이 쓰여지고 있다. 하지만 이와 같은 구조는 프로세스 + 쓰레드 구조이므로 병목이 발생할  있으며, 병목현상으로 가용한 자원을  못쓰는 경우가 생긴다. 이러한 단점을 보완하여 아파치  서버를 대체할  있는 NginX 티몬에서는 많이 사용되고 있고, 현재도 계속적으로 변경을 진행하고 있다(글을 작성하고 있는 동안 글을 쓰게된 계기가 되었던, 이슈가 있었던 서버도 NginX 변경이 완료되었다)

 

이어서 다음 2부에서는 아파치  서버를 대신하고 있는 NginX 대해서 알아보도록 하겠다.

 

[참고]

http://httpd.apache.org/docs/2.0/mpm.html

http://httpd.apache.org/docs/current/misc/perf-tuning.html

https://httpd.apache.org/docs/2.2/en/mod/prefork.html

https://httpd.apache.org/docs/2.2/en/mod/core.html

https://www.apachelounge.com/viewtopic.php?t=5836

http://stackoverflow.com/questions/105754/best-practices-for-configuring-apache-tomcat

 

아파치 톰캣 7 따라잡기 (에이콘)

네이버를 만든 기술, 읽으면서 배운다 - 자바편 (위키북스)

서버/인프라를 지탱하는 기술 (Jpub)

 

이미지 출처 1) https://documentation.cpanel.net/display/EA/EasyApache

이미지 출처 2) http://www.slideshare.net/KarthikeyanBalasubra10/apache-50878068

이미지 출처 3) http://www.slideshare.net/KarthikeyanBalasubra10/apache-50878068

[출처] 웹서버 트래픽 폭주 대비하기 - (1) Apache + Tomcat 설정값 튜닝 사례|작성자 개발몬스터

'공부하기' 카테고리의 다른 글

p시리즈 일반적인 점검방법  (0) 2020.04.08
CentOS AI  (0) 2020.02.26
[원트크]adb 관련  (0) 2018.04.27
유닉스 시스템 profile 정리  (0) 2018.04.19


---------- 일판 ------------

@echo off

adb shell am force-stop com.namcobandaigames.spmoja010

adb shell /data/data/com.namcobandaigames.spmoja010/files/Documents/reset.sh

adb shell am start com.namcobandaigames.spmoja010/.sakura

timeout 5

adb shell input tap 388 456

adb shell am start com.namcobandaigames.spmoja010/.sakura


@echo off

adb shell am force-stop com.namcobandaigames.spmoja010

adb shell rm -rf /data/data/com.namcobandaigames.spmoja010/files/Documents/*.db

adb shell cp -rp /data/data/com.namcobandaigames.spmoja010/files/sakura.db /data/data/com.namcobandaigames.spmoja010/files/Documents/

adb shell am start com.namcobandaigames.spmoja010/.sakura

timeout 5

adb shell input tap 388 456

adb shell am start com.namcobandaigames.spmoja010/.sakura


adb shell screencap -p /mnt/shared/Pictures/`date +%Y%m%d%H%M%S`.png


-------------- 한판 -----------------------


adb shell am force-stop com.bandainamcoent.onepiecetresurecruisekr
adb shell rm -rf /data/data/com.bandainamcoent.onepiecetresurecruisekr/files/Documents/*.db
adb shell cp -rp /data/data/com.bandainamcoent.onepiecetresurecruisekr/files/sakura.db /data/data/com.bandainamcoent.onepiecetresurecruisekr/files/Documents/
adb shell am start com.bandainamcoent.onepiecetresurecruisekr/.yozakura

ADB_일원트크_리세.KPS

WIN_일원트크_리세.KPS


- root 사용자 profile


PS1="[`hostname`:$LOGNAME]\$PWD> "

ENV=$HOME/.kshrc

LANG=en_US

#LANG=ko_KR.IBM-eucKR

EDITOR=/usr/bin/vi

TERM=vt100

export LANG ENV EDITOR TERM

set -o vi

loginfrom=$(who am i | cut -f2 -d\( | cut -f1 -d\: | cut -f1 -d\))

export DISPLAY=${loginfrom}:0.0


- oracle 사용자 profile

umask 022
export ORACLE_OWNER=oracle
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10g
export ORACLE_SID=TEST1
export NLS_LANG=American_America.KO16MSWIN949
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=/bin:/usr/bin:/usr/sbin:/etc:/opt/bin:/usr/ccs/bin:/usr/local/bin:$ORACLE_HOME/bin:/usr/bin/X11:/usr/java5/bin:/usr/java14_64/bin:
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib:
export SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/rdbms/lib32:CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:
export CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib:/$ORACLE_HOME/lib:
export ORACLE_TERM=vt100
export EDITOR=/usr/bin/vi
stty erase ^H
#export PS1=`whoami`:'$PWD] '
export PS1="[`hostname`:$LOGNAME] \$PWD > "
loginfrom=$(who am i | cut -f2 -d\( | cut -f1 -d\: | cut -f1 -d\))
export DISPLAY=${loginfrom}:0.0
set -o vi

# ORACLE SID Setting

export VALUE=true
while ($VALUE)
do

echo ""
echo "Enter your Database Number : "
echo ""
echo "1. TEST1"
echo "2. TEST2"
echo ""
echo 'Number : \c'
read a
case $a in
       1)
           echo 'TEST1 Database Control.'
           export ORACLE_SID=TEST1;
           export VALUE=false
           ;;
       2)
           echo 'TEST2 Database Control.'
           export ORACLE_SID=TEST2;
           export VALUE=false
           ;;
esac
done;

alias chdb=". /oracle/.profile"
alias sqlno="sqlplus /nolog"
alias ss="sqlplus '/as sysdba'"
alias oh="cd $ORACLE_HOME"
alias os="echo $ORACLE_SID"
alias dbs="cd $ORACLE_HOME/dbs"
alias bdump="cd $ORACLE_BASE/admin/$ORACLE_SID/bdump"
alias udump="cd $ORACLE_BASE/admin/$ORACLE_SID/udump"



<1> LOGFILE RENAME 방법

 

Logfile 의 관련된 정보는 다음과 같이 확인 가능

 

SSQL> SELECT member FROM v$logfile;

 

MMEMBER

-------------------------------------------------------------------------

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO03.LOG

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO02.LOG

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\REDO01.LOG

 

3 3rows selected

 

LLogfile 의 이동방법

 

1. DBSHUTDOWN 시킨다.

 

SQL> SHUTDOWN IMMEDIATE

Database closed

Database dismounted

ORACLE instance shutdown

 

2. O/S 상에서 복사하여 저장하고자 하는 위치에 카피한다.

 

3. DB MOUNT 시킨다.

 

SQL> STARTUP MOUNT

ORACLE instance started

 

Total System Global Area   167772160 bytes

Fixed Size                 787968 bytes

Variable Size               61864448 bytes

Database Buffers           104857600 bytes

Redo buffers               262144  bytes

 

Database mounted

 

4. Alter Database Rename File 명령문으로 파일을 변경한다.

 

SQL>ALTER DATABASE RENAME FILE ‘C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G

\REDO01.LOG’ TO ‘E:\ORADATA\REDO01.LOG’;

 

같은 방법으로 나머지 파일도 한다.

 

5. 데이터베이스를 OPEN 한다.

   

    SQL> ALTER DATABASE OPEN;

 

6. 확인한다.

    

    SQL> SELECT member FROM v$logfile;

 

 

<2> CONTROL FILE RENAME 방법

 

▶ 현재 control file 에 관련된 정보는 다음과 같이 확인 가능

 

    SQL> SELECT name FROM v$controlfile;

 

NAME

-----------------------------------------------------------------------------

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL01.CTL

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL02.CTL

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\CONTROL03.CTL

 

  컨트롤 파일을 rename or move 하기 위해서는 instance parameter control_files 라는

        파라미터 값을 변경해야 한다.

 

    SQL> SHOW parameter control_files

    NAME              TYPE                   VALUE

    ----------------------------------------------------------------------------------------------------

    Control_files        string                c:\oracle\oradata\db10g\control01.ctl,

                                             c:\oracle\oradata\db10g\control02.ctl,

c:\oracle\oradata\db10g\control03.ctl

 

RENAME 방법

 

1. ALTER System 명령으로 control_file 파라미터의 값을 변경한다.

 

   SQL> ALTER SYSTEM SET control_files=’e:\oradata\control01.ctl’ scope=spfile;

   SQL> ALTER SYSTEM SET control_files=’e:\oradata\control02.ctl’ scope=spfile;

 SQL> ALTER SYSTEM SET control_files=’e:\oradata\control03.ctl’ scope=spfile;

 

2. 데이터베이스를 바로 종료한다.

  

SQL> SHUTDOWN IMMEDIATE

 

Database closed

Database dismounted

Oracle instance shut down

 

3. O/S 상에서 컨트롤 파일을 복사 후 카피한다.

 

4. 데이터베이스를 START 한다.

 

SQL> STARTUP

ORACLE instance started

 

Total System Global Area   167772160 bytes

Fixed Size                 787968 bytes

Variable Size               61864448 bytes

Database Buffers           104857600 bytes

Redo buffers               262144  bytes

 

Database mounted

 

<3> DATAFILE RENAME 방법

 

▶ 현재 datafile 에 관련된 정보는 다음과 같이 확인 가능

 

   SQL> SELECT name FROM v$datafile;

   NAME

-------------------------------------------------------------------------

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\SYSTEM01.DBF

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\SYSAUX01.DBF

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\UNDOTBS01.DBF

C:\ORACLE\PRODUCT\10.1.0\ORADATA\DB10G\USERS01.DBF

 

RENAME 방법

 

1. 데이터 베이스를 SHUTDOWN 한다.

 

SQL> SHUTDOWN IMMEDIATE

 

Database closed

Database dismounted

Oracle instance shut down

 

2. O/S 상에서 경로를 바꾼다.

 

3. 데이터베이스를 MOUNT 단계까지만 올린다.

 

SQL> STARTUP MOUNT

ORACLE instance started

 

Total System Global Area   167772160 bytes

Fixed Size                 787968 bytes

Variable Size               61864448 bytes

Database Buffers           104857600 bytes

Redo buffers               262144  bytes

 

Database mounted

 

4. Alter Database Rename File 명령문으로 파일을 변경한다.

   

    SQL> ALTER DATABASE RENAME FILE ‘c:\oracle\product\10.1.0\oradata\db10g\users01.dbf’

                                       To ‘e:\oradata\users.dbf’

 

같은 방법으로 나머지 파일도 한다.

 

5. 확인 한다.

    SQL> SELECT name FROM v$datafile;

 

 

<4> DEFAULT TEMPORARY TABLESPACE 변경 방법

 

▶ 이 파일은 단순히 변경 할 수는 없다. 기본적으로 다른 테이블 스페이스를 만든 후, 만들

   테이블 스페이스에다 디폴트를 설정해주고 기존의 디폴트를 DROP한다. 그 후, 다시 만들

   고자 하는 폴더에 테이블 스페이스를 만든 후 만든 테이블 스페이스에 디폴트를 추가하고

   그 전의 디폴트로 해준 테이블 스페이스를 삭제한다.

 

1. TABLESPACE 생성

  

   SQL> CREATE TEMPORARY TABLESPACE TEMP01 TEMPFILE ‘e:\oradata\temp01.dbf’

         Size 1024M autoextend on;

 

2. 디폴트 테이블스페이스 지정

 

   SQL> ALTER DATABASE default temporary tablespace TEMP01;

 

3. 기존의 디폴트를 삭제 한다.

 

   SQL> DROP tablespace TEMP including contents and datafiles;

 

4. TEMP 테이블스페이스 재생성

   

SQL> CREATE TEMPORARY TABLESPACE TEMP TEMPFILE ‘e:\oradata\temp00.dbf’

         Size 1024M autoextend on;

 

5. 디폴트로 지정한다.

 

SQL> ALTER DATABASE default temporary tablespace TEMP;

 

6. 이전의 디폴트 테이블스페이스 삭제 한다.

 

 SQL> DROP tablespace TEMP01 including contents and datafiles;

 

1> 암호 초기화
# /etc/init.d/mysqld stop

또는

# killall mysqld (데몬을 죽입니다)


# cd /usr/local/mysql (mysql이 깔린 곳으로 갑니다)
# ./bin/safe_mysqld --skip-grant &
여기까지가 초기화

2> 새 암호 넣기
# /etc/init.d/mysqld start

또는

# ./bin/mysql (sql 실행)
mysql>use mysql
mysql>update user set password=password('새암호') where user='root';
(root 암호 변경합니다. '새암호' 자리에 새암호를 넣으세요
예>update user set password=password('1234') where user='root';
mysql> FLUSH PRIVILEGES
mysql> exit


# ./bin/mysql -uroot -p1234 으로 들어와지면 성공입니다.

 

MySQL 관리자 즉 root 의 비밀번호를 분실하였거나, 다른 관리자가 변경해 놓고 휴가를 가 버리고.. 연락이 안될때.. 등의 경우.

[해결과정]
1. MySQL 데몬을 중지한다.
2. 패스워드가 있는 테이블을 무시하고(건너뛰고) 데몬을 띄운다
3. 루트로 로그인해서 루트의 비밀번호를 다시 설정한다.
4. 권한을 다시 로드한다. (이후 로그아웃).
5. 정상적으로 데문을 다시 실행한다.

[내용]
++++++ MySQL 데몬중지
++++++ 패스워드가 있는 테이블을 무시하고(건너뛰고) 데몬을 띄운다
# mysqld_safe --skip-grant-tables

++++++ 루트로 로그인해서 루트의 비밀번호를 다시 설정한다.
# mysql --user=root mysql
mysql> update user set Password=PASSWORD('new-password') where user='root';
mysql> flush privileges;
mysql> exit;
++++++ MySQL 데몬중지 & 시작

* 복사용 정리
# /etc/init.d/mysqld stop // 설정상황에 따라 다름
# mysqld_safe --skip-grant-tables // 경로확인 할 것
# mysql --user=root mysql
update user set Password=PASSWORD('암호') where user='root';
flush privileges;
exit;

# /etc/init.d/mysqld stop // 설정상황에 따라 다름
# /etc/init.d/mysqld start // 설정상황에 따라 다름
or
# /etc/init.d/mysql restart

++++++++++++++++++++
1.MySQL 데몬 실행 중지

# /etc/rc.d/mysqld stop
(또는 # killall -9 mysqld )

2.인증제외한 MySQL 데몬 실행

# mysqld_safe --skip-grant &

3. 비번없이 접속후 mysql DB의 user 테이블에서 root 패스워드 변경

# mysql -u root mysql
mysql> update user set password=password('new password') where user='root';
mysql> flush privileges;
mysql> quit
# _

4. 정상적인 MySQL 데몬 실행

# /etc/rc.d/mysqld restart
or
# /etc/rc.d/mysqld stop
# /etc/rc.d/mysqld start (또는 # safe_mysqld --user=mysql &)

X. 한글로 보이도록

# mysqld_safe --user=mysql --language=korean &
 

'공부하기 > 데이타베이스' 카테고리의 다른 글

오라클 파일 변경하기!  (0) 2010.12.07

vip     : 10.7.7.26

node1 : 10.7.7.27

node2 : 10.7.7.28

 

1. host # ifconfig eri0 plumb

2. host # ifconfig eri1 plumb

3. host # ifconfig eri0 10.7.7.26 group eriA netmask 255.255.255.0 broadcast + up

4. host # ifconfig eri0 addif 10.7.7.27 netmask 255.255.255.0 broadcast + deprecated -failover up

5. host # ifconfig eri1 group eriA 10.7.7.28 netmask 255.255.255.0 broadcast +  deprecated -failover standby up

 

host # more /etc/hostname.eri0

10.7.7.26 group eriA netmask 255.255.255.0 broadcast + up
addif 10.7.7.27 netmask 255.255.255.0 broadcast + deprecated -failover up

 

host # more /etc/hostname.eri1

10.7.7.28 group eriA netmask 255.255.255.0 broadcast + deprecated -failover standby up

 

+ Recent posts