======================================================= 

   MySQL 로그 파일 관리 

======================================================= 


Mysql 의 로그 파일은 다음과 같이 크게 3종류가 있습니다. 

1. 에러로그 
2. 일반적인 로그 
3. UPDATE 로그 

첫번째 에러 로그는 hostname.err 의 이름으로 서버 실행시 에러를 기록하는 파일입 
니다. 두번째 로그파일은 mysql 에 접근하는 사용자와 그들이 파일과 관련된 쿼리를 
실행할 경우에 기록되는 로그 파일로 /usr/local/mysql/var 밑에 host_name.log 으로 
저장이 되어집니다. Mysql 데이터에 파일을 기록하므로 파일과 관련된 쿼리는 DB 생 
성/삭제 , 테이블 생성/삭제 , 레크드 삽입/갱신 이 있습니다. 
이 로그 파일은 Mysql 실행시 --log 옵션을 주어 활성화 시키면 된다. 

# /usr/local/mysql/bin/safe_mysqld --log & 

업데이터로그는 테이블이 변경될때마다 해당 쿼리가 기록 됩니다. 기본적으로 활성 
화 되지 않고 Mysql 실행시 --log-update 옵션으로 가능하다. 

# /usr/local/mysql/bin/safe_mysql --log-update & 

업데이터 로그는 /usr/local/mysql/var 밑에 host_name.00X 식으로 서버가 다시 
실행되거나 mysqladmin reflesh 혹은 mysqladmin flush-logs 명령을 내릴때마다 
뒤의 번호가 1씩 증가 한다. 혹은 --log-update=mysql.log 와 같이 로그파일명을 
정해줄수도 있다.  Update 로그는 update 쿼리만 저장하거 같지만 .. 
delete , create 등의 쿼리도 모두 저장한다. 

mysql 의 사용량이 많은 사이트는 이런 로그파일이 쌓이므로 해서 디스크 용량에 
문제가 생길수 있다. 관리자는 수시로 점검하여 삭제를 해어야 한다. 

로그 파일을 관리하는 방법으로는 두가지가 있다. 

먼저 /usr/local/mysql/share/mysql/mysql-log-rotate 파일을 이용하는 방법과 
간단한 스크립트를 작성하여 cron 에 등록한뒤 관리하는 방법이 있다. 

/usr/local/mysql/share/mysql/mysql-log-rotate 파일을 이용하는 방법은 .. 
--log-update=mysqld.log 와 같이 로그파일을 정해서 관리할때 이용하면 된다. 

# vi /usr/local/mysql/share/mysql/mysql-log-rotate 
------------------------------------------------------------------------- 
---- 
# This logname is set in mysql.server.sh that ends up in /etc/rc.d/init.d/mysql 

# If the root user has a password you have to create a 
# /root/.my.cnf configuration file with the following 
# content: 

# [mysqladmin] 
# password = <secret> 
# user= root 

# where "<secret>" is the password. 

# ATTENTION: This /root/.my.cnf should be readable ONLY 
# for root ! 

