신문이나 TV에 나오는 ‘연료첨가제’ 광고를 보면 귀가 솔깃해진다. 연료를 절감하고 엔진 출력을 높여 준다고 광고하기 때문이다. 그러나 가격이 만만치 않고 실제 효과도 무작정 믿을 수가 없어 구입이 망설여지기 마련이다. 첨가제를 자주 사용하면 오히려 엔진에 해롭다는 주장도 있어 소비자는 혼란스럽기만 하다. 연료첨가제는 일부 효과가 있는 것은 사실이지만 과신하거나 과용하면 안 된다는 것이 전문가들의 의견이다.

○엔진의 때 빼주는 세정기능 연료첨가제

연료첨가제는 말 그대로 휘발유나 경유에 일정 비율로 섞어 쓰는 화학 첨가제다.

첨가제는 크게 엔진 실린더에 낀 때를 빼주는 기능과 엔진 출력을 높여 주는 기능으로 나뉘는데 국내에서 팔리는 것은 대부분 세정 기능용 연료첨가제다.

휘발유나 경유는 연소 과정에서 다양한 불순물이 나온다. 그중에서도 카본은 실린더와 피스톤에 달라붙어 엔진의 기능을 떨어뜨린다. 실린더 내에 연료가 분사되면 피스톤이 밀고 올라와 고온고압 상태가 되는데 이때 실린더 윗부분에서 불꽃을 튀겨 폭발하면서 피스톤의 상하 운동이 반복된다.

문제는 카본이 실린더 내부에 잔뜩 끼어 있으면 내부 압력과 온도가 높아져 피스톤이 끝까지 밀고 올라오기 전에 자연 발화(노킹 현상)를 해 버린다는 점. 피스톤이 실린더 윗부분 끝까지 올라왔다가 폭발력으로 튕겨 내려가는 힘에 따라 엔진의 출력이 결정되는데 노킹 현상이 발생하면 출력이 떨어질 뿐만 아니라 엔진도 손상된다.

세정 기능용 연료첨가제는 이처럼 엔진에 낀 묵은 때를 벗겨 주고, 연료통의 수분도 없애는 역할을 한다.

현재 시중에서 팔리는 제품으로는 불스원샷, 레덱스, 엔팍, STP 등 10여 종류가 있다.

불스원의 조승현 제품개발담당 차장은 “세정 기능이 있는 연료첨가제는 완전연소를 돕기 때문에 연료소비효율 개선 효과도 적지 않다”고 설명했다.

○옥탄가 높여 주는 옥탄부스터

연료첨가제 중에는 연료의 옥탄가를 높여 주는 ‘옥탄부스터’도 있다.

옥탄가는 피스톤이 압축할 때 연료가 자연 발화되지 않고 견딜 수 있는 내화점(耐火點)을 의미하는데 높을수록 고급 휘발유다. 일반 휘발유의 옥탄가는 91∼93인 반면 요즘 나오는 프리미엄급 휘발유는 98∼100이다.

옥탄부스터는 휘발유에 일정 비율로 섞어 넣으면 같은 휘발유라도 옥탄가가 1, 2 정도 올라가는 효과가 있어 노킹이 발생하는 엔진이나 고(高)옥탄가를 요구하는 수입차에는 출력이 약간 올라가는 효과가 있다.

문제는 옥탄부스터에 어떤 화학물질을 첨가했느냐다. 일부 첨가물은 유해물질을 발생시키거나 엔진에 손상을 줄 수 있어 사용이 제한되고 있다.

자동차 정비업체 카젠의 김창석 정비팀장은 “연료첨가제는 엔진 내 카본의 생성을 조금 줄여 줄 수는 있지만 없애지는 못한다”며 “어떤 첨가제든 성능을 과신하면 안 되고 일부 제품은 너무 자주 사용하면 오히려 해로울 수도 있으니 주의해야 한다”고 충고했다.

김창원 기자 changkim@donga.com

 

[php pdo-mysql 확장 모듈 설치]
 
1.pdo_mysql download
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
 
2.설치

적당한 위치에 다운로드 받은 파일을 압축해제 후 압축해제한 디렉토리로 이동 
/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
make && make install
 
3.적용

php.ini 파일은 대부분 /etc 또는 apache/conf 디렉토리에 있음.

php.ini 파일에 추가
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so
 
추가 후 apache restart 하면 적용완료 됨!! 
/usr/local/apache/bin/apachectl restart


※ 에러 처리

make 과정시 아래와 같은 에러가 발생할 경우


/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:25:19: error: mysql.h: 그런 파일이나 디렉터리가 없습니다
In file included from /usr/local/src/PDO_MYSQL-1.0.2/pdo_mysql.c:31:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:36: error: expected specifier-qualifier-list before ‘MYSQL’
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:48: error: expected specifier-qualifier-list before ‘MYSQL_FIELD’
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:53: error: expected specifier-qualifier-list before ‘MYSQL_RES’
make: *** [pdo_mysql.lo] 오류 1

