fcheck 이란?

Linux 2010/10/19 17:41
fcheck 파일 무결성 체크 프로그램이다.


중요한 파일에 대해서 권한이나 수정이 된 파일들을 자동으로 찾아주는 것이다.
특히 md5sum과 같이 사용할 수 있으므로 더욱더 강력하다고 할 수 있겠다.


식 홈페이지인 http://www.geocities.com/fcheck2000/ 문을 닫았다 ㅋㅋㅋ
어디서 다운 받아야 할지 찾아 봐야겠다 ㅋ
2010/10/19 17:41 2010/10/19 17:41
TAG ,

fail2ban 이란?

Linux 2010/10/19 17:27
fail2ban은 로그인 정보의 로그를 이용하여 블록된 로그 패턴을 읽어 들여 iptables와 연동하여 접근을 차단하는 솔루션이다.

수동으로 파악하지 않고 접근을 차단하기 때문에 편리하기는 하지만 실제 사용자도 블록될 수도 있어 보인다. 잘 사용하면 좋은 솔루션 같다 ㅋㅋㅋ

홈페이지 : http://www.fail2ban.org/
2010/10/19 17:27 2010/10/19 17:27

/proc/loadavg

Linux 2010/10/19 14:11
/proc/loadavg 파일에 보면 아래와 같은 포멧이 출력된다.

0.00 0.00 0.00 1/192 16466


첫번째는   1분 동안의 Load Average 값
두번째는   5분 동안의 Load Average 값
세번째는 15분 동안의 Load Average 값
네번째는 현재 cpu가 수행하고 있는 스레드 수 / 커널 스케줄러 목록에 있는 총 스레드 수
다섯번째는 가장 최근에 실행한 프로세스 아이디 + 1 이다.


1, 2, 3번째의 Load Average 란 Run queue와 I/O Wating상태의 CPU 사용량 평균 값이다.
4번째의 현재 cpu가 수행하고 있는 스레드 수의 최대값은 cpu코어 수와 동일하다.
2010/10/19 14:11 2010/10/19 14:11
TAG

리눅스 버전 확인

Linux 2010/10/18 10:53
#uname -a
#cat /etc/issue
#cat /etc/issue.net
#cat /etc/rc.sysinit | grep PRODUCT=
2010/10/18 10:53 2010/10/18 10:53

자바가 rpm으로 설치되어 있어 java 컴파일을 하고 class파일을 실행 시키지 밑에와 같은 에러가 발생하였다.
[[email protected] java_test]# java TMain
Exception in thread "main" java.lang.NoClassDefFoundError: TMain
Caused by: java.lang.ClassNotFoundException: TMain
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
Could not find the main class: TMain. Program will exit.

환경변수를 확인해 보니 java과련 변수는 등록 되어 있지 않아
export JAVA_HOME=/usr/java/jdk1.6.0_18/;
CLASSPATH=.:$JAVA_HOME\bin;
PATH=$PATH:$CLASSPATH

실행 한후  다시 컴파일 하고 실행해 보니 잘 된다.
rpm으로 설치시 환경변수가 등록이 안되나 보다 ㅡㅡ;
2010/10/18 10:03 2010/10/18 10:03

mysql 백업 및 복구

MYSQL 2010/10/15 13:24

[MySQL 백업하기]

mysqldump -hDB서버명 -u유저명 -p패스워드 --default-character=캐릭터셋 [백업할 테이터베이스명] > [외부로 저장할 파일명]

ex) mysqldump -h127.0.0.1 -uDBuser -pPassword--default-character=sjis MyTable > MyTable.sql



특정 테이블만 백업 할 경우 :

mysqldump -hDB서버명 -u유저명 -p패스워드 --default-character=캐릭터셋 [테이타베이스명] [특정테이블명] > [외부로 저장할 파일명]
ex) mysqldump -h127.0.0.1 -uDBuser -pPassword MyDB.MyTable > MyDB_MyTable.sql



테이블 구조만 백업받기
mysqldump -h127.0.0.1 -uDBuser -pPassword -d DATABASE > db_script.sql

이렇게 하면 test 데이터베이스 안의 모든 테이블의 구조만 db_script.sql 파일로 저장됩니다.




[MySQL 복구하기]
mysql -hDB서버명 -u유저명 -p패스워드 [복구할 테이터베이스명] < [외부로 저장된 파일명]
ex) mysql -h127.0.0.1 -uDBuser -pPassword MyDB < MyDB.sql




데이터베이스가 latin1 로 설정이 되어 있는데 덤프하면 한글이 깨지죠?

그럴땐 iconv~
 
