이 문제로 많은 고민을 했었는데

MySQL은 SQL Server나 Oracle과 다르게 SP가 처음 한번만 컴파일 되고 재사용 되는것이 아니다.


http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/

위 링크를 참고하면 커넥션 별로 컴파일이 관리되는데 말인데

즉 어플단에서 쿼리로 실행하나 SP로 실행시키나 컴파일하고 실행하는 과정에서 성능상 이득을 취하긴 어렵다는것!


물론 SP를 사용함으로서 프로그램과 데이터 조작과의 관계를 분리 할 수 있고(추후 SQL 튜닝 및 스키마 수정에 유리)

SP실행 권한만 줌으로서 인젝션과 같은 공격에서 상대적으로 안전하며

짧은 요청 문장으로 인한 트래픽 감소

트리거를 사용하지 않고도 데이터의 참조 무결성 유지

http://ko.wikipedia.org/wiki/%EC%A0%80%EC%9E%A5_%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80


등의 장점은 여전히 남아 있다.



그러면 컴파일 된 프로시저를 그냥 아깝게 버리느냐... 하면

mysql-proxy나 sqlrelay 등을 사용해서 Connection Pool을 구축한다면 커넥션을 한번만 맺고 재사용하기에 극복 할 수 있으니

MySQL을 사용하면 SP는 사용하면 안된다 하지 말고 커넥션 풀을 구축해서 사용하면 커넥션 비용도 감소하고 SP 컴파일도 재사용 가능하니 일석이조의 효과가!!


http://sqlrelay.sourceforge.net/

http://dev.mysql.com/downloads/mysql-proxy/

Posted by Mr.Jo :

MySQL에서 복제시 binlog_format 에 따라 동기화가 되지 않을 수 도 있다.

5.1 버전대에 추가된 기능으로 기존에는 Statement로 동작한다.



binlog_format 는 설정 파일 혹은 글로벌 변수로 변경 가능하고 값은

Statement, Row, MIXED 세가지가 들어갈 수 있는데



Statement 는 마스터에 들어온 쿼리를 쿼리문으로 기록하기 때문에


- 쿼리는 짧고 데이터 변경은 많은 종류가 많이 실행될 때 유리할 수 있으며

- 일반적으로 로그 양이 작고(master - slave간 회선이 느릴때 유리)

- 나중에 열어봤을때 알아보기가 상대적으로 쉽다 (일부 쿼리만 사용 가능)

- 버젼이 서로 달라도 사용 가능


-*항상 일관된 값이 나오지 않는 함수의 실행을 보장 할 수 없다. ( NOW()는 정상 작동하지만 SYSDATE()는 동기화 되지않을 수 있다.)

- 상대적으로 느리다(보통 쿼리의 실행이 데이터 변경보다 크기 때문에)



ROW는 변경된 데이터를 기록하는 방식으로

Statement 와 장단점이 반대라 볼 수 있으며 SYSDATE() 의 경우도 일관되게 복제된다.



MIXED는 서로의 장점을 취하는 방법으로

기본적으로는 Statement 필요에 따라 ROW로 기록하는 방식



운영 중간에 설정을 바꿀 수 있으나

임시테이블 사용중, 트리거나 프로시저에서 변경 시도, NDB가 활성화 되어 있을때는

변경이 불가하다.



잘 모르겠으면 MIXED나 ROW로 설정하는 편이 동기화 오류로 고생하는 일이 없을것 같다.






master와 slave의 연결을 끊었다 이었다 하는 식으로 데이터 동기화를 지연 시키면서

now() 함수와 sysdate() 함수로 데이터를 넣을 때 결과다


왼쪽 master 오른쪽 slave

1 = MIXED,        now()

2 = MIXED,        sysdate()

3 = MIXED,        sysdate()

4 = Statement ,  sysdate()

5 = Statement ,  now()

6 = ROW,          now()

7 = ROW,          sysdate()