/usr/local/mysql/var/mysqld.log { 
        # create 600 mysql mysql 
        notifempty 
    daily 
        rotate 3 
        missingok 
        compress 
    postrotate 
    # just if mysqld is really running 
    if test -n "`ps acx|grep mysqld`"; then 
            /usr/local/mysql/bin/mysqladmin flush-logs 
    fi 
    endscript 


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

위의 파일을 /etc/logrotate.d 디렉토리에 복사만 하면 알아서 로테이트 하게 된다. 
단..로그파일을 교체한후 mysqladmin flush-logs 를 적용하므로 root 홈디렉토리에 
.my.cnf 파일을 만든후 MySQL 의 root 사용자의 암호와 사용자 명을 적어주어야 한 
다. 

vi /root/.my.cnf 
-------------------------------------- 
[mysqladmin] 
password = xxxxxxxxx 
user = root 

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

정상적인 로그 교체의 확인은 다음과 같이 하면 된다. 

# logrotate -f mysql-log-rotate 


이밖에 --log-update 등의 옵션을 이용하면 수시로 로그파일의 뒤에 001,002 씩으로 
번호가 증가 되면서 저장이 되므로 별도의 스크립트를 작성하여 관리해야 한다. 

이는 각자 머리를 잘 짜면 될거 같다. 

#!/bin/sh 

find /usr/local/mysql/var -name "*.[0-9]*" -type f -mtime +3 -exec rm -f {} \\; 
/usr/local/mysql/bin/mysqladmin flush-logs 

위와 같은 만들면 된다. 이는 "3일 지난 파일은 지워라" 로 cron 에 등록한뒤 적절한 
시간마다 실행해주면 된다. 

출처 - http://blog.syszone.co.kr/707


==================================================================================

4.10. MySQL 로그 파일

MySQL 에는 몇개의 종류의 로그 파일이 있어,mysqld 안에서 무엇이 발생하고 있을까 조사할 수 있습니다.

로그 파일설명
에러 로그mysqld 의 기동, 실행, 및 정?~ 그리고 발생한 문제.
isam 로그ISAM 테이블에의 변경이 모두 기록.isam 코드의 디버그에만 사용.
일반 쿼리 로그접속의 정보와 실행된 쿼리.
갱신 로그폐?~ .데이터를 변경한 모든 스테이트먼트를 보존.
바이너리 로그무엇인가를 변경한 모든 스테이트먼트를 보존.replication에도 사용.
슬로우 로그long_query_time 초부터 시간이 걸린 쿼리, 또는 인덱스를 사용하지 않았던 쿼리를 모두 보존.

로그는 모두,mysqld 데이터 디렉토리에 있습니다.mysqld 그리고 로그 파일을 재차 열려면(혹은 새로운 로그로 전환한다) ,FLUSH LOGS (을)를 실행합니다. See 항4.6.4. 「FLUSH 구문」 .

4.10.1. 에러 로그

에러 로그 파일에는,mysqld 의 기동 시각과 정?~ 시각, 및 실행중에 발생한 에러에 관한 정보가 기록됩니다.

mysqld 하지만 이상종료(ABEND) 해 mysqld_safe 하지만 mysqld (을)를 재기동할 필요가 있는 경우,mysqld_safe (은)는 이 파일에 restarted mysqld 행을 씁니다.자동 체크 또는 자동 수복이 필요한 테이블을 mysqld 하지만 찾아냈을 경우, 경고도 기록됩니다.

일부의 operating system에서는,mysqld 하지만 이상종료(ABEND) 한 개소의 스택 트레이스가 에러 로그에 기록됩니다.이것을 사용하면,mysqld 하지만 어느 시점에서 이상종료(ABEND) 했는지 압니다. See 항E.1.4. 「스택 트레이스의 사용」 .

MySQL 4.0.10 이?~ ,mysqld 하지만 에러 로그 파일을 보존하는 장소를 --log-error[=filename] 옵션으로 지정할 수 있게 되어 있습니다.파일명을 지정하지 않으면,mysqld 하 Unix 그럼 mysql-data-dir/'hostname'.err (을)를,Windows 그럼 \mysql\data\mysql.err (을)를 사용합니다. flush logs (을)를 실행하면, 낡은 파일에는 --old 의 프리픽스가 붙어,mysqld 하지만 하늘의 신규 로그 파일을 작성합니다.

구 MySQL 버젼에서는, 에러 로그 처리는 mysqld_safe 에 의해서 행해져 에러 파일은 'hostname'.err 에 리디렉트 됩니다.이 파일명은,--err-log=filename 옵션으로 변경할 수 있습니다.

--log-error (을)를 지정하지 않는 경우, 또는 --console 옵션을 사용했을 경우에는, 에러는 stderr (단말)에 써집니다.

Windows 그럼,--console (을)를 지정하지 않으면, 출력은 항상 .err 파일에 써집니다.

4.10.2. 일반 쿼리 로그

mysqld 안에서 무엇이 발생하고 있을까 확인하고 싶은 경우에는,--log[=file] 옵션을 사용해 mysqld (을)를 기동합니다.이것에 의해, 모든 접속과 쿼리가 로그 파일(디폴트는 'hostname'.log )에 기록됩니다.이 로그는, 클라이언트 측에 에러의 원인이 있다고 생각할 수 있어mysqld 에 대해서 클라이언트가 무엇을 송신했는지 조사할 때 매우 도움이 됩니다.

낡은 버젼(MySQL 3.23.4 (으)로부터 3.23.8 )의 mysql.server 스크립트는,safe_mysqld 에, 일반 쿼리 로그를 유효화한다 --log 옵션을 건네줍니다.실가동 환경에서 MySQL 의 기동시의 퍼포먼스를 향상시킬 필요가 있는 경우에는,--log 옵션을 mysql.server (으)로부터 삭제하는지,--log-bin (으)로 변경합니다. See 항4.10.4. 「바이너리 로그」 .

이 로그의 엔트리는,mysqld 하지만 쿼리를 받은 시점에서 써집니다.이것은, 스테이트먼트가 실행된 순서와는 다른 경우가 있습니다.또, 갱신 로그 및 바이너리 로그와도 대비적입니다.갱신 로그 및 바이너리 로그는, 쿼리가 실행된 후, 락이 해제되기 전에 써집니다.

4.10.3. 갱신 로그

주의: 갱신 로그는 폐?~ 되어 대신에 바이너리 로그가 사용됩니다.See 항4.10.4. 「바이너리 로그」 . 바이너리 로그는, 이전의 갱신 로그의 기능을 모두 갖추어 더해 다른 기능도 추가되고 있습니다.MySQL 5.0 그리고 갱신 로그는 없어집니다 .

mysqld (을)를 --log-update[=file_name] 옵션으로 기동하면, 데이터를 갱신하는 모든 SQL 커멘드가 로그 파일에 기록됩니다.파일명을 지정하지 않으면, 호스트 머신의 이름이 디폴트명이 됩니다.파일명을 지정해, 패스를 지정하지 않는 경우, 파일은 데이터 디렉토리에 작성됩니다.file_name 에 확장자(extension)가 없는 경우,mysqld 하file_name.### 의 형식에서 로그 파일명을 생성합니다.여기서 ### (은)는,mysqladmin refresh ,mysqladmin flush-logs , 및 FLUSH LOGS 스테이트먼트가 실행될 때마다, 및 서버가 재기동할 때마다 인크리먼트(increment) 되는 번호입니다.

주의: 상기 스킴이 유효하기 때문에 , 갱신 로그가 사용하는 디렉토리내에서는, 갱신 로그 + 어떠한 확장자(extension) 등, 번호라고 오인되는 파일명의 파일을 작성 해서는 안됩니다.

--log 옵션 또는 -l 옵션을 사용했을 경우,mysqld 하 hostname.log (이)라는 이름의 일반 로그 파일을 작성합니다.재기동이나 리프레쉬를 실시해도 신규 로그 파일은 생성되지 않습니다(일단 닫고, 재차 열 뿐입니다).이 경우, 이하와 같이 해(Unix 상) 로그 파일을 카피할 수 있습니다.

mv hostname.log hostname-old.log
mysqladmin flush-logs
cp hostname-old.log to-backup-directory
rm hostname-old.log

갱신 로그는, 데이터를 실제로 갱신한 스테이트먼트만을 기록합니다.UPDATE 또는 DELETE 의 WHERE 지정으로 레코드가 발견되지 않았던 경우, 그 스테이트먼트는 로그에 써지지 않습니다.컬럼의 값을, 벌써 있는 같은 값으로 갱신했다 UPDATE 스테이트먼트도 스킵 됩니다.

갱신 로그의 기입은, 쿼리가 완료한 직후에 락의 해제전에, 또는 코?~ 트의 전에 행해집니다.이 때문에, 로그는 실행 순서대로 써집니다.

갱신 로그 파일로부터 데이타베이스를 갱신하려면 , 이하를 실행합니다.여기에서는, 갱신 로그명의 형식을 file_name.### (와)과 가정하고 있습니다.

shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql

ls (은)는, 모든 로그 파일을 올바른 순서로 취득하기 위해서 사용합니다.

이것은, 크래쉬 후에 백업파일 상태에까지 되돌린다, 혹은 백업 후부터 크래쉬까지의 사이의 갱신을 반복하는 경우 등에 도움이 됩니다.

4.10.4. 바이너리 로그

바이너리 로그는, 이전의 갱신 로그 대신에 되는 것입니다.갱신 로그는 MySQL 5.0 (이)가 아니게 됩니다.바이너리 로그에는, 갱신 로그로 이용 가능했던 정보가 모두, 보다 효율적 한편 트랜잭션(transaction) 세이프인 방법으로 포함됩니다.

바이너리 로그는 이전의 갱신 로그와 같이, 데이터를 실제로 갱신하는 스테이트먼트만을 기록합니다.UPDATE 또는 DELETE 의 WHERE 지정으로 레코드가 발견되지 않았던 경우, 그 스테이트먼트는 로그에 써지지 않습니다.컬럼의 값을, 벌써 있는 같은 값으로 갱신했다 UPDATE 스테이트먼트도 스킵 됩니다.

바이너리 로그에는, 백업 후의 갱신이 모두 기록됩니다.바이너리 로그의 주된 목적은, restore시에, 데이타베이스에 대해서 가능한 한 백업 후의 갱신을 실행할 수 있도록 하는 것입니다.

바이너리 로그는, 마스터로부터 슬레이브에 replication를 실시할 때도 사용합니다. See 항4.11. 「MySQL 의 replication」 .

바이너리 로그에는, 데이타베이스를 갱신한 각 쿼리에 걸린 시간의 정보도 포함됩니다.데이터를 변경하지 않았던 쿼리는 포함되지 않습니다.문제가 있는 쿼리를 찾아내는 등의 목적으로 모든 쿼리를 기록하고 싶은 경우에는, 일반 쿼리 로그를 사용해 주세요. See 항4.10.2. 「일반 쿼리 로그」 .

mysqld (을)를 --log-bin[=file_name] 옵션으로 기동하면, 데이터를 갱신한 모든 SQL 커멘드가 로그 파일에 기록됩니다.파일명을 지정하지 않으면, 호스트 머신의 이름에 -bin (을)를 붙인 것이 디폴트명이 됩니다.파일명을 지정해, 패스를 지정하고 있지 않는 경우에는, 파일은 데이터 디렉토리에 작성됩니다.

--log-bin=filename.extension 그리고 확장자(extension)를 지정했을 경우, 확장자(extension)는 삭제됩니다.

mysqld (은)는, 바이너리 로그 파일명에 숫자의 확장자(extension)를 추가합니다.이 번호는,mysqladmin refresh ,mysqladmin flush-logs , 및 FLUSH LOGS 스테이트먼트가 실행될 때마다, 또는 서버가 재기동할 때마다 인크리먼트(increment) 됩니다.바이너리 로그의 사이즈가 max_binlog_size 에 이르면, 새로운 바이너리 로그가 자동적으로 작성됩니다.주의: 트랜잭션(transaction)를 사용하고 있는 경우, 트랜잭션(transaction)는 1 개의 정리로 바이너리 로그에 써지기 위해, 복수의 바이너리 로그에 분할될 것은 없습니다.따라서, 큰 트랜잭션(transaction)가 있는 경우, 바이너리 로그가 max_binlog_size 보다 커질 가능성이 있습니다.

모든 바이너리 로그 파일을 삭제하려면 ,RESET MASTER 커멘드(see 항4.6.5. 「RESET 구문」 )(을)를 사용합니다.일부의 파일을 삭제하려면 ,PURGE MASTER LOGS (see항4.11.7. 「마스터 서버를 제어한다 SQL 스테이트먼트」 )(을)를 사용합니다.

mysqld 그리고 이하의 옵션을 사용해, 무엇을 바이너리 로그에 기록할까 제어할 수 있습니다(겉(표)의 뒤의 설명을 반드시 읽어 주세요).

옵션설명
binlog-do-db=database_name경향 데이타베이스(USE 에 의해서 선택된 데이타베이스)가 'database_name' 의 경우, 갱신을 바이너리 로그에 기록하도록(듯이) 마스터에 지시한다.그 이외의 명시적으로 지정되어 있지 않은 데이타베이스는 모두 무시한다.주의: 경향 데이타베이스내에서만 갱신을 실시하는 것이 확실한 경우에, 이 옵션을 사용하는 것(예: binlog-do-db=some_database ). 예상하기 힘든 동작예: 서버를 binlog-do-db=sales 그리고 기동해,USE prices; UPDATE sales.january SET amount=amount+1000; (을)를 실행했을 경우, 이 쿼리는 바이너리 로그에는 써지지 않다.
binlog-ignore-db=database_name경향 데이타베이스(USE 에 의해서 선택된 데이타베이스)가 'database_name' 의 경우, 갱신을 바이너리 로그에 기록하지 않게 마스터에 지시한다.주의: 경향 데이타베이스내에서만 갱신을 실시하는 것이 확실한 경우에, 이 옵션을 사용하는 것(예: binlog-ignore-db=some_database ). 예상하기 힘든 동작예: 서버를 binlog-ignore-db=sales 그리고 기동해,USE prices; UPDATE sales.january SET amount=amount+1000; (을)를 실행했을 경우, 이 쿼리는 바이너리 로그에 써진다.

쿼리를 바이너리 로그에 쓸지의 평가는, 이하의 순서로 행해집니다.

  1. binlog-do-db 룰 또는 binlog-ignore-db 룰이 있을까.

    • No: 쿼리를 바이너리 로그에 써 종료한다.

    • Yes: 다음의 스텝으로 옮긴다.

  2. 룰(binlog-do-db 또는 binlog-ignore-db , 혹은 그 양쪽 모두)가 존재한다.경향 데이타베이스가 있을까(USE 하지만 선택하고 있는 데이타베이스가 있을까).

    • No: 쿼리를 쓰지 마 종료한다.

    • Yes: 다음의 스텝으로 옮긴다.

  3. 경향 데이타베이스가 있다.binlog-do-db 룰은 있을까.

    • Yes: 경향 데이타베이스가 binlog-do-db 룰의 어느 쪽인가에 일치하고 있을까.

      • Yes: 쿼리를 써 종료한다.

      • No: 쿼리를 쓰지 마 종료한다.

    • No: 다음의 스텝으로 옮긴다.

  4. binlog-ignore-db 룰이 존재한다. 경향 데이타베이스가 binlog-ignore-db 룰의 어느 쪽인가에 일치하고 있을까.

    • Yes: 쿼리를 쓰지 말고 종료한다.

    • No: 쿼리를 써 종료한다.

따라서, 예를 들어 binlog-do-db=sales 만으로 실행중의 슬레이브는, 경향 데이타베이스가 sales (이)가 아닌 쿼리를 일절 바이너리 로그에 쓰지 않습니다(즉,binlog-do-db 하 `` 다른 데이타베이스를 무시한다'' 그렇다고 하게도 됩니다).

어느 바이너리 로그 파일이 사용되었는지 알도록(듯이),mysqld (은)는 바이너리 로그인 덱스 파일도 작성합니다.이 파일에, 사용된 바이너리 로그 파일 모든 이름이 포함됩니다.디폴트에서는, 이 파일의 이름은 바이너리 로그 파일명에 확장자(extension) '.index' (을)를 붙인 것이 됩니다. 바이너리 로그인 덱스 파일의 이름을 변경하려면 ,--log-bin-index=[filename] 옵션을 사용합니다. mysqld 의 실행중은, 이 파일을 수동으로 편집하지 말아 주세요.mysqld 하지만 혼란하는 원인이 됩니다.

replication를 사용하고 있는 경우, 슬레이브가 필요로 하고 있는 동안은, 낡은 바이너리 로그 파일을 삭제하지 말아 주세요. 예를 들어,mysqladmin flush-logs (을)를 매일 실행하는 경우,3 일 경과한 로그를 모두 삭제하도록(듯이) 합니다.이러한 로그는 수동으로 삭제할 수도 있습니다만, 바이너리 로그인 덱스 파일도 안전하게 갱신할 수 있다 PURGE MASTER LOGS (see 항4.11.7. 「마스터 서버를 제어한다 SQL 스테이트먼트」 )(을)를 사용해 삭제하는 것을 추천 합니다.이 커멘드는,MySQL 4.1 (으)로부터 일자 인수를 지정할 수 있게 되어 있습니다.

SUPER 권한으로의 접속에서는,SET SQL_LOG_BIN=0 (을)를 사용하고, 쿼리의 바이너리 로그를 무효로 할 수 있습니다. See 항4.11.7. 「마스터 서버를 제어한다 SQL 스테이트먼트」 .

바이너리 로그 파일을 조사하려면 ,mysqlbinlog 유틸리티를 사용합니다. 예를 들어, 이하와 같이 바이너리 로그로부터 MySQL 서버를 갱신할 수 있습니다.

shell> mysqlbinlog log-file | mysql -h server_name

mysqlbinlog 유틸리티 및 그 사용법에 관한 상세한 것에 대하여는, 항4.9.5. 「mysqlbinlog (바이너리 로그로부터 쿼리를 실행한다)」 (을)를 참조해 주세요.

BEGIN [WORK] 또는 SET AUTOCOMMIT=0 (을)를 사용하고 있는 경우는, 이전의 갱신 로그는 아니고 MySQL 바이너리 로그를 백업용으로 사용해 주세요.갱신 로그는 MySQL 5.0 (이)가 아니게 됩니다.

바이너리 로그의 기입은, 쿼리가 완료한 직후에 락의 해제전에, 또는 코?~ 트의 전에 행해집니다.이 때문에, 로그는 실행 순서대로 써집니다.

비트랜잭션(transaction) 테이블의 갱신은 실행 직후에 바이너리 로그에 보존됩니다.BDB 테이블이나 InnoDB 테이블등의 트랜잭션(transaction) 테이블에서는, 테이블을 변경하는 모든 갱신(UPDATE ,DELETE , 또는 INSERT )(은)는,COMMIT 커멘드가 서버에 송신될 때까지 캐쉬됩니다.mysqld (은)는,COMMIT 하지만 실행되기 전에 트랜잭션(transaction) 전체를 바이너리 로그에 씁니다. 모든 스레드가, 최초로, 쿼리를 버퍼 한다 binlog_cache_size 의 버퍼를 할당합니다.쿼리가 이것보다 큰 경우, 스레드는 임시 파일을 열어 트랜잭션(transaction)를 보존합니다.스레드가 종료하면 임시 파일은 삭제됩니다.

max_binlog_cache_size (디폴트는 4G )(을)를 사용하고, 복수 쿼리 트랜잭션(transaction)의 캐쉬에 사용하는 토탈 사이즈를 제한할 수 있습니다.트랜잭션(transaction)가 이것보다 큰 경우, 에러가 되어 롤백(rollback) 합니다.

갱신 로그 또는 바이너리 로그를 사용하고 있는 경우에,CREATE ... SELECT 또는 INSERT ... SELECT (을)를 사용하면, 동시 삽입이 통상의 삽입에 변환됩니다. 이것은, 백업에 로그를 적용했을 때에, 테이블의 정확한 카피를 작성하기 위한 조치입니다.

4.10.5. 슬로우 쿼리 로그

mysqld (을)를 --log-slow-queries[=file_name] 옵션으로 기동하면, 실행에 long_query_time 초보다 길게 걸렸다 SQL 커멘드가 모두 로그 파일에 써집니다.최초의 테이블 락에 걸린 시간은 실행 시간에 포함되지 않습니다.

슬로우 쿼리 로그는, 쿼리 실행 후, 모든 락이 해제된 후에 써집니다.이것은, 스테이트먼트가 실행된 순서와는 다른 경우가 있습니다.

파일명을 지정하지 않으면, 호스트 머신의 이름에 -slow.log (을)를 붙인 것이 디폴트명이 됩니다.파일명을 지정해, 패스를 지정하지 않는 경우, 파일은 데이터 디렉토리에 작성됩니다.

슬로우 쿼리 로그는, 실행에 시간이 걸려, 최적화의 대상이 되는 쿼리를 찾아내기 위해서 사용할 수 있습니다.큰 로그에서는, 이것은 어려운 작업이 됩니다.mysqldumpslow 커멘드를 사용하면, 로그의 쿼리 요약을 취득할 수 있습니다.

--log-long-format (을)를 사용하면, 인덱스를 사용하지 않았던 쿼리도 출력됩니다. See 항4.1.1. 「mysqld 커멘드 라인 옵션」 .

4.10.6. 로그 파일의 보수

MySQL 서버에서는 몇개의 종류의 로그 파일이 생성되어 실행 내용을 간단하게 확인할 수 있습니다.See 항4.10. 「MySQL 로그 파일」 . 다만, 로그가 디스크 영역을 점유 너무 하지 않게 이러한 파일을 정기적으로 클린 업 할 필요가 있습니다.

MySQL (을)를 로그 파일과 함께 사용하는 경우, 정기적으로 낡은 파일을 삭제 또는 백업 해, 새로운 파일로 로그를 개시하도록 해 주세요. See 항4.5.1. 「데이타베이스의 백업」 .

Linux (Red Hat ) 인스톨에서는,mysql-log-rotate 스크립트를 사용하고, 낡은 로그 파일의 처리를 자동적으로 실시할 수 있습니다.RPM 디스트리뷰션으로부터 MySQL (을)를 인스톨 하고 있으면, 이 스크립트는 자동적으로 인스톨 되고 있을 것입니다.주의: replication용으로 바이너리 로그를 사용하고 있는 경우, 이 스크립트의 사용에는 주의가 필요합니다.

다른 시스템에서는, 로그 파일을 처리하기 위한 짧은 스크립트를 스스로 인스톨 할 필요가 있습니다.이 스크립트는,cron (으)로부터 개시합니다.

새로운 로그 파일의 사용을 MySQL 에 강제하려면 ,mysqladmin flush-logs (을)를 사용하는지,SQL 커멘드 FLUSH LOGS (을)를 사용합니다. MySQL 버젼 3.21 (을)를 사용하고 있는 경우,mysqladmin refresh (을)를 사용할 필요가 있습니다.

상기 커멘드는 이하를 실행합니다.

  • 일반 로그(--log ) 또는 슬로우 쿼리 로그(--log-slow-queries )(이)가 사용되고 있는 경우, 로그 파일(디폴트에서는 mysql.log (와)과 `hostname`-slow.log )(을)를 닫아 다시 연다.

  • 갱신 로그(--log-update )(이)가 사용되고 있는 경우, 갱신 로그를 닫고,1 개번호가 큰 신규 로그 파일을 연다.

갱신 로그만을 사용하고 있는 경우는, 로그를 플래시 하고, 낡은 갱신 로그 파일을 백업으로 이동하는 것만으로 끝납니다. 통상의 로그를 사용하고 있는 경우는, 이하와 같이 실시합니다.

shell> cd mysql-data-directory
shell> mv mysql.log mysql.old
shell> mysqladmin flush-logs

다음에, 백업을 작성해,mysql.old (을)를 삭제합니다.


출처 - http://itcenter.happyrising.com/core/MySQL_4.1_Korean/MySQL_4.1_Korean/ch04s10.html


===================================================================================



'DB > MySQL' 카테고리의 다른 글

my.cnf 설정  (0) 2012.04.05
character_set_server 설정  (0) 2012.04.05
mysql 트리거 사용하기  (2) 2012.04.02
MySQL DATE 포맷 및 함수  (0) 2012.04.02
Mysql 설치 후 초기 root 패스워드를 mysqladmin 으로 생성하기  (0) 2012.04.01
Posted by linuxism
,


http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny

위의 링크를 참고하여 시도하였으나 원할하게 돌아가지 않았습니다.

그래서 저는 sftp를 chroot 방법 보다는 sftp와 ssh 의 사용권한에 대해서 포스팅하겠습니다.

 

제가 다룰 ssh 의 권한을 설정하는 부분은 3가지 입니다.

  1. ssh는 사용가능하고 sftp를 사용 불가능하게 한다.
  2. ssh와 sftp 모두 사용 불가능하게 한다.
  3. ssh는 사용 불가능하고 sftp를 사용가능하고 home 디렉토리 이상으로 가지 못하게 한다.

 

1. ssh 는 사용 가능하고 sftp를 사용 불가능하게 한다. ( 전체 user 적용 )

이 경우는 아래의 파일을 수정함으로써 설정이 가능합니다.

/etc/ssh/ssh_config

위의 파일에서 subsystem sftp /usr/lib/openssh/sftp-server 부분을 주석처리 한 후 ssh를 재시작 하면

ssh는 사용가능하지만 sftp는 사용하지 못하게 됩니다.

 

2. ssh와 sftp 모두 사용 불가능하게 한다. ( 개별 user 적용 )

이 경우는 아래 파일을 수정해 설정이 가능합니다.

/etc/passwd

위의 파일에서 사용하지 못하게 설정할 유저의 line을 찾은 후 bin/bash 부분을 bin/nologin 으로 바꿔주면 됩니다.

 

3. 마지막으로 sftp 사용가능 ssh 사용 불가능 방법입니다.

이 방법은 포스팅 가장 처음에 나왔던 링크를 따라 시도했지만 잘 되지 않았던 방법입니다.

/etc/ssh/sshd_config

위의 파일을 열어 Subsystem sftp /usr/lib/openssh/sftp-server 라고 설정된 부분을

Subsystem sftp internal-sftp로 변경했습니다.

 

그리고 파일 맨 끝부분에 새로 아래의 부분을 추가해줬습니다.

Match User 유저명

ChrootDirectory /home

AllowTCPForwarding no

X11Forwarding no

ForceCommand internal-sftp

그리고 저장 후 ssh를 재시작해주었습니다.

 

이 후에 나타난 문제점은 위처럼 설정한 유저는 ssh 에 접속되지 않았습니다.

putty라는 프로그램을 사용하고 있는데 위처럼 설정한 유저는 로그인창에서 튀어버리는 현상이 발생했습니다.

sftp의 경우에는 /home 폴더까지 chroot 를 할수는 있었지만 그 이상으로 즉, /home/user 까지 설정해주면

인증이 실패했다는 메세지와 함께 로그인이 되지 않았습니다.

 

또한 internal-sftp를 초기의 /usr/lib/openssh/sftp-server 값으로 변경할 경우에도

역시 로그인이 되지 않았습니다.

 

어쩔 수 없이 /home 까지 접근 가능하게 한 후 각자의 디렉토리만 볼 수 있도록 퍼미션을 조정하는 것으로 끝났습니다.

결국은 ssh 권한을 주지 않는 방향으로 나아가게 되었는데

이 문제에 대한 해결책이 있는분은 연락주세요.

chmod 711 /home
chmod 711 /etc
chmod 711 /
chmod 711 /usr
chmod 711 /usr/local
chmod 711 /proc
chmod 711 /mnt
chmod 711 /opt
chmod 711 /misc
chmod 711 /dev
chmod 711 /bin
chmod 711 /boot
chmod 711 /www
chmod 711 /var

결국 위의 코드를 입력해 chmod로 권한 설정해주는 것으로 끝냈습닏

 

 

이것으로 이번 포스팅을 끝내겠습니다.


출처 - http://www.daclick.co.kr/bbs/board.php?bo_table=adm_server&wr_id=620



'System > Common' 카테고리의 다른 글

AWK & SED 예제  (0) 2012.04.05
PATH 환경변수 우선순위  (0) 2012.04.05
/bin/false VS /sbin/nologin  (0) 2012.04.04
리눅스 파티션 나누기  (0) 2012.04.03
HP ProLiant DL160 G6 Server series (491532-B21) - specifications and warranty  (0) 2012.03.31
Posted by linuxism
,


root 가 아닌계정으로 톰캣을 실행시키려면 톰캣 자체가 tomcat을 돌리려는 계정의 홈디렉토리에 설치되어 있거나, tomcat 디렉토리와 그 하위 디렉토리를 전부 톰캣을 돌리려는 계정소유로 만들어야 합니다. 
Redhat 계열(한컴,와우)을 기준으로 tomcat 이라는 사용자명을 이용해 후자에 대해서 말씀드리겠습니다.
root 계정으로 로그인하여 

# chown -R tomcat.tomcat /usr/tomcat 

위와 같이하면 디렉토리 소유권이 모두 tomcat 계정에 속하게 됩니다. 

/etc/init.d/rc.local 파일의 맨 마지막에 다음 줄을 추가해 줍니다. 

su - tomcat -c "/usr/tomcat/bin/startup.sh" 

이걸로 됐습니다. 

지금까지 제가 본바로 대부분 사람들은 전자(tomcat 계정의 홈디렉토리 /home/tomcat)에다가 톰캣을 깔고 실행하는 것을 선호하는 것 같더군요


출처 - http://okjsp.pe.kr/bbs?act=VIEW&seq=35739&bbs=bbs3&keyfield=subject&keyword=%B0%E8%C1%A4&pg=1








톰캣을 root 계정이 아닌 tomcat 계정으로 실행 하기

우선 tomcat 계정을 생성한다.

# useradd -M tomcat


톰캣 계정 설정 확인

계정을 생성하면 home 디렉토리가 /home/tomcat으로 설정 되며, 이를 CATALINA_HOME으로 변경해준다.

# grep tomcat /etc/passwd

tomcat:x:501:501::/usr/local/tomcat:/bin/bash


실행 스크립트 작성하기

# vi /etc/rc.d/init.d/tomcat 


아래 내용을 작성한다.

#!/bin/bash
# Startup script for the Tomcat Server

# chkconfig: 345 50 50

# description: Tomcat is a Web application server.
# processname: java

# directory : CATALINA_HOME=/usr/local/tomcat

. /etc/profile

case "$1" in

    start)

        echo "Starting tomcat: "

        su - tomcat -c $CATALINA_HOME/bin/startup.sh

        ;;

    stop)

        echo "Shutting down tomcat: "

        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh

        ;;

    restart)

        echo "Restarting tomcat: "

        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh; su - tomcat -c $CATALINA_HOME/bin/startup.sh

        ;;

    *)

        echo "Usage: service tomcat {start|stop|restart}"

        exit 1