iconv -c -f utf-8 -t latin1 원본명 > 새파일명

iconv -c -f utf-8 -t latin1 crm.sql > crm3.sql

2010/10/15 13:24 2010/10/15 13:24

ASP+MYSQL


ODBC 사용(X)
Set dbCon =Server.CreateObject("Adodb.Connection")
dbCon.open("Driver={SQL Server};Server=서버이름 또는 IP;Database=데이타베이스명;uid=아이디;pwd=패스워드")


ODBC 사용(O)
Set dbCon = Server.CreateObject("ADODB.Connection")
strConnect = "DSN=testODBC;uid=testUser;pwd=1234;"
dbCon.Open strConnect
SQL = "Select * from testTable"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open SQL, dbCon




PHP+MYSQL


$connect = mysql_connect("서버주소", "계정명","비밀번호");
$mysql_select_db("디비명", $connect);
$sql="create database mydb";
$result = mysql_query($sql, $connect);




JSP+MYSQL
<%@page contentType="text/html;charset=EUC-KR" import="java.sql.*,java.util.*" %>
<%
 
  Connection conn=null;
  Statement stmt = null;
  ResultSet rs = null;
  PreparedStatement pstmt = null;
String connURL = "jdbc:mysql://localhost:3306/test";


  try{
 
  //dirver loading
   Class.forName("com.mysql.jdbc.Driver");
   out.print("forNameload");


   //datebase conn
   conn = DriverManager.getConnection(connURL,"root","pw");
   out.print("getConn");


  }catch(ClassNotFoundException ex){
  System.out.println("classnotfound"+ ex.getMessage());
  }catch(Exception e){
  System.out.println("Exception"+e.getMessage());
  }finally{
   try{
    if(stmt !=null)stmt.close();
     if(pstmt !=null)pstmt.close();
    if(conn !=null)conn.close();
   }catch(SQLException sqle){
     System.out.println("SQLException"+sqle.getMessage());
   }
  }
 
 %>




JAVA+MYSQL


import java.lang.*;
import java.sql.*;
public class DriverTest{
 public static void main(String args[]){
  Connection con;
  try{
   Class.forName("org.gjt.mm.mysql.Driver").newInstance();
// Class.forName("com.mysql.jdbc.Driver").newInstance();
   
   con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","pw");
System.out.println("Success!");
  }
  catch(SQLException ex){System.out.println("SQLException:"+ex);}
  catch(Exception ex){System.out.println("Exception:"+ex);}
 }
}
2010/10/13 14:27 2010/10/13 14:27

[현재 서버 변수 값 확인]
mysql> show variables
    -> where Variable_name in ('version', 'log', 'general_log', 'general_log_file', 'log_output');
+------------------+--------------------------------------+
| Variable_name    | Value                                |
+------------------+--------------------------------------+
| general_log      | OFF                                  |
| general_log_file | /usr/local/mysql/data/cluster201.log |
| log              | OFF                                  |
| log_output       | FILE                                 |
| version          | 5.1.42                               |
+------------------+--------------------------------------+
5 rows in set (0.00 sec)
// 로그 비활성화 상태


[로그 활성화 하기]
mysql> set global general_log = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| general_log   | ON     |
| log           | ON     |
| version       | 5.1.42 |
+---------------+--------+
3 rows in set (0.00 sec)
// 로그 활성화 상태 확인


[로그 다시 활성화 하기]
mysql> set global general_log = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| general_log   | OFF    |
| log           | OFF    |
| version       | 5.1.42 |
+---------------+--------+
3 rows in set (0.00 sec)
// 로그 비활성화 상태 확인


[로그 다시 활성화 하기]
mysql> set global general_log = 1;
Query OK, 0 rows affected (0.00 sec)


[로그 파일이 쌓는 방식 선택]
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)
// 로그 쌓는 방식을 "FILE" 혹은 "TABLE" 둘 중 한가지 방식으로 선택 할 수 있다.


[로그 파일이 테이블에 쌓이는 방식 선택]
mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
// 로그 쌓는 방식을 TABLE 방식으로 선택


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set global log_output='FILE';
Query OK, 0 rows affected (0.00 sec)
// 로그 쌓는 방식을 FILE 방식으로 선택


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)


mysql> select count(*) from mysql.general_log;
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec)


mysql> truncate mysql.general_log;
Query OK, 0 rows affected (0.00 sec)
// TABLE에서 쌓여 있는 모든 로그들 삭제


mysql> select count(*) from mysql.general_log;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)


mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)
// 로그 쌓는 방식을 다시 TABLE 방식으로 선택


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)