http://www.mysqlkorea.com/sub.html?mcode=develop&scode=51ha&m_no=22902&cat1=1106&cat2=1287&cat3=1377&lang=k


Posted by Mr.Jo :

sources.list 에 내용을 추가하고 apt-get update시

다음과 같이 GPG error 메시지를 내고 저장소 추가가 되지 않을 경우


W: GPG error: http://www.deb-multimedia.org jessie InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 07DC563D1F41B907


빨간 부분에 주목하여

gpg --keyserver pgpkeys.mit.edu --recv-key 07DC563D1F41B907

gpg -a --export 07DC563D1F41B907 | sudo apt-key add -


위와 같은 명령으로 해결 할 수 있다

Posted by Mr.Jo :

Permalink를 설정하기 위해서는 rewrite를 설정해야 하는데

apache2에서 rewrite는 이전 글에서와 같이 모듈 하나를 추가해 주면 되지만 nginx에서 사용하기 위해서는 다음과 같이 한줄을 추가 하면 된다

location / {

                try_files $uri $uri/ /wordpress/index.php?$args;

        }



Posted by Mr.Jo :

분명 우분투에서는 정상 작동 했던것 같은데 Debian Jessie에서 셋팅했더니 phpinfo(); 정보 조차 나오지 않아 한참 헤맸다.


증상은 html은 정상 동작하나 php파일들은 어떠한 에러 로그도 없이 빈 페이지 (소스코드 보기를 해도 아무것도 없는 페이지)만 리턴했다.


구글링 결과 해결 방법은 간단.


/etc/nginx/fastcgi_params

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;


fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

or


/etc/nginx/sites-available/default

location ~ \.php$ {

                fastcgi_split_path_info ^(.+\.php)(/.+)$;

                fastcgi_pass unix:/var/run/php5-fpm.sock;

                fastcgi_index index.php;

                include fastcgi_params;

                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        }


밑줄친 빨간색 부분이 debian jessie 버젼의 fastcgi_param파일 부분에서 빠진듯 하다.

Posted by Mr.Jo :

/etc/localtime 이라는 파일이 어디 기준 시각을 표시할지에 대한 정보를 갖고 있는데

다른 유틸을 써서 변경하여도 좋지만 불가피 할 경우를 가정하여 정리해 놓는다


/usr/share/zoneinfo 에 보면 지역명으로 된 폴더가 있고 그 아래 도시명으로 된 파일들이 있는데

이녀석으로 변경해 주면 된다.


만약의 경우를 대비해 기존 파일을 이름변경으로 백업해 두고

# mv /etc/localtime /etc/localtime.bak


관리상 편하게 심볼릭 링크를 걸어주자

# ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime


date명령을 처보면 한국 시각으로 확인될 것이다.

Posted by Mr.Jo :

한참 잘 쓰고 있데 upgrade시 에러가 발생해서 진행이 안되서 찾아보니 구글에서 다음과 같은 방법이 있길래 한글로 된문서가 없어 공유한다.

Setting up plymouth (0.9.0-7) ...

dpkg: error processing package plymouth (--configure):

 subprocess installed post-installation script returned error exit status 1

Errors were encountered while processing:

 plymouth

E: Sub-process /usr/bin/dpkg returned an error code (1)


설치전 스크립트에서 발생한 에러여서 다음 부분을 다음과 같이 수정하면 정상처리 됨

# Automatically added by dh_installinit

if [ -x "/etc/init.d/plymouth" ]; then

        update-rc.d plymouth start 41 2 3 4 5 . stop 41 0 6 . >/dev/null || exit $?

fi

# End automatically added section

# Automatically added by dh_installinit

if [ -x "/etc/init.d/plymouth-log" ]; then

        update-rc.d plymouth-log start 40 S . >/dev/null || exit $?

fi


원래 어떻게 사용하는건지 모르겠어서 고칠 엄두가 안났는데 방법이 있어서 다행이다.

Posted by Mr.Jo :