esac

exit 0

소유권을 tomcat으로 변경

# chown tomcat:tomcat tomcat  


tomcat 스크립트에 실행권한 주기

#chmod 755 tomcat 


runlevel에 등록

chkconfig에서 add 될 수 있도록 스크립트에 "# chkconfig: 345 50 50" 를 추가한다.

#chkconfig --add tomcat



실제로 리부팅시 톰캣이 tomcat 계정으로 실행되는지 확인한다

# reboot 


톰캣 실행시 데몬실행이 tomcat으로 되어 있는지 확인한다.  tomcat이 아닌 root인경우는 잘못된 경우임

# ps -ef | grep tomcat


톰캣 프로세스 수동 시작 및 종료

# service tomcat start

# service tomcat stop


참조 - http://blog.naver.com/feelwoo?Redirect=Log&logNo=100152801271










톰캣 계정 생성 - script 정상 실행을 위해 bash를 반드시 설정한다.

# useradd -d /home/tomcat -s /bin/bash tomcat


톰캣 디렉토리 소유권 설정

# chown -R tomcat.tomcat /usr/local/tomcat/


톰캣 실행 스크립트 작성 - CATALINA_HOME 변수가 /etc/profile에 설정되어 있다면 /etc/profile를 우선 적용되므로 중복되지 않도록 /etc/profile 변수는 주석처리한다.  