mysql> select count(*) from mysql.general_log;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)


[로그 파일이 파일,테이블 둘다 쌓이 방식 선택]
mysql> set global log_output='TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)


mysql>  show variables like 'log_output';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| log_output    | FILE,TABLE |
+---------------+------------+
1 row in set (0.00 sec)

[쿼리 실행]
mysql> insert into test.t1 values(1);


[테이블에 실행한 쿼리 기록]
mysql> select * from mysql.general_log limit 1;
+---------------------+------------------------------------+-----------+-----------+--------------+---------------------------------+
| event_time          | user_host                          | thread_id | server_id | command_type | argument                        |
+---------------------+------------------------------------+-----------+-----------+--------------+---------------------------------+
| 2008-09-01 18:21:29 | root[root] @ localhost [localhost] |        18 |         0 | Query        | insert into test.t1 values(1)   |
+---------------------+------------------------------------+-----------+-----------+--------------+---------------------------------+
1 row in set (0.00 sec)

2010/10/13 13:59 2010/10/13 13:59
TAG ,

Mysql - innoDB 관련 -

MYSQL 2010/10/12 17:33

1. What is Innodb Table space  ?
    - 그 동안  Myisam 방식으로 테이블 스페이스를 사용하던 mysql은 rollback 이 되지 않는다.
       다른 데이터베이스 와 달리  autocommit 이 자동으로 실행 하여
       데이터 베이스의 트렌젝션시 발생되는 lock을 처리 하기 힘들었다.
   -  innodb는 오라클 처럼 shared tablespace ( ibdataN) 와 로그파일 (ib_logfileN ) 로 구성된다.
      로그파일은 트랜젝션들을 처리하는 오라클의 아카이브 로그 같이 생각 하면 된다.
 
2. Mysql의 주요 특징
   참고 : Mysql Technical Reference fo Ver 5.0 : 16장  InnodB Configureation
  -  rollback 을 구현 할수 있다.
  -  transaction isolation Level
     : READ-UNCOMMITED, READ-COMMITED, REPEATABLE-READ, SERIALIZABLE
  - innodb_buffer_pool_size
    : MyIsam 방식과 달리 buffer poll을 이용하여 인덱스와 raw data를 캐싱한다.
      따라서 사용량이 많아 지면 tablespace  Disk I/O  가 그만큼 줄어 든다
      pool의 용량은 real memory의 80% 까지 줄수 있으나,  다른 어플리 케이션과 사용시
     너무 많이 주게 되면 운영 체제의 paging을 일으키게 된다.
     ( 참고로 오라클은 SGA 를 50%로 권고 한다)
     또 32bit 시스템의 경우 2 ~ 3.5G의 제한되므로 너무 많이 주면 안된다고 한다.
 - innodb_data_file_path
    아직 오라클 같이 Shared Table Space 를 온라인상에서 추가 하기 힘들다.
    오직 my.cnf 환경 파일로 생성이 되고 변경 된다.
      형식
     innodb_data_file_path  = [파일위치1/]파일명1:파일1사이즈:autoextend:max:MAX파일 사이즈
     파일 간의 구분자는 ";" 이고 파일의 속성 구분자는 ":" 이며
     autoextend:max:2000M 는 맨마지막 파일에만 해당된다.
innodb_file_per_table
   를 사용하면 이전 isam 같이 데이터 베이스 폴더 안에 table_name.ibd 라는 파일이 생긴다.
   사용예는 다음과 같다.
    innodb_data_home_dir=/export/DATABASE/MyData
   innodb_data_file_path = ibdata1:500M;ibdata2:500M;ibdata3:500M;ibdata4:200M:autoextend:max:2000M
 
3. InnoDB 만들기
1) Mysql 다운로드
wget http://downloads.mysql.com/archives/mysql-5.4/mysql-5.4.2-beta-linux-i686-glibc23.tar.gz
 
2) 링크걸기
tar xvfz mysql-5.4.2-beta-linux-i686-glibc23.tar.gz
mv mysql-5.4.2-beta-linux-i686-glibc23 /usr/local/mysql-5.4.2
ln -s /usr/local/mysql-5.4.2 /usr/local/mysql
 
3) 구동 스크립 등록하기
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
 
