PHP 연동 mysqlnd 설치 하기

Standard

php 를 compile 하다보면 mysqlnd 도 사용할 때가 있다.

mysqli 같은 경우 모듈 형으로 따로 설치하여 사용이 가능 하지만 mysqlnd 는 pdo_mysql, mysql, mysqli 와 연동을 시켜 사용을 할 수가있기 때문에 mysqlnd 는 확장 모듈 설치(standalone)는 불가능 하다.

바보 같이 ext 폴더에서 mysqlnd 모듈 설치한다고 config9.m4 를 config.m4로 변경하여 설치하면 openssl <evp.h> 에러를 맞게 될것이다 설치가 안된다.

몇가지 주의 사항이 있다.
1. 이미 설치된 php라면 재컴파일을 해야 한다.
2. mysqlclient 라이브러리를 사용 하기때문에 mysql 설치시 libray를 설치해줘야한다.
3. rpm 설치를 하였다면 Mysql-shared-compat rpm을 설치 해주면 상황 종료

mysqlnd 를 compile 하는 php 옵션은 다음과 같다.

사용버전 PHP 5.5.16

–enable-mysqlnd \
–with-pdo-mysql=mysqlnd \
–with-mysql=mysqlnd \
–with-mysqli=mysqlnd \
–with-mysql-sock=/var/lib/mysql/mysql.sock

mysqlnd 를 사용 할때 pdo, mysql, mysqli 를 연동을 시켜 주려고 할때 사용한다.
컴파일 후 아파치 재시작하면 phpinfo 에서 해당 모듈들이 올라온걸 확인 할 수 있다.

여담으로 openssl 모듈을 설치시 오류가 발생 했을때 pkg-config 오류와 openSSL <evp.h> 오류가 발생이되면 yum install -y openssl-devel을 해주면 된다.

 

php libclient 오류

Standard

CentOS 기준 64bit에서 mysql 설치시 64비트로 설치되면 라이브러리가 /usr/lib64로 공유 된다.

기존 php5.3.3 버전 기준으로는 mysql, mysqli 모듈 설치시에는 /usr/lib 을 참조하므로 libclient를 링크 시켜주면 사용이 가능하다.

ln -s /usr/lib64/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16

RPM package 관리자 응답 없음

Standard

가끔 Linux 시스템을 사용시에 rpm 리스트를 보거나 설치가 안될때, 혹은 응답이 없을 경우가 있다.


이럴땐 DB를 초기화 시켜야 하는 부분이 있다.



# rm -rf /var/lib/rpm/__db.00*
# rpm –initdb


Remove Old Lock Files running this command:
# rm -f /var/lib/rpm/__db*


Now you have to rebuild RPM database:
# rpm -vv –rebuilddb


rpm -qaV


 


rpm db를 다시 build 를할때 env4 에러가 떨어지긴 하는데 무시해도 될거같긴 하다.

net-snmp 설치 에러 및 cannot open 에러 발생 시 해결책

Standard

정말 구글링 해도 찾기가 힘들어서야 나참..

snmp 설치법은 여기에 상세히 잘나와 있다.
http://cafe.naver.com/devctrl.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=317& 

snmp libray 를 사용하는 프로그램에서 자주 발생하는 에러인  
======================================================================================================================
libnetsnmp.so.15 cannot open shared object file no such file or directory
======================================================================================================================
이에러.. snmp를 정상적으로 설치를 했고, /usr/local/lib 에 파일이 있는데도 안될때는

ldconfig 명령어로 libray 를 적용 시키는 것이다. 그럼 에러해결 끝.

