2010. 10. 14.

[CentOS]call to undefined function mysql_connect

php 에서 mysqli extension을 잘 쓰고 있다가 mysql을 쓸 일이 생겨서 작업을 하다가

call to undefined function mysql_connect

이런 에러를 발견했다.

php와 mysql 사이의 연동이 안된거 같아서 검색해보니

# yum install php-mysql

이거 한방에 해결했다.

2010. 10. 13.

[PHP] how to install memcached on Windows XP

1. memcahced 를 Download 한다.


2. memcached 를  install 한다.

c:\memcached 에 압축을 풀고 command line(cmd)으로 간다.

c:\> cd c:\memcached
c:\> memcached.exe -d install
c:\> memcached.exe -d start
c:\> netstat -a
.
.
TCP     junp:11211     junp:0     LISTENING
.
.

3. php extension을 Download 한다. pecl-5.2.6-Win32.zip
압축풀면 php_memcache.dll 이 있으므로 extension_dir 에 복사를 하고
php.ini에 extension=php_memcache.dll 을 추가한다.


2010. 10. 12.

[PHP] 정규식으로 한글 영어 숫자 추출하기

$pattern = '/([\xEA-\xED][\x80-\xBF]{2}|[a-zA-Z0-9])+/';
$str = 'abc!@하나둘셋#123';
echo $str;
preg_match_all($pattern, $str, $match);
$str = implode('', $match[0]);
echo $str;
==================
abc!@하나둘셋#123
abc하나둘셋123

한글과 영어 숫자를 제외한 나머지문자는 무시하게 된다.




2010. 10. 11.

[CentOS] how to install mongodb in 64bit centos

1. 몽고디비 repository를 추가해준다.

# vi /etc/yum.repos.d/10gen-mongodb.repo

