2014년 10월 6일 월요일

Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

 APR connector  사용하면  keystore 파일을 사용할 수 없다고 한다.

Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

 

 

server.xml 상단에

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

부분 주석처리.

ps.
cert 파일로 지정하는 법.

"index '%s.%s' or partition of such index is in unusable state"

오류 보고 -
SQL 오류: ORA-01502: index 'ORAWEB.PK_MEMBER_LOGIN_LOG' or partition of such index is in unusable state
01502. 00000 - "index '%s.%s' or partition of such index is in unusable state"
*Cause: An attempt has been made to access an index or index partition
that has been marked unusable by a direct load or by a DDL
operation
*Action: DROP the specified index, or REBUILD the specified index, or
REBUILD the unusable index partition



이렇게 리빌드.

ALTER INDEX <owner>.<name> REBUILD;





전체  INDEX 리빌드
SELECT 'alter index "ORAWEB"."' || OBJECT_NAME ||'" rebuild;' FROM USER_OBJECTS WHERE OBJECT_TYPE='INDEX';

...

alter index "ORAWEB"."PK_PAY_RES_LOG" rebuild;
alter index "ORAWEB"."PK_PRINTER" rebuild;
alter index "ORAWEB"."PK_PUSH_MESSAGE_S" rebuild;
...

ORAWEB 은 OWNER이다.

위의 select 값을 복사해서 실행.

2014년 10월 1일 수요일

ctime, mtime 차이점

리눅스를 사용하면서 변경시각과 수정시각이란 말을 들을 수 있다.

ctime : 변경 시각(change time)

mtime : 수정시각(modification time)

 

말뜻이 애매해서 비슷하게 생각되지만, 차이점이 있다.

변경(ctime)은 파일의 아이노드(inode)를 바꾸는 것이고,
수정(mtime)은 파일의 내용 자체를 바꾸는 것이다.

 

예를 들어서 aaa.txt 라는 파일이 있을 때
#chmod 755 aaa
이런 명령을 사용하면 파일내용에는 변경이 없지만, inode 값은 바뀌게 된다.

수정은
#echo aa >> aaa.txt
라고 하면 파일내용이 수정되는 것이고, timestamp 값이 변경 되게 된다.

 

그리고 또 하나는 접근 시각(access time)도 알아보자.
접근시각이란 해당 파일을 마지막으로 읽거나 쓴 시각을 말한다.
따라서 파일을 읽기만 한다면 변경시각이나 수정시각은 변하지 않고, 접근시각만 달라진다.

find 관련 문서를 찾다보면 ctime(change time):변경시각을 '생성시각(creation time)'이라고 설명하고 있는
문서가 있는데 이런 해석은 옳지 않다.

 

참고 :유닉스 파워툴

2014년 9월 18일 목요일

apache multiviews 기능

서버 이전을 했는데, 이미지를 못 불러오는 부분이 있었다.

해당 이미지를 불러오는 데, 이미지 이름으로만 불러오는 것이었다. 확장자 없이...

예를 들어 /image.jpg 를 불러 온다고 했을 때, 보통은

http://www.site.co.kr/image.jpg

이런식으로 불러온다.



그런데 저기서 확장자가 없이

http://www.site.co.kr/image

이런식으로 호출해도 이미지가 뜨는 것이다.



원인은 아파치 설정의 MultiViews 설정이었다.

아파치 문서를 찾아 보니 다음과 같다고 한다.
MultiViews를 사용하면 다음과 같은 일이 일어난다.
서버가 /some/dir/foo에 대한 요청을 받고 /some/dir/foo에 MultiViews가 동작하며 /some/dir/foo가 존재하지 않을 경우,
서버는 디렉토리에서 이름이 foo.*인 파일들을 모든 포함하는 가상의 type map을 만든다.
클라이언트가 요청한 media type과 content-encoding을 가지고 이중에 가장 적합한 것을 선택한다.

테스트 결과 대부분의 이미지는 확장자 없이도 제대로 보여 주었고, html 같은 경우도 형식만 제대로 되어 있으면 인식 되었다.

CentOs7 방화벽 내리기

CentOs 7 이전에는 방화벽이란 건, iptable 이였다.

아무리 iptable을 내려도 적용이 안된다.

확인 해 보니, CentOs 7 버젼부터  Firewalld 란 게 추가되어, 두개가 같이 들어있다. 최소버젼으로 설치 했는 데도 그렇다.
[root@localhost ~]# systemctl list-unit-files | grep fire
firewalld.service disabled
[root@localhost ~]# systemctl list-unit-files | grep iptables
iptables.service disabled
[root@localhost ~]#

Firewalld 은 iptables 기반으로 조작이 쉽도록 만들어진 것으로 보인다.

Firewalld는 iptables에 의존성을 가진다.

 
systemctl stop firewalld

#리부팅 뒤에도 실행 안되게끔
systemctl disable firewalld

2014년 9월 12일 금요일

모든 쿼리 로그 기록.

마리아  db, mysql 의 모든 쿼리를 쌓아놓고 분석에 이용.

 

my.cnf 에 추가
#log
general_log=1
#log_output을 FILE 로 할경우의 경로.
#general_log_file = /var/log/mysql/general_query.log
log_output=TABLE

아래의 스크립트를 하루에 한번 실행하다록 크론에 등록.

general log가 계속 쌓이는 것을 방지. 7일마다 삭제.
#!/bin/sh

id="root"
pass="PASS"

mysql -u ${id} -p${pass} -e "SET GLOBAL general_log = 'OFF'";
mysql -u ${id} -p${pass} -e "RENAME TABLE mysql.general_log TO mysql.general_log2;";
mysql -u ${id} -p${pass} -e "DELETE FROM mysql.general_log2 WHERE event_time <= NOW()-INTERVAL 7 DAY";
mysql -u ${id} -p${pass} -e "OPTIMIZE TABLE general_log2";
mysql -u ${id} -p${pass} -e "RENAME TABLE mysql.general_log2 TO mysql.general_log";
mysql -u ${id} -p${pass} -e "SET GLOBAL general_log = 'ON'";


http://stackoverflow.com/questions/9343001/is-my-mysql-general-log-table-getting-too-big

 
general_log 의 엔진이 CSV라서 해당 파일 자체를 cat, vim 등으로 그냥 볼 수 있음.

마리아DB 소켓 변경시 systemd-private-xxxx 디렉토리 안에 생성되는 문제.

마리아DB 의 socket 위치를 /tmp/mysql.sock 로 변경 하였습니다.
그랬더니, /tmp/systemd-private-xxxx/tmp/mysql.sock 으로 생성이 된다.
뭐 이렇게 해도 상관이 없으나, 클라이언트 접속시 접속이 되지 않는다.

[client]
socket=/tmp/mysql.sock

위와 같이 처리 하면 될 것 같았으나, 위처럼 하면 그냥 /tmp/mysql.sock 으로 인식된다.

centos 7버젼으로 설치 했더니, 조금 바뀐게 많다.
tmp 디렉토리의 보안이 추가 된것으로 보인다.

 
vim /lib/systemd/system/mariadb.service 
PrivateTmp=true 에서 PrivateTmp=false 로 변경.
systemctl daemon-reload
service mariadb restart