오랫만에 자료 남깁니다.

MySQL 에서 날짜 계산하는 펑션을 소개 드립니다.

 

DATE_ADD 펑션을 사용하면 되구요.....

 

DATE_ADD(기준일, 기간) 형태로 사용하게 됩니다.  아래에 예시 쿼리를 남깁니다.

 

하루
SELECT COLUMN1,2.... FROM TABLE WHERE DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 DAY ) AND NOW();

일주일
SELECT COLUMN1,2.... FROM TABLE WHERE DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 WEEK ) AND NOW();

한달
SELECT COLUMN1,2.... FROM TABLE WHERE DATE_COLUMN BETWEEN DATE_ADD(NOW(),INTERVAL -1 MONTH ) AND NOW();

 

행복하세요!!

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

pid로 프로세스를 종료하는 방법을 정리합니다. 사용하는 명령은 다음과 같습니다.

  • ps
  • grep
  • awk
  • kill

pid를 조회하여 프로세스 종료하는 명령은 다음과 같은 절차로 작성됩니다.

  1. 원하는 프로세스 목록만 가져오기 - ps, grep, pgrep(ps+grep)
  2. 프로세스 목록에서 pid만 가져오기 - awk
  3. kill 명령어로 한번에 프로세스 종료 - (backtick)

backtick은 다음 그림과 같은 위치의 문자를 의미합니다.


프로세스 목록 조회

ps 및 grep 명령을 대상 프로세스를 조회합니다.

 

ps -ef | grep hugo

501 6582 479 0 12:39AM ttys000 0:01.15 hugo server

501 6919 479 0 12:44AM ttys000 0:00.21 hugo server

501 7011 479 0 12:44AM ttys000 0:01.16 hugo server

501 7104 479 0 12:44AM ttys000 0:01.16 hugo server

501 7276 479 0 12:44AM ttys000 0:01.15 hugo server

501 7371 479 0 12:44AM ttys000 0:01.16 hugo server

501 7463 479 0 12:44AM ttys000 0:01.14 hugo server

501 7637 479 0 12:45AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn hugo

프로세스 목록에서 pid 출력

awk로 프로세의 정보를 출력합니다. 컬럼 지정은 작은 따움표로 설정합니다.

 

> ps -ef | grep hugo | awk '{print $1,$2,$3,$8}'

501 6582 479 hugo 501 6919 479 hugo

501 7011 479 hugo 501 7104 479 hugo

501 7276 479 hugo 501 7371 479 hugo

501 7463 479 hugo 501 7903 479 grep

>

 

두 번째 컬럼($2)으로 pid를 지정하여 출력합니다.

 

> ps -ef|grep hugo|awk '{print $2}'

6582

6919

7011

7104

7276

7371

7463

7952

>

프로세스 종료