[#M_더보기|접기|

그래도 안돼면.
vi /etc/ld.so.conf 로 열어서

/usr/local/lib 를 추가해보자.

_M#]

꼼수로 libnetsnmp 파일들을 /usr/local/lib 에 복사했을때 적용 시킬때도 사용가능 한것 같다..
저거는 꼼수 같고..

.bash_profile 에 
# export LD_LIBRARY_PATH=/usr/local/lib 을 넣어주거나 콘솔에서 그냥 뿌려준다.

수정후 
source ~/.bash_profile 끝~! 

http://kldp.org/node/113497 
http://kldp.org/node/45539 
http://www.mail-archive.com/net-snmp-users@lists.sourceforge.net/msg16168.html  

linux bonding(본딩)

Standard

눅스 bonding 은 윈도우의 티밍, AIX의 Etherchannel 과 같습니다.

아래의 설명은 제가 직접 필드에서 해봤으며, 검증된 자료입니다.

참고로  Active – Standby 방식입니다.

그외 다른 방식을 mode 값만 바꾸어 주면 됩니다.

 

0. 설정 방법
root로 로그인해서 아래 내용을 그대로 실행하시면 됩니다.
“#” 라인에 있는것이 실행명령이이며
그 아래 내용대로 내용전부를 고치거나 추가 하시면 됩니다.
 
1. bonding Device 생성(전체 내용을 아래와 같이 수정해 주십시요 또는 없다면 아래내용을 IP등에
내용을 알맞은 내용으로 수정 후 적어주시면 됩니다.)
 
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
 
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=x.x.x.x
NETMASK=x.x.x.x
GATEWAY=x.x.x.x
USERCTL=no
 
2. eth0를 bond0에 연결(전체 내용을 아래와 같이 수정해 주십시요.)
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
 
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
 
3. eth1를 bond0에 연결(전체 내용을 아래와 같이 수정해 주십시요.)
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
 
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
 
4. modprobe.conf에 bond0등록(아래 내용을 추가해 주십시요.)
# vi /etc/modprobe.conf
 
alias bond0 bonding
options
bonding miimon=100 mode=1 primary=eth0   //현재 failover로 설정한상태(제가 테스트한결과
failover로 설정한부분에 primary를 설정하지 않으면 failback이 이루어지지 않습니다. 참고하세요)

[기본 bonding설정 – 본딩디바이스 1개일때]

          본딩 모드에 대한 부분은 맨페이지 확인하여 적용하시면 됩니다.

1.         /etc/modprobe.conf 설정

alias bond0 bonding

 

2.         /etc/sysconfig/network-scripts/ifcfg-bondX 설정 (bonding Master Device Set up)

DEVICE=bondX
IPADDR= 해당 IP
NETMASK= 해당 Netmask
GATEWAY= 해당 Gateway
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

3.         /etc/sysconfig/network-scripts/ifcfg-ethX 설정 (bonding Slave Device Set up)

DEVICE=ethX
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

위와 같이 설정 후 현재 상태의 네트워크 환경 확인,

4.         lsmod를 이용하여 bonding모듈설정 확인

5.         /etc/init.d/network stop

6.         modprobe -r bonding

7.         /etc/init.d/network start

8.         cat /proc/net/bonding/bondX 명령을 이용하여 현재 설정된 본딩 적용내용 확인 (설정 내용을 정확히 확인 바랍니다.)

 

[bonding설정 – 본딩디바이스 2개 이상일때]

1.         /etc/modprobe.conf 설정

alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2

2.         /etc/sysconfig/network-scritps/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
IPADDR= 해당 IP
NETMASK= 해당 Netmask
ONBOOT=yes
TYPE=Ethernet
BONDING_OPTS=”mode=1 miimon=100 use_carrier=0 primary=ethX”

3.         /etc/sysconfig/network-scritps/ifcfg-bond1

DEVICE=bond1
BOOTPROTO=none
IPADDR= 해당 IP
NETMASK= 해당 Netmask
ONBOOT=yes
TYPE=Ethernet
BONDING_OPTS=”mode=1 miimon=100 use_carrier=0 primary=ethX”

4.         Bonding device route설정

보통 route add로 routing table를 올리게되면 부팅 후 network restart시
routing table가 지워짐니다. 이 부분을 아래와 같이 변경하여 적용 하시면
한결 편하실 것 입니다.

예>bond1에 route table추가
/etc/sysconfig/network-scripts/route-bond1
ADDRESS0=10.51.11.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.153.20
ADDRESS1=192.168.200.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.153.12

또는 route명령을 이용한 route설정

route add -net 172.20.160.0 gw 172.20.161.1 netmask 255.255.255.0 dev bond0
route add -net 172.20.164.0 gw 172.20.161.1 netmask 255.255.255.0 dev bond1

           위와 같은 방법을 이용하여 route 설정을 합니다.

 