# vi /etc/rc.d/init.d/tomcat

#!/bin/bash
# Startup script for the Tomcat Server


. /etc/profile

CATALINA_HOME=/usr/local/tomcat


case "$1" in

    start)

        echo "Starting tomcat: "

        su - tomcat -c $CATALINA_HOME/bin/startup.sh

        ;;

    stop)

        echo "Shutting down tomcat: "

        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh

        ;;

    restart)

        echo "Restarting tomcat: "

        su - tomcat -c $CATALINA_HOME/bin/shutdown.sh; su - tomcat -c $CATALINA_HOME/bin/startup.sh

        ;;

    *)

        echo "Usage: service tomcat {start|stop|restart}"

        exit 1

esac

exit 0

:wq!



톰캣 실행 스크립트 소유권 및 권한

# chown tomcat:tomcat /etc/rc.d/init.d/tomcat

# chmod 755 /etc/rc.d/init.d/tomcat


필요 시 runlevel에 등록

# chkconfig --add tomcat


톰캣 시작 및 종료

# service tomcat start

# service tomcat stop



'Web > WAS' 카테고리의 다른 글

톰캣(tomcat) Connector 설정  (0) 2012.04.05
Tomcat 의 logging.properties 및 log 디렉토리 설정  (2) 2012.04.04
was - web.xml 설명  (0) 2012.02.12
mod_jk 사용법  (0) 2012.02.10
Jakarta Project  (0) 2012.02.05
Posted by linuxism
,