2010. 8. 29.

[MySQL] Slave_Sql_Running = No

Master-Slave Replication 환경에서 Master에만 있는 테이블을 변경한다던가, Slave에서 테이블을 DROP하는 작업을 하는 경우 Slave의 Replication이 중단된다.

 

이 경우 SHOW SLAVE STATUS\G 명령어를 수행하면

 

Slave_Sql_Running = No

 

라는 부분을 발견한다. 이런 경우 error를 유발한 쿼리를 skip 해줘야 한다.

 

mysql> SLAVE STOP;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> SLAVE START;


SQL_SLAVE_SKIP_COUNTER : Slave를 작동한 후 Master로부터 읽어온 쿼리 중 skip할 쿼리 수

 

 

[MySQL] Master-Slave Replication

가. Master 서버 설정

 

1. Slave 서버에서 접근할 수 있도록 권한을 준다.

 

mysql> GRANT REPLICATION SLAVE ON *.* TO 'ID'@'IP' IDENTIFIED BY 'PASSWORD';


ID : Master MySQL의 user id로 Slave의 MySQL에서 접근함

IP : Slave 서버의 IP

PASSWORD : Slave의 MySQL에서 쓰는 id의 password

 

2. Master 역할을 할 수 있는 권한 부여

 

# vi /etc/my.cnf

[mysqld]
server-id = 1
binlog-do-db = 'DB_NAME'
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
log-bin = mysql-bin


server-id : 동기화 구성에 참여한 각각의 MySQL들을 구분짓기 위한 UNIQUE ID로서 중복되면 안된다.

binlog-do-db : 실제 동기화 하려는 대상 DB의 이름. DB마다 한 라인씩 추가하면 된다.

binlog-ignore-db : 동기화 하지 않을 DB의 이름. DB마다 한 라인씩 추가하면 된다.

log-bin : 아마도 mysql의 log file 이름.

 

나. Slave 서버 설정

 

1. Slave 역할을 할 수 있는 권한 부여

 

# vi /etc/my.cnf

[mysqld]
server-id = 2
master-host = 'Master IP'
master-user = 'ID'
master-password = 'PASSWORD'
master-port = 3306
log-bin = mysql-bin

 

server-id : Master에서의 역할과 동일하게 UNIQUE ID

master-host : Master 서버의 IP

master-user : Master 서버의 MySQL에 생성했던 Replication 계정 ID

master-password : Replication 계정 ID의 비밀번호

master-port : Master 서버의 MySQL 원격 접속 포트번호 (기본: 3306)

log-bin : Master에서의 역할과 동일하게 아마도 log file 이름

 

다. 동기화 작동

 

1. Master 서버 재시작 후 MySQL에 접속

 

2. Master 서버 동작 확인

 

mysql> SHOW MASTER STATUS\G
********************** 1. row **********************
                   File : mysql-bin.000003
             Position : 98
     Binlog_Do_DB : test
Binlog_Ignore_DB : mysql, information_schema
1 row in set (0.00 sec)
mysql>

 

3. Slave 서버 재시작 후 MySQL에 접속

 

4. Slave 서버 동작 확인

 

 

mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
********************** 1. row **********************
           Slave_IO_State : Waiting for master to send event (정상)
              Master_Host : IP
              Master_User : ID
               Master_Port : 3306
        Connection_Retry : 60
         Master_Log_File : mysql-bin.000003
Read_Master_Log_Pos : 98
.
.
       Slave_IO_Running : Yes (정상)
    Slave_SQL_Running : Yes (정상)
.
.
1 row in set (0.00 sec)
mysql>

 

Read_Master_Log_Pos : MASTER STATUS의 Position과 동일하다.

 

Slave_IO_State, Slave_IO_Running, Slave_SQL_Running 의 상태가 위와 같다면 정상

 

 

 

2010. 8. 26.

[CentOS] apache tomcat mod_jk 이용해서 연동하기

tomcat의 기본 포트는 8080이다.
apache와 tomcat을 mod_jk로 연동하면 포트번호를 입력하지 않고 접근이 가능하다.

아파치 버전 : httpd-2.2.4
탐캣 버전 : apache-tomcat-6.0.29

----------

1. 탐캣 커넥터 다운받기

tomcat-connectors-1.2.30-src.tar.gz 를 다운받는다.

다운받기

2. 설치하기

# cd /var/tmp   => 다운 받은 파일 있는 디렉토리
# chmod 755 tomcat-connectors-1.2.30-src.tar.gz
# tar xvfz tomcat-connectors-1.2.30-src.tar.gz
# cd /var/tmp/tomcat-connectors-1.2.30-src/native

# ./buildconf.sh
# ./configure --with-apxs=/usr/local/apache2/bin/apxs
# make
# make install

설치가 잘 된거라면 /usr/local/apache2/modules/mod_jk.so 파일이 생성된다.
mod_jk.so 가 /usr/local/apache2/modules 디렉토리 안에 있고, 권한은 755로 설정되어있는지 확인한다.

3-1. apache2/conf/httpd.conf 설정하기