5.         lsmod를 이용하여 bonding모듈설정 확인

6.         /etc/init.d/network stop

7.         Modprobe -r bonding

8.         /etc/init.d/network start

9.         cat /proc/net/bonding/bondX 명령을 이용하여 현재 설정된 본딩 적용내용 확인 (설정 내용을 정확히 확인 바랍니다.)

 

 
5. bond0 사용(실행만 시켜주시면 됩니다.)
# /etc/rc.d/init.d/network restart
 
# /etc/rc.d/init.d/network restart
 
6. ifconfig를 이용한 확인(실행만 시켜주시면 됩니다.)
 
# ifconfig

출처 : http://xrodie.blog.me/10043856773

Mysql 5.5.x 버젼 새로운 기능

Standard
  


MySQL 5.5의 새로워진
것들

프로그램명 : MySQL 5.5.X
운영체제 : Linux, Unix,
Windows 등
홈페이지 : www.mysql.com
라이센스 : 상업용, GPL
출처 : 리눅스 포털 ( www.linux.co.kr )


   최근
MySQL 5.5 버젼이 정식 릴리즈 되었고, 지금 내가 조사하고 있는 버전은 5.5.14이다. mysql의 ab사가 sun사에 인수되고, 다시
sun사가 Oracle 사에 인수되었다.
그럼 이 mysql도 Oracle만큼 강해질까? 5.5 리뷰를 하면서 느낀 것은 기능이 막강해
지면서 무거워 졌다는 느낌을 받았고, mysql의 버전이 업되면서 하위 호환을 위해
남겨두었던 설정변수들을 많이 정리하는 듯했다. 특히
mysql 설치 방식을 cmake를 도입했고, 설치 후에는 기존과 다르게 라이브러리 디렉토리, my.cnf 예제
파일,
mysql_install_db 파일등의 경로가 바뀌었다.  어떤 기능들이 추가 되고 개선되었는지, mysql 공식 홈페이지에서 
발표한 내용을 한글로 편역해 보도록 하겠다.

1. 멀티코어
CPU에 대한 확장성이 향상되었다.

     CPU 속도(클럭)을 높이는데는 물리적인 한계가 있다. 그래서 요즘 CPU는
Core를 늘려 성능을 향상시킨다.
   mysql 5.5는 멀티코어 cpu를 잘~ 활용할 수 있게 향상되었다고 한다.
   이는
InnoDB의 locking 과 메모리 관리에 변화를 준것이다.

   – InnoDB에서는 확장성이 적은 mutexe를 사용하기
보다는 원자적인 CPU 명령을 사용한  RW-lock 사용하여 성능을 향상시켰다.
   – 메모리 관리 부분은 일반적인 malloc
라이브러리 보다 향상된 tcmalloc(리눅스), mtalloc(솔라리스)를 사용했다.

2. InnoDB I/O 서브시스템이 바뀌었다.
   InnoDB I/O
서브시스템이 사용가능한 I/O 용량을 효율적으로 사용할 수 있게 바뀌었다.
   –  Background I/O Thread
향상
    1개의 Thread가 read, write 를 담당했으나, 이제 read와 write에 다중 쓰레드를 할당할 수
있다.
       innodb_read_io_threads : 읽기 쓰레드 갯수 기본 4개
      
innodb_write_io_threads : 쓰기 쓰레드 갯수 기본 4개

    – I/O Rate를 조정할수
있다.
      예전 버전은 기본적으로 IOPS(the number of Input/Output operations Per
Second)가 100이였지만,
     지금은 기본이 200이며 이 값을 다음 변수로 제어할 수 있다.
      
innodb_io_capacity : IOPS 값 (기본 200,  Disk가 7200RPM 이하라면 100으로 설정하는 것이
좋다.)

3. 진단과 모니터링 기능이
좋아졌다.

   – Performance Schema
      MySQL 서버 실행상태를 low 레벨에서 확인 할 수
있다.
      MySQL 데이터 디렉토리를 보면  performance_schema DB가 기본적으로 설치된다. 이 테이블을 이용한다고
하며 자세한 것은 mysql 메뉴얼을 참고하기 바란다.

   – DTrace 지원
      이는 Solaris, Mac