해결 : vi /usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h

25라인의 #include <mysql.h> 를 #include </usr/local/mysql/include/mysql/mysql.h> 로 변경

 

/usr/local/src/PDO_MYSQL-1.0.2/mysql_driver.c:33:26: error: mysqld_error.h: 그런 파일이나 디렉터리가 없습니다
In file included from /usr/local/src/PDO_MYSQL-1.0.2/mysql_driver.c:40:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h: In function ‘pdo_mysql_get_sqlstate’:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h:378: error: ‘WARN_DATA_TRUNCATED’ undeclared (first use in this function)
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h:378: error: (Each undeclared identifier is reported only once
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_sqlstate.h:378: error: for each function it appears in.)
make: *** [mysql_driver.lo] 오류 1

해결 : vi mysql_driver.c

33라인의 #include <mysqld_error.h> 를 #include </usr/local/mysql/include/mysql/mysqld_error.h> 로 변경




 

mod_geoip-latest.tar.gz   mod_geoip2_1.2.5.tar.gz


아파치에 GeoIP 모듈 설치하는 방법

GeoIP 란 MaxMind 에서 제공하는 국가별로 IP를 확인할 수 있는 오픈소스 라이브러리로 이를 이용하여 서버에 접근 하는 아이피를

국가별로 관리할 수 있습니다.

 

http://www.maxmind.com

(1) GeoIP C API 설치하기

1. 

- GeoIP C API를 다운 받아 설치 합니다.

http://geolite.maxmind.com/download/geoip/api/c/

#wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz

#wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.5.1.tar.gz  (최신)

2

- 압축을 해제 합니다.

#tar zxvf GeoIP-1.4.6.tar.gz

3.
- 해제된 디렉토리로 이동 후 설치 디렉토리를 지정하여 ./configure 합니다.

#cd GeoIP-1.4.6
#./configure --prefix=/usr/local/GeoIP

4.
- 컴파일 및 설치를 진행 합니다.

#make && make install

5.
GeoIP의 ip 목록을 최신정보로 갱신하기 위하여 GeoIP.dat 를 다운받아 설치된 위치에 복사 합니다.

- 국가 정보 다운로드

#wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

- 도시 정보 다운로드

#wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

- 압축 해제

#gzip -d GeoIP.dat.gz 
#gzip -d GeoLiteCity.dat.gz

- 해제된 파일을 GeoIP가 설치된 위치에 덮어쓰기

#cp -a GeoIP.dat /usr/local/GeoIP/share/GeoIP/
#cp -a GeoLiteCity.dat /usr/local/GeoIP/share/GeoIP/

(2)
geoip모듈을 아파치에 설치하기.

1.mod_geoip를 다운 받습니다.

아파치 1.x 용

http://geolite.maxmind.com/download/geoip/api/mod_geoip/   안되면

http://www.maxmind.com/download/geoip/api/mod_geoip/mod_geoip-latest.tar.gz

아파치 2.x 용

http://geolite.maxmind.com/download/geoip/api/mod_geoip2/

 

ex)아파치 2.x용 다운로드

#wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz

 

2

.
압축을 해제 합니다.

#tar zxvf mod_geoip2_1.2.5.tar.gz

3.
해제된 위치로 이동 후 c파일을 apxs를 이용하여 설치 합니다.

#cd mod_geoip2_1.2.5

#[아파치 apxs경로] -i -a -L[geoip설치디렉토리의lib경로] -I[geoip설치디렉토리의include경로] -lGeoIP -c[mod_geoip.c 경로] 

## 옵션의 대소문자 주의 -lGeoIP = 소문자 l로 시작

#/usr/local/apache/bin/apxs -i -a -L/usr/local/GeoIP/lib -I/usr/local/GeoIP/include -lGeoIP -c /root/mod_geoip2_1.2.5/mod_geoip.c

4.
모듈이 정상적으로 설치,로드 되었는지 확인합니다.

#ls -al /usr/local/apache/modules/mod_geoip.so 
-rwxr-xr-x 1 root root 38179  3월 26 13:16 /usr/local/apache/modules/mod_geoip.so

- httpd.conf 파일의 LoadModule 위치에 추가 되었는지 확인

LoadModule geoip_module       modules/mod_geoip.so

- phpinfo 페이지의 Apache Environment 정보에 GEOIP_CONTINENT_CODE, GEOIP_COUNTRY_CODE, GEOIP_COUNTRY_NAME 항목 확인

5.
httpd.conf에 mod_geoip 모듈의 적용 내용을 설정합니다.

특정 국가의 접근 차단