# vi /usr/local/apache2/conf/httpd.conf

LoadModule이 있는 라인으로 가서 다음 한줄을 추가한다.

LoadModule jk_module modules/mod_jk.so

<IfModule @#$@#$> </IfModule>의 제일 마지막에 다음을 추가한다.

############################################
<IfModule jk_module>
JkWorkersFile /usr/local/tomcat/conf/workers.properties
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
</IfModule>
############################################

3-2. apache2/conf/workers.properties 설정하기

# vi /usr/local/apache2/conf/workers.properties

밑의 내용을 작성하고 저장한다.

# Example socket channel, explicitly set post and host.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1

# define the worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009

# Web Context Setup
[uri:/*]
worker=ajp13:localhost:8009

3-3. tomcat/conf/workers.properties 설정하기

# vi /usr/local/tomcat/conf/workers.properties

밑의 내용을 작성하고 저장한다.

# Start setup file
#
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java
ps=/
worker.list=ajp13

# Definition for Ajp13 worker
#
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
#
# End setup file

4. 탐캣, 아파치 재시작


[CentOS] How to install MySQL Connector/J

0. JDK와 tomcat 설치는 밑의 블로그에 가면 상세히 나와있다.
JDK, tomcat 설치하기

---------

JSP 환경만 세팅하고 MySQL등 DB와 연동하지 않으면 아래와 같은 에러를 발견한다.
org.apache.jasper.JasperException: An exception occurred processing JSP page

---------
JDK와 tomcat 설치 후, mysql 연동하는 부분은 웹에서 찾기 힘들어 이렇게 자료로 남긴다.

1. mysql-connector-java-5.1.5.tar.gz 다운받기
http://ftp.plusline.de/mysql/Downloads/Connector-J/

2. 압축풀기
# tar xvzf mysql-connector-java-5.1.5.tar.gz
# cd mysql-connector-java-5.1.5
# cp mysql-connector-java-5.1.5-bin.jar /usr/java/jdk1.6.0_21/jre/lib/ext

3. tomcat 재시작


[CentOS] how to install apache, PHP and MySQL on Linux

LAMP 세팅하는 건 밑의 링크를 타고 가면 자세한 안내를 받을 수 있다.

리눅스에서 APM 설치하기

[리눅스] OS 확인

# uname -m
x86_64

uname에 -m 옵션을 주면 OS가 몇 비트인지 확인 가능하다.

x86_6464비트이고, i68632비트이다.

[리눅스] 방화벽 포트 열기

# iptables -L  : 방화벽 설정 확인

# iptables -A INPUT -p tcp --dport 3306 -j ACCEPT  : 3306포트 방화벽 뚫어주기

# service iptables save : 설정한 내용을 저장한다.

# /etc/init.d/iptables restart : 포트변경후 iptables 재시작

[CentOS] configure: error: xml2-config not found. please check your libxml2 installation.

# ./configure !@#!@#!@#
.
.
configure: error: xml2-config not found. please check your libxml2 installation.


php설치중에 ./configure 명령어를 수행하면 위와 같은 에러를 발견할텐데 간단히 다음 명령어를 수행하자.

# yum install libxml2
# yum install libxml2-devel


그럼 설치가 잘 된다!

[CentOS] gpg key retrieval failed errno 14 http error 404 not found

# yum install packagename    
gpg key retrieval failed errno 14 http error 404 not found


yum install이 안되면서 gpg key retrieval failed errno 14 http error 404 not found 이런 에러가 나는 경우 해결책이다.

# rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

gpg key라는 CentOS RPM signing key가 없으므로 이를 받아온 뒤에 yum 명령어를 실행하면 잘 될꺼다!


밑의 링크 두군데 중 한개를 import 하면 된다!


[CentOS] No curses/termcap library found MySql

# ./configure --prefix=/usr/local/mysql-5.0.37 --with-charset=utf8 --with-collation=utf8_general_ci
.
.
.
@#$@#$%#$%#$%     No curses/termcap library found MySql

mysql을 설치하는 중에 ./configure 명령어 후에 다음과 같은 에러를 내면서 make를 할 수 없는 상황이 왔을 때 해결법을 찾았다.

# yum install libtermcap-devel

이후엔 설치가 잘 될꺼다!

2010. 8. 25.

[CentOS] service apachectl does not support chkconfig

# chkconfig --add apacheclt  
service apachectl does not support chkconfig

위의 예처럼 데몬을 자동으로 수행하려는데 에러가 발생한다면
다음과 같은 해결책을 사용해보세요.

# vi /etc/init.d/apachectl

# chkconfig: 2345 90 90
# description: init file for apachectl server daemon
# processname: /usr/local/apache2/bin/apachectl
# config: /usr/local/apache2/conf/httpd.conf
# pidfile: /usr/local/apache2/logs/httpd.pid

편집기를 열고 다음의 주석달린 5문장을 입력하면 놀랍게도 해결이 될것이다.

화이팅!!

[리눅스] root 로 접속 막기

1. 환경설정파일변경
> vi /etc/ssh/sshd_config

------------------------------------------
PermitRootLogin no
------------------------------------------

yes를 no로 변경하고 주석을 풀어줍니다.

2. 재시작
> service sshd restart


2010. 8. 24.

[리눅스]그룹생성 및 폴더에 그룹권한주기

1. 그룹 추가

>groupadd -g 505 web
>vi /etc/group

파일 내용중 다음과 같은 라인을 확인할 수 있다.

web:x:505:     => web이라는 그룹에 GID 505를 부여함

2. 사용자에게 GID(그룹아이디)주기

>vi /etc/passwd
원하는 사용자의 GID를 505로 변경함.

- /etc/passwd 파일의 구조
  account:password:UID:GID:GECOS:directory:shell
     account  :  사용자이름
     password : 암호(shadows파일로 대치될 경우 * 표시)
     UID, GID : 사용자번호, 그룹번호
    GECOS : 사용자정보(사용자 Full Name)
    directory : 사용자의 홈디렉토리
    shell     : 사용자의 기본 shell

3. 원하는 폴더에 그룹으로 권한주기

> chgrp web 대상폴더
> ls -al

drwxr-xr-x 2 root web 4096 1월 4 13:15 폴더이름

해당 폴더에 그룹이 web으로 변경되었음

단, 해당 디렉토리에 그룹에 대한 rwx의 권한이 있어야 함.
chmod 가 필요함.

2010. 8. 17.

[PHP] MongoDB 사용하기

<?php
$mongoDB = new Mongo();
$newDB = $mongoDB->newDB;
$newCollection = $newDB->newCollection;

$doc = array('name' => 'owner', 'text' => 'this is test');
$newCollection->insert($doc);

$mongoDB->close();
?>

쉘에 들어가서 다음을 입력하면 확인가능하다.
>db.newCollection.find()

[MongoDB] 사용자추가 스키마생성 DB삭제

mongod 를 기동할 때는 --auth 옵션을 추가해야 함

mongoDB는 system영역 내에서 admin이라는 DB관리를 위한 스키마를 가짐

>use admin // admin DB 사용
>db.addUser('name','pswd') // 사용자 추가

>use newDB => 해당 디비가 없으면, 새로운 디비를 생성함
   mysql의 스키마 생성과 같음

>db.collectionName.drop() => 해당 collection을 삭제함
   mysql의 DROP TABLE과 같음

2010. 8. 16.

[MongoDB] APM에서 시작하기

1. mongoDB 설치하기

2. 압축풀기
   본인은 C:\MongoDB 에 풀었다.

3. data 폴더 생성하기 (DB data를 위해 생성함)
   본인은 C:\MongoDB\data 에 생성함

4. MongoDB 시작
   
C:\MongoDB\bin> mongod --dbpath C:\MongoDB\data


5. php에서 쓸 MongoDB 드라이버설치
   다른버전 찾기 -> 여기

6. 압축풀고 PHP의 extension 폴더에 dll 파일을 넣음
   C:\APM_Setup\Server\PHP5\ext 폴더가 extension 폴더임
   (본인은 APM_Setup에 APM을 설치함)

7. php.ini에서 해당 모듈을 적용함
   php.ini에 보면 extension정보가 쭉 나열되어 있는 곳이 있음
   거기에 밑의 한줄을 추가해줌
   이왕이면 알파벳 순서에 맞게 하는게 나중에 찾기 편할 듯
 
extension=php_mongo.dll

8. 아파치 재시작
   APMSETUP Monitor를 열어서 Apache를 재시작한다.

9. 확인하기
   echo phpinfo(); 를 이용해서 불러온 정보에 mongo 관련 설정이 있는지 확인한다.
   설치 끝!


[테스트하기] - 반드시 "4번.몽고DB실행"을 한 뒤에 작업해야함.

<?php
$m = new Mongo();
?>


MongoDB를 실행하지 않으면 다음과 같은 에러를 볼 수 있다.

Fatal error: Uncaught exception 'MongoConnectionException' with message ': Unknown error' in C:\APM_Setup\htdocs\mongoDB_tester\index.php:4 Stack trace: #0 C:\APM_Setup\htdocs\mongoDB_tester\index.php(4): Mongo->__construct() #1 {main} thrown in C:\APM_Setup\htdocs\mongoDB_tester\index.php on line 4
 

[참고 사이트]


2010. 8. 15.

[MySQL] index 추가, 삭제, 확인하기

1. 테이블의 인덱스 확인하기

SHOW INDEX FROM tablename;

2-1. 테이블의 인덱스 추가하기 : 컬럼은 1개도 가능, 2개 이상도 가능
ALTER TABLE tablename ADD INDEX indexname (column1, column2);

2-2. 테이블의 유니크 인덱스 추가하기 : 컬럼은 1개도 가능, 2개 이상도 가능
ALTER TABLE tablename ADD UNIQUE INDEX indexname (column1, column2);

3. 테이블의 인덱스 삭제하기
ALTER TABLE tablename DROP INDEX indexname;