[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/x86_64/
gpgcheck=0

2. 몽고디비를 설치 및 conf 파일의 내용 확인

# yum install mongo-stable mongo-stable-server

# vi /etc/mongod.conf
logpath=/var/log/mongo
port=27017
dbpath=/var/lib/mongo

3. 몽고디비 데몬을 시작한다.

# chown -R mongod:mongod /var/lib/mongo/
# /etc/init.d/mongod start
# chkconfig --levels 235 mongod on

4. 방화벽을 열어준다.

# vi /etc/sysconfig/iptables (다음 한줄을 추가)

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT


[CentOS] how to install memcached in 64bit centos

CentOS 64 bit에서 memcached 설치하기~

1. Memcached에 필요한 비동기 이벤트통지 소프트웨어 라이브러리를 설치한다.

# wget http://monkey.org/~provos/libevent-1.3e.tar.gz

# tar zxpfv libevent*
# cd libevent*
# ./configure
# make install


2. Memcached를 설치한다.

# wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
# tar xzfv memcached-1.4.0.tar.gz
# cd memcached-1.4.0
# ./configure --with-libevent=/usr/lib64/
# make
# make install

3. Memcached를 실행한다. (CentOS 64비트에서 하면 다음과 같은 에러가 날 수 있다.)

# adduser memcached
# ./memcached -u memcached -d -m 48 -l 127.0.0.1 -p 11211
./memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
# ln -s /usr/local/lib/libevent-1.3.e.so.1 /lib64/
# ./memcached -u memcached -d -m 48 -l 127.0.0.1 -p 11211

4. memcached 를 실행하기 위한 스크립트를 생성하자.
   참고사이트를 보고 아래 파일을 만들었으므로 다운받아도 좋다.


다음과 같은 위치에 파일을 작성하자.

# vi /etc/memcached.conf
# chmod +x /etc/memcached.conf
# vi /etc/init.d/memcached
# chmod +x /etc/init.d/memcached
# vi /usr/local/bin/start-memcached
# chmod +x /usr/local/bin/start-memcached
# /etc/init.d/memcached restart
# /sbin/chkconfig memcached on
# /sbin/chkconfig --list | grep memcached





[CentOS] php에서 memcache 설치하기

# wget http://pecl.php.net/get/memcache-2.2.4.tgz
# tar xzfv memcache-2.2.4.tgz
# cd memcache-2.2.4
# phpize
# ./configure --enable-memcache
# make
# cp modules/*.* /usr/lib64/extensions/no-debug-non-zts-20060613/
# vi /usr/local/apache/conf/php.ini

extension=memcache.so

mongo 설치하는거때문에 신경 많이 쓰였는데 의외로 쉽게 설치가 되었군요.

[MySQL] lower_case_table_names 세팅하기

유닉스계열은 0, 윈도우 계열은 1, Mac OS 의 경우는 2(이건 확실치 않음)가 기본 값이라고 한다.

유닉스 계열에서 값을 변경하고 싶다면 다음과 같이 하면 된다.

# /etc/init.d/mysqld stop
# mysqld_safe --lower_case_table_names = 1 &


확인하기

mysql> show variables like '%lower%';

2010. 10. 8.

[CentOS] php version update 5.1 to 5.2

1. 현재 설치된 버전 확인
# rpm -qa |grep php
 php-common-5.1.6-15.el5.i386
 php-cli-5.1.6-15.el5.i386
 php-5.1.6-15.el5.i386
 php-pdo-5.1.6-15.el5.i386
 php-bcmath-5.1.6-15.el5.i386
 php-ldap-5.1.6-15.el5.i386
 php-devel-5.1.6-15.el5.i386
 php-gd-5.1.6-15.el5.i386
 php-xml-5.1.6-15.el5.i386
 php-mbstring-5.1.6-15.el5.i386
 php-mysql-5.1.6-15.el5.i386
 php-dba-5.1.6-15.el5.i386
2. update 하기 위해 파일 생성
# vi /etc/yum.repos.d/CentOS-Testing.repo
--------------------------------------------------------------------------
# CentOS-Testing:
# !!!! CAUTION !!!!
# This repository is a proving grounds for packages on their way to CentOSPlus and CentOS Extras.
# They may or may not replace core CentOS packages, and are not guaranteed to function properly.
# These packages build and install, but are waiting for feedback from testers as to
# functionality and stability. Packages in this repository will come and go during the
# development period, so it should not be left enabled or used on production systems without due
# consideration.
[c5-testing]
name=CentOS-5 Testing
baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
includepkgs=php*
--------------------------------------------------------------------------
3. 업데이트 하기
 # rpm -qa |grep php
 # yum update
 # service httpd restart


[CentOS] mysqli 설치

CentOS 64bit, php-5.2.5에서 mysqli를 설치해봤다.
apm 설치할때 보니까 mysqli가 빠져있길래 추가로 설치를 해봤다.
예전에는 애좀 먹었는데 간만에 하니까 술술 잘되는구나

# cd /usr/local/src/apm/php-5.2.5/ext/mysqli
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/mysql/bin/mysql_config
# make

# mkdir -p /usr/lib64/extension/no-debug-non-zts-20060613
# cp modules/*.* /usr/lib64/extension/no-debug-non-zts-20060613/
# vi /usr/local/apache/conf/php.ini

extension_dir = "/usr/lib64/extensions/no-debug-non-zts-20060613/"
.
.
.
extension=mysqli.so

# /etc/init.d/http restart


2010. 10. 3.

[MySQL]skip-name-resolve

MySQL 서버는 외부로 부터 접속 요청을 받을 경우 인증을 위해 IP 주소를 호스트네임으로 바꾸는 과정을 수행하여 접속시에 불필요한 부하가 발생하게 됩니다. skip-name-resolve를 설정하시고 접속시에 IP 기반으로 접속을 하게 되면 hostname lookup 과정을 생략하게 되어 좀 더 빠르게 접속을 하실 수 있습니다.

# vi /etc/my.cnf

[mysqld]
skip-external-locking
skip-host-cache
skip-locking
skip-name-resolve

이렇게 추가를 해주고 mysqld를 restart를 하면 된다.

[MySQL]Too Many Connection Error

show variables like '%timeout%';
show variables like '%connect%';
show variables like '%thread%';

show status like '%thread%';
show status like '%connect%';

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

show status like 'Threads_created';
show status like 'Connections';
Cache Miss Rate(%) =  Threads_created / Connections * 100

show status like 'Aborted_connects';
show status like 'Connections';
Connection Miss Rate(%) = Aborted_connects / Connections * 100

show status like 'Threads_connected';
show variables like 'max_connections';
Connection Usage(%) = Threads_connected / max_connections * 100

show status like 'Max_used_connections';

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

Connection Usage가 100%면 max_connections 수를 증가시켜야 한다.
Connection Miss Rate 가 1%이상이면 wait_timeout을 더 길게 설정해야한다.
Cache Miss Rate가 높다면 thread_cache_size를 더 높게 잡아야 한다.

Max_used_connections 에서는 그 동안 사용되었던 최대 커넥션 수를 보여준다.

나의 경우는 Cache Miss Rate가 100%에 가깝게 나왔다.
그건 thread_cache_size가 0이기 때문에 매번 쓰레드를 생성해서이다.
일반적으로 Peak-time의 threads_connected보다 약간 낮은 수치로 설정하는 것이 좋습니다.

SET GLOBAL thread_cache_size = 40;

이렇게 값을 세팅해주었고, Cache Miss Rate 가 줄어들길 기다려야겠다.