쉡 스크립트에서 backtick(`) 사이의 명령은 실행되고 그 결과가 앞에 명령에 입력됨니다.

다음과 같이 pid는 kill 명령에 전달되어 종료됩니다.

 

>kill -9 `ps -ef | grep hugo|awk '{print $2}'`

kill: kill 8385 failed: no such process

[7] + 7463 killed hugo server

[6] + 7371 killed hugo server

[5] + 7276 killed hugo server

[4] + 7104 killed hugo server

[3] + 7011 killed hugo server

[2] + 6919 killed hugo server

[1] + 6582 killed hugo server

>

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

mysqldump 를 이용하여 전체 테이블을 백업한 뒤 특정 테이블만 복구하기 위한 방법을 안내해 드립니다.

 

단계적으로 볼때,  기본 mysql 명령으로는 특정 파일에 대한 복원이 힘들기 때문에,

 

dump 파일에서 복구해야 할 테이블 영역을 정규식을 이용하여 잘라낸 뒤 해당 테이블을 복구 하는 방법입니다.

 

 

1. Database 백업

mysqldump -h localhost -u root -p 디비명 > 디비명.dump

 

2. 필요 테이블 내용 추출

sed -n -e '/DROP TABLE.*테이블명/,/UNLOCK TABLES/p' 디비명.dump > 디비명.테이블명.dump

  

3. 테이블 복원

 mysqldump -h localhost -u root -p 디비명 < 디비명.테이블명.dump

 

행복하세요~

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

리눅스에서 파일 내용을 확인하는 명령어들을 살펴 봅니다.

대표적으로  cat , tail , less, head  등의 명령어를 활용하실 수 있습니다.

각종 로그 파일을 살펴보거나 문서들을 살펴볼때 유용합니다.

 

cat

cat 명령어는 텍스트로 된 파일일 경우 그 내용을 정상적으로 출력하지만 바이너리 파일일 경우에는 출력은 하지만 알아볼 수 없다. 그리고 2개 이상의 파일이름이 지정되면 모든 파일이 연결되어 보여진다.

 

사용법 : cat [옵션] 파일명

 

ex >> test 파일을 열어봄

cat test

 

ex >> 각 행에 번호를 붙여서 출력

cat -b test

 

ex >> 빈 행에도 번호를 붙임

cat -n test

 

ex >> 연속되는 2개이상의 빈 행을 한행으로 출력

cat -s test

more

more 명령어는 특정파일의 내용을 확인하는 그 페이지에서 바로 vi 로 파일을 열어서 편집을 할 수도 있으며 텍스트 파일의 내용을 한 페이지씩 차례대로 확인할 수 있다.

 

사용법 : more 파일명

 

ex >> 파일의 내용을 출력

more test

 

ex >> 많은 양의 파일리스트를 확인할때 파이프를 이용해 연결

 

ls -l /etc | more

 

특정 파일의 내용을 확인하고 있는 상태에서 사용할 수 있는 키

  • h : more 명령어상태에서 사용할 수 있는 키 도움말 확인
  • Space Bar : 한 화면씩 뒤로 이동하기 (f와 동일)
  • Enter : 현재행에서 한 행씩 뒤로 이동하기
  • q : more 명령어 종료하기
  • f : 한 페이지씩 뒤로 이동하기(Space Bar 와 동일)
  • b : 한 페이지씩 앞으로 이동하기
  • = : 현재 위치의 행번호 표시하기
  • /문자열 : 지정한 문자열을 검색하기
  • n : /문자열로 검색한 문자열을 차례대로 계속해서 찾기
  • !쉘명령어 : more 명령어상태에서 쉘명령어를 실행하기
  • v : more 명령어로 열려있는 파일의 현재위치에서 vi를 실행하기

less

less는 more와 매우 유사하다.

 

사용법 : less 파일명

 

ex >> 내역 확인

less test ls -l | less

 

less 내부명령키

  • Space Bar 또는 f : 한 화면 뒤로 이동
  • b : 한 화면 앞으로 이동
  • Enter : 한 행씩 뒤로 이동
  • 숫자+n : 원하는 페이지만큼 뒤로 이동, 이후부터는 n만 눌러도 숫자페이지만큼 이동
  • q : less 수행종료

head

head는 파일의 앞부분부터 확인하는 명령어이다.

 

사용법 : head 파일명

 

ex >> 기본적으로 행의 앞부분 부터 10 행까지만 출력

head test

 

ex >> 20행까지 출력

head -n 20 test

 

ex >> 200 byte 까지의 내용을 출력

head -c 200 test

tail

tail은 특정파일에 계속 추가되는 모든 내용을 모니터링 할 수 있어 실무에서 유용하게 사용되는 명령어이다.

/var/log/ 디렉토리에 존재하는 많은 시스템로그파일들의 로그파일들에 저장되는 내용들을 실시간으로 계속 모니터링하기 위한 용도로 자주 사용된다.

사용법 : tail 파일명

 

ex >> 기본적으로 파일에서 마지막 부분의 10개행을 화면에 출력

tail test

 

ex >> 마지막 부분의 20개행까지 출력

tail -n 20 test

 

ex >> 마지막에서 200byte 까지를 출력

tail -c 200 test

 

ex >> 로그파일을 실시간 모니터링, 종료는 Ctrl-c

BASH

tail -f /var/log/messages


블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

해당오류는 Connection 객체나 PreparedStatement 객체를 사용 한 후 close 를 안해주었기 때문이다.

일반적으로 iBatis를 사용하거나 Framework 를 사용하면 쉽게 만날 수 있는 오류는 아니지만

Daemon을 만들 때나 기타 웹이 아닌 자바 프로그램을 만들 때에는 꼭 사용 한 객체를 close 해주는 

습관을 갖는게 좋다.

 

모든 Database connection 에서는 꼭 close 를 해주는 습관을 가집시다!!!

 

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

리눅스 쉘에서는 명령이 실행되는 데 crontab에서는 실행이 되지않는 경우


리눅스 쉘에서는 명령이 실행되지만, crontab 등록을 통해서는 실행이 되지않는 경우가 있다.

이것때문에 많은 시간을 삽질한 적이 있다.

왜 crontab에서는 명령이 실행되지않는 것일까?


결론부터 말하자면 환경변수 문제였다. 어떤계정에서 crontab작동하도록 명령하지않는 다.. 

그냥 시간되면 지 스스로 작동하기에 환경변수 따위가 없다.. 가져올 환경변수가 없으므로 작동하지 않는 건 당연하다.


crontab에서 환경변수를 설정해주면 이 문제는 간단히 해결된다.

crontab -e에서 


SHELL=/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


맨윗줄에 이런식으로 적어주면 된다..


블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,


ORA-00362: member is required to form a valid logfile in group x



ORA-00362: member is required to form a valid logfile in group x 의 에러는 오라클 원문에 다음과 같이 기술 됩니다.


Reason>

A request to drop a logfile member was denied because it would remove data required to form a complete logfile.



redo log file 은 오직 inactive 상태일 때만 삭제가 될 수 있는데, 

inactive 상태인데도 불구하고 해당 member 가 삭제가 안되는 경우가 발생할때가 있다. 

본인 같은 경우는 member 가 하나 뿐이 였던 group 에 새로운 member 를 추가하고 나서,

바로 기존 member 를 삭제하려고 하니 이런 에러가 발생하기도 했다.


새 member 가 추가된 직 후 에는 (log switch 나 checkpoint 가 한번도 발생하지 않는 경우), 

system 에서 기존 member 만이 logfile 에 모든 정보를 가지고 있다고 판단해서 지우지 못하게 하는 경우일 듯 싶다. 



이를 해결하기 위하여 다음의 두가지 방법을 선택할 수 있겠습니다.


1. 해당 group 자체를 아예 drop 해 버리는 방법


   - alter database drop logfile group x


2. alter system switch logfile 과 alter system checkpoint 를 여러번 수동으로 발생시켜서

   다시 해당 group 이 inactive 상태가 되었을 때 기존 member 를 삭제하는 방법.


이렇게 처리를 하실 수가 있습니다.


결론적으로  해당 group 가 inactive 상태가 되면 기존 member 를 삭제할 때 아무런 오류없이 잘 삭제가 되어지게 됩니다.



블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,


ORA-25153: Temporary Tablespace is Empty



오라클에서의  ORA-25153: Temporary Tablespace is Empty  에러에 대해서 기술합니다.


ORA-25153: Temporary Tablespace is Empty 에러는 테이블스페이스의 파일이 없거나 용량이 부족하거나 하여


테이블 스페이스를 생성 또는 확장을 못하는 경우가 발생할 때 생기는 오류 메세지 입니다.


이를 해결하기위해서 다음과 같은 확인 및 처리를 해봅니다,.


우선 오라클에 sys (dba권한) 계정으로 접근을 합니다. 


--------------------------------------------------------

-- 아래와 같이 temporary tablespace 가 있는지 우선 확인

--------------------------------------------------------

SYS> select file_id, tablespace_name, bytes/1024/1024 MB, file_name from dba_temp_files;

 

no rows selected

 

SYS> select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';

 

PROPERTY_NAME        PROPERTY_V DESCRIPTION

-------------------- ---------- --------------------------------------------------

DEFAULT_TEMP_TABLESP TEMP   Name of default temporary tablespace

ACE

 

SYS> !ls -al /app/oracle/oradata/testdb/temp01.dbf

-rw-r----- 1 oracle oinstall 30416896 Aug 23 08:57 /app/oracle/oradata/testdb/temp01.dbf

 

--------------------------------------------------------

-- 없다면 temporary tablespace 생성해 주면 되겠지만,

-- 위와 같은 경우 이미 TEMP tablespace 있지만, 해당 tablespace 에 data file 이 없기 때문에

-- 생기는 에러이다. 이럴 경우 해당 파일을 재사용 해주면 된다.

--------------------------------------------------------

 

--------------------------------------------------------

-- 재사용 해주는 경우,

--------------------------------------------------------

SYS> alter tablespace temp add tempfile '/app/oracle/oradata/testdb/temp01.dbf' size 100M reuse autoextend on;

 

Tablespace altered.

SYS> select file_id, tablespace_name, bytes/1024/1024 MB, file_name from dba_temp_files;

 

   FILE_ID TABLESPACE_NAME           MB FILE_NAME

---------- ------------------------------ ----- --------------------------------------------------

     1 TEMP                 100 /app/oracle/oradata/testdb/temp01.dbf

 

--------------------------------------------------------

-- 새로 생성할 경우,

--------------------------------------------------------

SYS> create temporary tablespace temp2 tempfile '/app/oracle/oradata/testdb/temp02.dbf' size 100M;

 

Tablespace created.

 

SYS> select file_id, tablespace_name, bytes/1024/1024 MB, file_name from dba_temp_files;

 

   FILE_ID TABLESPACE_NAME           MB FILE_NAME

---------- ------------------------------ ----- --------------------------------------------------

     1 TEMP                 100 /app/oracle/oradata/testdb/temp01.dbf

     2 TEMP2                100 /app/oracle/oradata/testdb/temp02.dbf

 

SYS> alter database default temporary tablespace temp2;

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,


centos - iptables 를 이용한 방화벽 포트 열기



linux (centos) 에서 iptables 를 이용한 방화벽 포트 오픈하는 방법입니다.



1. root 로 사용자 권한 변경

    [user@test ~]$ su -

    암호:

    [root@test ~]#


2. /etc/sysconfig/iptables 파일 열기 & 수정

    [root@test ~]# vi /etc/sysconfig/iptables


    열고자 하는 포트를 아래 라인과 같이 추가. (ex - 8080 포트 열기)

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT


3. iptables restart - 아래 명령 사용.

    [root@test ~]# service iptables restart

    또는

    [root@test ~]# /etc/init.d/iptables restart


이렇게하면 해당 포트가 외부로부터의 접근을 허용하게 됩니다.!!!


블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,



CentOS 6 - Apache 웹서버에 SSL 인증서 설치 



1. 확인


- 아파치 버전 확인

 /usr/local/apache/bin/apachectl -v , 


- openssl 설치되어 있는지 확인

 rpm -qa | grep openssl (설치되어 있지 않으면 -> yum -y install openssl)


- ssl  모듈 설치 되어있는지 확인 

 /usr/local/apache/bin/apachectl -l


2. 개인키 생성


- 인증서를 보관할 디렉터리로 이동 하여 개인키 생성

   openssl genrsa -des3 -out <개인키 파일명>.key 2048


- 확인

    openssl rsa -noout -text -in <개인키 파일명>.key


3. CSR 생성


- csr 생성

openssl req -new -key <개인키 파일명>.key -out<csr파일명>.csr


- 항목 설명

Country Name (2 letter code) [XX]: -> 국가코드 (KR= 대한민국)

State or Province Name (full name) []: → 지역

Locality Name (eg, city) [Default City]: → 시/군/구

Organization Name (eg, company) [Default Company Ltd]: → 회사명

Organizational Unit Name (eg, section) []: → 부서명

CommonName (eg, your name or your server's hostname) []: → 도메인명

Email Address []: -> e-mail 주소


4. 인증서 신청


- csr 파일을 확인하여 ----BEGIN 부터 ----END 까지 복사하여 인증서를 신청한다.

  ex ) comodo


5. 인증서 설치


- /usr/local/apache/conf/httpd.conf 에서  ssl.conf를 사용하기 위하여 해당부분 주석해제

   Include conf/extra/httpd-ssl.conf


- /usr/local/apache/conf/extra/httpd-ssl.conf 로 들어가서 자신의 환경에 맞게 설정

SSLCertificateFile /경로/~.crt 
설명 : 발급 받은 파일 중 “인증서 파일”을 지정

SSLCertificateKeyFile /경로/~.key 
설명 : 발급 받은 파일 중 “개인키 파일”을 지정

SSLCertificateChainFile /경로/ChainBundle.crt 
설명 : 발급 받은 파일 중 “Chain CA인증서 파일”을 지정

SSLCACertificateFile /경로/ROOT.crt 
설명 : 발급 받은 파일 중 “ROOT CA인증서 파일”을 지정


6. 방화벽 설정


- 방화벽에서 ssl 포트를 열어준다 (default 값은 443)

  

6. 데몬재시작


- /etc/init.d/apachectl start & restart 

   ssl 설정 후 아파치 재구동 시 개인키 패스워드를 물어본다. 매번 데몬 재시작시 일일히 패스워드를 입력해야 하는 번거로움이 있다.


**패스워드 제거 방법 ************************

 - cp <원본개인키> <백업개인키> 

 - openssl rsa -in <원본개인키> -passout pass:'<개인키 패스워드>' -out <패스워드 제거후 생성할 키> -des3

*********************************************


- 확인

  netstat -nltp 



Tip. yum으로 설치한 httpd의 경우 

 - /etc/httpd/conf.d/ssl.conf

 - /etc/httpd/conf/httpd.conf 에서 SSLCertificateFile ,SSLCertificateKeyFile 부분 환경에 맞게 설정

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,