<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
    <Location /home>
           SetEnvIf GEOIP_COUNTRY_CODE CN go_out
           SetEnvIf GEOIP_COUNTRY_CODE RU go_out
           SetEnvIf GEOIP_COUNTRY_CODE TH go_out
           <Limit GET POST>
             Order Allow,Deny
             Allow from all
             Deny  from env=go_out
           </Limit>
    </Location>
</IfModule>

특정 국가에만 접근 허용

<IfModule mod_geoip.c>
    GeoIPEnable On
    GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
    <Location /home>
          SetEnvIf GEOIP_COUNTRY_CODE KR go_in
           <Limit GET POST>
             Order Deny,Allow
             Deny from all
             Allow  from env=go_in
           </Limit>
    </Location>
</IfModule>

또는 httpd.conf 와 virtualhosts.conf 에 분리해서 설정도 가능

[httpd.conf 내용]

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
</IfModule>

[virtualhosts.conf 내용]

<Virtualhost *>
<Location />
 SetEnvIf GEOIP_COUNTRY_CODE KR go_in
  <Limit GET POST>
   Order Deny,Allow
   Deny from all
   Allow  from env=go_in
 </Limit>
</Location>
</Virtualhost>


[참고]
Cannot load /usr/local/apache/libexec/mod_geoip.so into server: libGeoIP.so.1: cannot open shared object file: No such file or directory   <--- 요런 에러 발생시
/etc/ld.so.conf 파일에
/usr/local/GeoIP/lib 라인 추가 후
ldconfig 명령실행

 

/usr/local/apache/bin/apachectl 파일을 열어 아래 처럼 수정해라.

[before]

    start)
        if [ $RUNNING -eq 1 ]; then
            echo "$0 $ARG: httpd (pid $PID) already running"
            continue
        fi
        if $HTTPD ; then
            echo "$0 $ARG: httpd started"
        else
            echo "$0 $ARG: httpd could not be started"
            ERROR=3
        fi
        ;;


[after]
   
    start)
        if [ $RUNNING -eq 1 ]; then
            echo "$0 $ARG: httpd (pid $PID) already running"
            continue
        fi
        if $HTTPD -DSSL; then
            echo "$0 $ARG: httpd started"
        else
            echo "$0 $ARG: httpd could not be started"
            ERROR=3
        fi
        ;;

이후 /usr/local/apache/bin/apachectl start 로 실행했을 때 ssl 포트가 동시에 open 되는지 netstat -nlp 로 확인 해 볼것.


<Directory  "/home/sysadm/public_html">
  Order  allow,deny
  allow from all
  deny from 223.33.184.104
</Directory>


* (1) 223.33.184.104 에서 접속이 들어오면 차단하고 그 외에는 모두 허용한다.



* (2) Deny from all 을 생략할 경우 아래와 같이 Order 순서를 allow,deny 순으로 하여 allow만 처리되도록 한다.


<Directory "/www/sysadm/public_html">
    Order allow,deny
    Allow from 223.33.184.104
</Directory>


* (3) Deny from all 이 들어갈 경우 아래와 같이 Order 순서를 deny,allow 순으로 하고 Deny from을 먼저 정의한다.


<Directory "/www/sysadm/public_html">
    Order deny,allow
    Deny from all
    Allow from 223.33.184.104
</Directory>


* (2)와 (3) 모두 223.33.184.104 만 접속을 허용하고 나머지는 모두 차단한다.


[참고] Allow from 과 Deny from 은 아래와 같이 특정 IP 뿐만 아니라 C클래스 또는 B클래스 대역까지도 차단이 가능하다.


ex) Allow from 10.10.10.0/16   -> 10.10.10.0 대역 b클래스 허용 하기

ex) Deny from 10.10.10.0/16   -> 10.10.10.0 대역 b클래스 차단 하기


ex) Allow from 10.10.10.0/24   -> 10.10.10.0 대역 c클래스 허용 하기

ex) Deny from 10.10.10.0/24   -> 10.10.10.0 대역 c클래스 차단 하기


DB에 영향을 미치는 쿼리문을 찾아낼 수 있는 좋은 방법.

① mysql> show processlist;
show processlist -i5 여기서 숫자는 리프래쉬할 시간(초)입니다.
]# mysqladmin -uroot -p proc stat -i5 (밑에것 보다 조금더 상세)
]# mysqladmin -uroot -p processlist -i5

② mysql> show status;

기타)

]# top

팁!) ①의 경우 mysql에 접속을 한상태에서 내리는 명령어이지만 아래와 같이 접속하자 마자 바로 보여주는 예도 있다.
]# mysqladmin -uroot -p processlist

------------------------- sleep 죽이는 법 두가지 -------------------------
① mysql>kill id;
② mysqladmin kill id -u root -p

 

MySQL db 일반유저 (root 게정 변경가능) 패스워드 변경하고 싶을 때 방법이다.