업데이트시 다음과 같은 오류를 발생시키면서 업데이트가 안되길래 

Setting up udev (215-5+b1) ...

dpkg: error processing package udev (--configure):

 subprocess installed post-installation script returned error exit status 1

Errors were encountered while processing:

 udev

E: Sub-process /usr/bin/dpkg returned an error code (1)



/var/lib/dpkg/info/udev.postinst 파일을 찾아보니 밑줄친 부분에서 에러가 발생해서 확인했더니 그룹이 이미 추가되어 있어서 주석처리 했더니 정상 동작

case "$1" in

    configure)

    # update/create hwdb before we (re)start udev

    update_hwdb

    

    # Add new system group used by udev rules

    #addgroup --quiet --system input


    if [ -z "$2" ]; then # first install

      if ! chrooted && ! in_debootstrap; then

        write_interfaces_rules

        enable_udev



버그가 있는경우가 종종 있지만 이렇게 사용자 수정에 의해 복구되는점이 매력인듯

Posted by Mr.Jo :

apt-get으로 upgrade시 설치 스크립트중 오류가 발생하는 경우가 있다

apt-get -f install 을 실행해서 없어진다면 다행이지만

너무나도 꼬여버려서 이마져도 안되는 경우가 발생하는데 이럴때 apt-get dist-upgrade를 사용하라고 하지만


진짜 심한 경우에는 부팅조차 안되는 상황이 되어버린다



이럴때 수동으로 패키지를 설치하는 방법이 있는데 오류가 난 (Errors were encountered while processing:) [패키지명]에 관련된 패키기를 수동으로 설치하는데


1.

apt-get download [패키지명] 으로 패키지를 다운로드 한 후

dpkg -i [다운로드된 파일명] 으로 설치를 시도한다.


2.

아마 연관된 패키지가 없다고 설치 못한다고 할 땐 1번으로 돌아가 연관된 패키지를 설치해준다.


위 방법을 반복하다 보면 언젠가 설치가 되긴하는데 -_-; 만약 다운로드조차 받을 수 없다면 source.list를 다른 저장소로 수정하거나 https://packages.debian.org 에서 뒤져서 wget으로 다운로드 하는 방법도 있으니 참고!

Posted by Mr.Jo :

워드 프레스를 가지고 이것 저것 해보고 있는데 WP SUPER CACHE를 적용하려 하니 Permalink를 설정해야 한다고 메시지가 나오길래 적용했더니 모든 링크에 404에러가 발생했다.


상황을 보아하니 가상의 경로를 접근하려 하니 에러가 발생하는것 같고

이 가상의 경로를 매핑 시켜줘야 하는 무언가가 필요한 것 같아 구글링 해보니 mod_rewrite.so가 적용 되야 한다는 정보를 얻었다.


php 정보를 보는 <?php phpinfo(); ?>로 페이지를 생성해 보아도 모듈을 로딩 되어 있지 않고

php.ini에 extension=mod_rewrite.so해도 모듈은 로딩 되지 안았다.


해결 방법은 apache2의 셋팅에 추가해야 하는데 구글링 결과 옛 버젼이여서 httpd.conf에 LoadModule rewrite_module modules/mod_rewrite.so 를 추가 해야 한다는 말 뿐...


httpd.conf는 내 서버에 없었고 apache.conf로 변경되었다는 말을 들어 추가해 보아도 서버가 안올라올뿐...



결론을 말하면 /etc/apache2/mods-enabled 에 /etc/apache2/mods-available/rewrite.load 에 해당하는 심볼릭 링크를 생성해 주면 끝!

# cd /etc/apache2/mods-enabled

# ln -s /etc/apache2/mods-available/rewrite.load




여기에 apache.conf에 자신이 올린 웹페이지 경로를 찾아 AllowOverride None 이라 되어 있다면 AllowOverride All 로 변경하면 아마 정상 작동 할 것이다.



Posted by Mr.Jo :