OS X, FreeBSD 에서 사용되는 것이라니 skip 한다.

   – SHOW ENGINE INNODB STATUS 의 결과가
더 자세해 졌다.

   – Debug Sync : 디버그를 위한 동기화 포인트를제공한다.
  
   – 새로운 상태
변수 제공
      Innodb_have_atomic_builtins : innodb의 사용가능한 atomic instruction의
상태를 보여준다.(On/Off)

4. Solaris 에서 
MySQL Server를 운영함에 있어 여러 명령어가 변경 및 향상되었다.

    난 Solaris를 거의 사용하지 않기에
skip

5. 기본 storage engine 가 MyISAM
에서 InnoDB
바뀌었다.

6. Semisynchronous
Replication 지원

   –  MySQL의 Replication은 기본적으로 비동기식이지만, Semi비동기식
리플리케이션을 제공한다.
      Semi비동기식이란 Master의 blocks을  Slave의 응답을 받은 후 처리한다.
  
– 기본은 아니고 PLUGIN으로 설치해야 한다.
      INSTALL PLUGIN rpl_semi_sync_master SONAME
‘semisync_master.so’;
      INSTALL PLUGIN rpl_semi_sync_slave SONAME
‘semisync_slave.so’;

7. 새로운 유니코드 언어셋을
지원한다.

   utf16, utf32, utf8mb4

8. 테이블 파티셔닝의 향상
   – 2가지의 새로운 사용자 정의 테이블
파티셔닝을 제공한다.
     RANGE COLUMNS 파티셔닝 ,  LIST COLUMNS 파티셔닝을 제공한다.
     예)
RANGE COLUMNS 파티셔닝
         PARTITION BY RANGE (store_id) (
           
PARTITION p0 VALUES LESS THAN (6),
            PARTITION p1 VALUES LESS THAN
(11)
         );
 

     예) LIST COLUMNS 파티셔닝
        PARTITION
BY LIST(store_id) (
            PARTITION pNorth VALUES IN
(3,5,6,9,17),
            PARTITION pEast VALUES IN
(1,2,10,11,19,20)
        );

 

9. 표준 SQL의 SIGNAL과 RESIGNAL 구문 제공
   오류 핸들링을
위해 제공한다.

10. LOAD XML INFILE 구문이
추가 되었다.

11.
MySQL인증방식에서 pluggable authentication 과 proxy user 인증이 추가 되었다.

   
pluggable 인증으로  LDAP, Kerberos, PAM, or Windows login ID 등을 사용할 수
있다.

12. 소스 설치 하는 방법이
바뀌었다.

    GNU autotools 대신 CMake를 사용한다. 설치법은 다음과 같다. ( cmake는 미리 설치해야 한다)

        cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
\

       
-DDEFAULT_CHARSET=utf8 \

        -DDEFAULT_COLLATION=utf8_general_ci
\

       
-DENABLED_LOCAL_INFILE=1 \

        -DWITH_SSL=system \
       
-DMYSQL_DATADIR=/usr/local/mysql/data \

       
-DWITH_READLINE=ON


        make -j
4

       
make install

    * CMake 를 사용하면 아래와 같이 컴파일 과정에 진행률과 보기좋게 컬러로
나온다.
    

13. 제거된
내용들

    1) language 시스템 변수 제거 (lc_messages_dir와 lc_messages를
사용)
    2) log_bin_trust_routine_creators 시스템 변수 제거 
(log_bin_trust_function_creators 사용)
    3) myisam_max_extra_sort_file_size
시스템 변수 제거
    3) record_buffer 시스템 변수 제거 (read_buffer_size 사용).
    4)
sql_log_update 시스템 변수 제거.
    5) Innodb_buffer_pool_read_ahead_rnd와
Innodb_buffer_pool_read_ahead_seq 상태 변수 제거
        
(Innodb_buffer_pool_read_ahead와 Innodb_buffer_pool_read_ahead_evicted
사용).
    6) table_type 시스템 변수 제거(storage_engine 사용).
    7) TIMESTAMPADD()
함수를 위한 FRAC_SECOND 수정자 제거 (MICROSECOND 사용)
    8) CREATE TABLE 이나  ALTER