# mysql -u root -p
Enter password : (패스워드를 입력하고 들어가서)

mysql>use mysql

mysql> update user set password=password('패스워드') where user='데이터베이스_id';

mysql> flush privileges;


테이블 내의 모든 내용을 삭제하므로 테이블 이름만 남음.
다른 방법으로 delete from tbl_name 과 같음

차이점은 

DELETE의 경우에는 일단 테이블의 내용을 하나의 레코드씩 삭제하는 반면, 

TRUNCATE TABLE은 먼저 테이블을 drop한 후에 테이블의 포맷 파일인 .frm 파일을 보고 테이블을 새로 만들게 된다.

그러므로 TRUNCATE와 DELETE는 동일한 결과를 보이지만 내부적으로 작동하는 방식이 다르다. 
TRUNCATE TABLE의 경우 레코드를 삭제할 필요 없이 테이블을 삭제하므로 레코드의 수가 많을 경우 매우 빠르게 삭제할 수 있다.

[형식]

truncate table tbl_name;

 

mysql.sock 라는 것은 Unix Domain Socket 입니다.
Unix Domain Socket 이라는 것은 TCP/IP와 같은 식으로 다룰 수 있는 통신 소켓입니다.
(소켓 프로그래밍에서도 socket을 생성할 때 TCP/IP와 인수만 다르게 주어서
생성시키죠. 그 뒤는 같은 방식으로 다룹니다.)
단 Unix Domain Socket은 다른 컴퓨터에 있는 프로세스와는 통신할 수 없고,
같은 컴퓨터에 있는 프로세스끼리 통신만 가능합니다. 일종의 IPC 죠.

왜 이런 게 필요하냐면,
Mysql 서버 프로그램(데몬이라고 하죠. mysqld)과 클라이언트 프로그램(mysql, 또는
php의 mysql 접속 루틴)은 서로 다른 프로세스입니다. 당연히 둘 사이에 통신이 이루어져야
어떤 일을 할 수 있는 거죠. 이 통신의 용도로 Unix Domain Socket을 쓰는 겁니다.

mysql은 TCP/IP 소켓과 Unix Domain Socket 둘 다 사용할 수 있습니다.
앞의 것은 mysql 서버와 클라이언트가 다른 컴퓨터에 있을 때 사용하며(이때 포트는 보통
3306이죠), 뒤의 것은 서버와 클라이언트가 같은 컴퓨터에 있을 때 사용합니다. 같은 컴퓨터에
있을 때에도 TCP/IP 소켓을 쓸 수도 있으나 Unix Domain Socket이 더 빠르죠.

TCP/IP 소켓이 아이피 주소와 포트를 이용해서 접속을 하듯이 Unix Domain Socket은
파일을 이용합니다. 질문에서 나왔던 mysql.sock 이라는 것이 바로 이 용도로 사용되는
파일입니다. 따라서 mysqld 를 실행시켰을 때는 mysql.sock 파일이 있지만, 중지시키면
저 파일은 사라집니다.

그래서 통신을 하기 위해서는 mysql.sock 라는 파일은 서버와 클라이언트 모두 접근
가능해야 합니다. mysql.sock 파일이 생성되는 위치에 서버가 파일을 쓰거나 읽을 수 없으면
서버는 에러를 발생시키고 중지되며, 클라이언트가 그 파일에 접근할 수 없으면 접속이
이루어지지 않습니다. mysql.sock 파일에 관한 문제는 이 접근 권한이 잘못되어서
발생하는 것이 대부분입니다.

rpm으로 설치하면 보통 mysql.sock 파일의 위치는 /var/lib/mysql/mysql.sock 입니다.
이것은 mysql 을 컴파일할 때 --with-unix-socket-path=.... 에서 설정할 수 있습니다.
이럿게 되면 mysqld, mysql, 그리고 libmysqlclient.a(so) 도 모두 이 설정을 이용해서
통신을 하게 됩니다. 이 도메인 소켓의 위치는 컴파일 후라도 명령행 인수를 이용해서
바꿔 줄 수 있습니다. 또는 /etc/my.cnf 파일에서 지정할 수도 있습니다.

unix domain socket 에 대해 더 자세히 알고 싶으시면
W. Richard Stevens, Unix Network Programming I 을 참조하시면 됩니다.  

사용중인 DB를 덤프할 때 특정 테이블을 제외하고 싶을 때는 아래 옵션을 이용하면 된다.

(전체 테이블 중 특정 1개 테이블만을 제외하는 덤프)

mysqldump -u root -p DBname --ignore-table=DBname.tbname > 저장파일명.sql

(제외할 테이블이 n개 일 경우 아래처럼 --ignore-table=dbname.tbname 을 추가한다)

mysqldump -u root -p DBname --ignore-table=DBname.tbname1 --ignore-table=DBname.tbname2 > 저장파일명.sql