4) InnoDb 설정
cp -pr /usr/local/mysql/support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
vi /etc/my.cnf
[mysqld]
...
## 한글(euckr) 설정
character-set-client-handshake=FALSE
init_connect          = SET collation_connection=euckr_korean_ci
init_connect          = SET NAMES euckr
default-character-set = euckr
character-set-server  = euckr
collation-server      = euckr_korean_ci
language=korean
...
# 풀사이즈 조절 (디폴트 2G <- 1G)
innodb_buffer_pool_size = 1G
...
# 바이너리 로그 주석처리(필요에 따라..)
#log-bin=mysql-bin
...
log-error        = /usr/local/mysql/logs/mysql_error.log
log-slow-queries = /usr/local/mysql/logs/mysql_slow.log
...
innodb_data_file_path =ibdata1:4000M;ibdata2:100M;ibdata3:100M:autoextend
innodb_data_home_dir            = /usr/local/mysql/ibdata
innodb_log_group_home_dir       = /usr/local/mysql/iblogs
innodb_log_arch_dir             = /usr/local/mysql/iblogs
 
4. myisam -> innodb 로 바꿔보자.
1) 기존 데이터베이스 스키마 덤프
2) 기존 데이터베이스 데이타 덤프
// mysql 로그인
# mysql -u -p
Enter password : 비밀번호 (첫 접속시에는 비밀번호 없음)
// innodb 설정 상태 확인
mysql> SHOW VARIABLES LIKE 'have_innodb';
 +---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_innodb   | YES   |
+---------------+-------+
1 row in set (0.00 sec)
// 설정 상태 확인
mysql> SHOW STATUS LIKE '%innodb%';
3) 데이터베이스 생성
mysql> create database testdb;
mysql> grant all on testdb.* to testdb  identified by 'testdb';
mysql> flush privileges;
4) 기존 데이터베이스 스키마 복구
 
 
5) 테이블 Type innodb로 변경
2010/10/12 17:33 2010/10/12 17:33
TAG ,

apache MPM 이란?
MPM (Multi-Processing Module) : 다중 처리 모듈
☞ apache 가 받아들인 요청을 처리하기 위해 "자식 process" 에게 분배하는 방식이다.
 
 
종류 : 여러가지 종류가 있으나 대표적인 prefork 방식과 Worker 방식만 소개 하겠습니다.
 
Prefork
실행중인 프로세스 복제하여 실행 ( 메모리 영역까지 같이 복제)
프로세스가 소비하는 메모리가 많음.
응답프로세스를 미리 띄워놓고 클라이언트 요청시 자식 프로세스가 반응하게 되는 방식.
prefork MPM ( --with-mpm=profork) 컴파일
Prefork 방식은 일반적으로 single CPU 또는 Dual CPU에서 성능이 좋고
 
Worker
worker MPM ( --with-mpm=worker) 컴파일
Worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋다.
요청을 thread 단위로 처리 ( 최대 64개의 thread 처리 가능 )
지정된 만큼의 프로세스와 각 스레드를 준비하여 클라이언트의 요청을 받아들이는 설정
 
Prefork 방식과 Worker 방식의 차이점
(1)  Worker가 Prefork에 비해 적은 메모리 사용한다.
(2)  Worker : 통신량이 많은 서버에 적절한 형태를 가진다.
(3)  Prefork : 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
(4)  Prefork : 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
(5)  ‘Worker‘ 와 ‘Prefork‘ 의 속도는 비슷하다.
(6)  apache MaxClient : Prefork 방식일 경우 최대 256 까지 변경 가능하다.
 
기본으로 구동되는 prefork 방식으로 호스트웨이에서는 mpm 을 prefork 로 컴파일하여 제공됩니다. prefork 의 구동 방식은 child 프로세스를 똑같이 복사하면서 access를 처리하여, 이로인해 메모리도 똑같이 복사하게 되며 당연히 메모리를 많이 소비합니다.
이러한 단점을 극복하고자 나온게 httpd-2x.x 부터는 mpm 중에서 worker 가 추가되어 나왔으며, 모든 access 를 하나의 쓰레드로 처리하여, 결론적으로 메모리 소비에는 어느 정도 효과가 있으나, 하나의 쓰레드가 문제가 생기면 해당 쓰레드에 access 중인 모든 프로세스에 문제가 발생됩니다.
결론적으로 복제된 프로세스만 영향을 받는 prefork 에 비해서 굉장히 불안해 집니다.
대안으로 하나의 쓰레드가 처리하는 access 프로세스를 64개로 기본적으로 제한하고, 또는 수정할 수 있게되어 있으나, 이 부분도 더 개선이 되어야겠습니다.
따라서 호스트웨이에서는 위와 같은 이유로 prefork 방식을 권고해드립니다.
(apache.org 에서도 권고하는 사항으로, 아파치 컴파일시 특별한 옵션을 주지 않으면 prefork 로 컴파일됩니다.
2010/10/12 16:58 2010/10/12 16:58
TAG