TABLE시  TYPE 테이블 옵션 제거( ENGINE 사용).
    9) SHOW TABLE TYPES 구문 제거 (SHOW
ENGINES 사용).
    10) SHOW INNODB STATUS 와 SHOW MUTEX STATUS 구문 제거 ( SHOW
ENGINE INNODB STATUS,  SHOW ENGINE INNODB MUTEX 사용).
    11) SHOW PLUGIN 구문
제거  (SHOW PLUGINS 사용).
    12) LOAD TABLE … FROM MASTER 와 LOAD DATA FROM
MASTER 구문 제거 (mysqldump, mysqlhotcopy사용하여 덤프 및 mysql을 사용하여 reload ).
    13)
BACKUP TABLE 와 RESTORE TABLE 구문 제거 (mysqldump, mysqlhotcopy사용하여 덤프 및 mysql을 사용하여
reload ).
    14) TIMESTAMP(N) 데이터 타입 제거 ( N 없이 사용 하라)
    15)
–default-character-set 과 –default-collation 서버 옵션 제거 (–character-set-server 과
–collation-server 사용).
    16) –default-table-type 서버 옵션 제거
(–default-storage-engine 사용).
    17) –delay-key-write-for-all-tables 서버 옵션
제거 (–delay-key-write=ALL 사용).
    18) –enable-locking과 –skip-locking 서버 옵션
제거 (–external-locking과 –skip-external-locking 사용).
    19)
–log-bin-trust-routine-creators 서버 옵션 제거 (–log-bin-trust-function-creators
사용).
    20) –log-long-format 서버 옵션 제거
    21) –log-update 서버 옵션
제거
    22) –master-xxx 서버 옵션 제거 (CHANGE MASTER TO 구문 사용):
        
–master-host, –master-user, –master-password, –master-port,
–master-connect-retry,
         –master-ssl, –master-ssl-ca,
–master-ssl-capath, –master-ssl-cert, –master-ssl-cipher,
–master-ssl-key.
    23) –safe-show-database 서버 옵션 제거
    24)
–skip-symlink와 –use-symbolic-links 서버 옵션 제거 (–skip-symbolic-links와 
–symbolic-links 사용).
    25) –sql-bin-update-same 서버 옵션 제거
    26)
–warnings 서버옵션 제거 (–log-warnings 사용).
    27) mysql명령어의 –no-named-commands
옵션 제거 (–skip-named-commands 사용).
    28) mysql명령어의 –no-pager 옵션
제거(–skip-pager 사용).
    29) mysql명령어의 –no-tee 옵션 제거 (–skip-tee 사용).
   
28) mysqlbinlog명령어의 –position 옵션 제거 (–start-position 사용).
    29) mysqldump명령어의 –all 옵션 제거 (–create-options
사용)
    30) mysqldump명령어의 –first-slave 옵션 제거(–lock-all-tables 사용).
   
31) mysqld_multi명령어의 –config-file 옵션 제거(–defaults-extra-file 사용).
    32)
–set-variable=var_name=value과 -O var_name=value과 같이 일번적인 목적의 프로그램 변수 설정은 제거
(–var_name=value 사용).
    33) configure를 위한 –with-pstack 옵션 제거, mysqld를 위한
–enable-pstack 옵션 제거

14. 기타 소스
설치 후 달라 진 내용들 ( doly가 추가함 )

    1)
mysql_install_db
프로그램의 경로가 변경되었다.
        /usr/local/mysql/scripts 로 바뀌었다.

    2)
my.cnf 셈플 및 mysql.server 스크립트의 경로가 변경되었다.
        /usr/local/mysql/support-files

    3) 헤더
파일 및 라이브러리 디렉토리가 변경되었다.
       
/usr/local/mysql/lib

        /usr/local/mysql/include

    4)
PHP 연동시 라이브러리 위치 때문에 libmysqlclient.so.18 파일을 찾을 수 없다고 한다.
        ln -s /usr/local/mysql/lib/libmysqlclient.so.18
/usr/lib
이렇게 링크를 걸어 주면 끝난다.

참고자료 :
http://dev.mysql.com/doc/refman/5.5/en/mysql-nutshell.html