이글은 FreeBSD 5.3R 에서의 포트시스템으로의 설치를 기본으로 합니다.
1. 디렉토리 이동
# cd /usr/ports/databases/mysql41-server
--> mysql 버전이 5.x 가 있지만 proftpd포트 설치시 mysql4.x 클라이언트
를 설치하므로 버전을 맞추기 위해 4.x 를 설치하기로 합니다.
# make install clean WITH_CHARSET=euc_kr BUILD_OPTIMIZED=yes
(
mysql41-server 의 경우 WITH_CHARSET옵션의 값이 euckr로 변경됨.
mysql 4.1버전의 경우
# make install clean WITH_CHARSET=euckr BUILD_OPTIMIZED=yes
)
# /usr/local/bin/mysql_install_db
==> 처음으로 mysql을 사용하기 전에 시스템 DB를 만들기 위한 스크립트를
실행합니다.
위 명령은 mysql을 설치한 후 반드시 한번만 하시기 바랍니다.
2. 설치 확인 작업
# /usr/local/bin : mysql바이너리 파일들이 있나 확인
# /usr/local/etc/rc.d/mysql-server.sh : mysql 기동 스크립트
# /var/db/mysql : mysql 데이터베이스 파일
3. 데몬 시작및 중지하기
3.1. 시작하기
# /usr/local/etc/rc.d/mysql-server.sh start 혹은
/usr/local/bin/mysqld_safe -user=mysql &
3.2 중지하기
# /usr/local/etc/rc.d/mysql-server.sh stop 혹은
/usr/local/bin/mysqladmin -u root shutdown
4. mysql 데이터베이스를 사용하기 전에
반드시 루트 암호를 생성하고 사용하시기 바랍니다.
#/usr/local/bin/mysqladmin -u root password '새로운 비밀번호'
#/usr/local/bin/mysqladmin -u root -h 호스트명 password '새로운 비밀번호'
5. 데이터베이스 사용하기
#/usr/local/bin/mysql -u root -p
password :
** 만약 위와같이 작업시 에러발생하는 경우
4번 작업시 에러발생시에는
1. 우선 mysql서버 데몬을 죽인다.
# kill mysql_pid 혹은
/usr/local/etc/rc.d/mysql-server.sh stop
2. /usr/local/etc/rc.d/mysql-server.sh 파일을 편집해서
========================
편 집내용.
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} --language=korean > /dev/null &
를 다음과 같이 수정합니다 .
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} --language=korean --skip-grant > /dev/null &
========================
3. mysql서버 데몬을 다시 시작한다.
# /usr/local/etc/rc.d/mysql-server.sh start
4. 위와같이 하면 권한 테이블을 사용하고 데몬을 띄우게 됩니다.
5. mysql에 접속하여
# /usr/local/bin/mysql -u root -p
6. root의 암호를 변경합니다.
mysql> use mysql;
mysql> select * from user where user = 'root';
mysql> update user SET password = PASSWORD('newpassword');
7. 권한 테이블을 다시 읽는다.
mysql> flush privileges;
8. mysql을 종료
mysql> \q
9. mysql 서버 데몬 죽입니다.
#/usr/local/etc/rc.d/mysql-server.sh stop
10./usr/local/etc/rc.d/mysql-server.sh 파일을 편집해서
========================
편집내용.
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} -language=korean --skip-grant > /dev/null &
를 다음과 같이 수정합니다 .
/usr/local/bin/mysqld_safe --user=mysql --datadir=${DB_DIR}
--pid-file=${PIDFILE} -language=korean > /dev/null &
========================
다 시 원상복귀 합니다.
11. mysql 서버를 다시 시작합니다.
#/usr/local/etc/rc.d/mysql-server.sh start
12. 정상적으로 mysql을 사용가능합니다.
2012-11-03
FreeBSD/MySQL] FreeBSD 5.4R 에서 MySQL 한글 입력 문제
FreeBSD 5.4R에서 ports 에서 mysql-server41 을 설치시
make install clean WITH_CHARSET=euckr로 설치후
한글 입력이 안되는 문제가 발생한다
그런경우 아래와 같이 해당 계정에서 작업을 한다.
///////////////////////////////////////////////////////////////////////////////
MySQL 클라이언트 프로그램(mysql)에서 한글 입력에 문제가 있을 수 있습니다.
mysql은 readline 라이브러리를 사용하므로, 사용자 디렉토리의 .inputrc에
다음 내용을 넣어주면 됩니다.
set meta-flag On
set convert-meta Off
set output-meta On
///////////////////////////////////////////////////////////////////////////////
이글은 최준호님이 답해주셨습니다.
DB/MySQL] mysql 유지보수 MYD,MYI,FRM
[[[ SQL 자료의 이전과 dump ]]]
table dump (특정 테이블을 sql 문으로 저장하기)
./mysqldump -u ID -p DBname tablename > tablename.sql
-------------------------------------------------------------------------
특정 table 설치
./mysql -u ID -p DBname < table.sql
--------------------------------------------------------------------------
특정 테이블 지우기
./mysql -u DBname -p
./use DB
./drop table tablename;
---------------------------------------------------------------------------
DB 을 모두 sql Dump 백업
./mysqldump -u ID -p DBname > ***.sql
./mysql -u ID -p DB < ***.sql
***********************************************************
[[[[[[[[[[[ 테이블의 유지 보수 ]]]]]]]]]]]]]]]]]]]]]]
전원중단,비정상종료,frm화일 삭제수정등에 의한 DB 이상
mysql 의 테이블 검사 및 오류를 수정하는 유틸리티
* myisamchk 를 사용시 mysql를 종료한다.
* 테이블은 3개 화일 : frm, MYI, MYD 파일을 검사한다.
frm(테이블구조기록), MYI(테이블인덱스화일), MYD (데이터화일)
------------------------------------------------------------------------
myisamchk table명 (table 조회 검색)
myisamchk --recover --quick table명 (빠른복구)
myisamchk --recover table명 (복구)
myisamchk --safe-recover table명 (재오류시)
-------------------------------------------------------------------------
복 구되지 않는 경우
-테이블구조가 기록된 frm 파일이 삭제 또는 손상
-테이블 인덱스 파일은 MYI 삭제 손상된 경우
-MYD 는 데이터 파일
---------------------------------------------------------------------------
myisamchk -r table명
(테이블 파일의 빈공간등을 없에 최적화 시킨다.)
-a : 흩어진 인덱스를 모아 속도 향상
-S : 인덱스트리 소팅 검색 속도 향상
-R : 인덱스 기준 레코드 정렬 속도 향상
myisamchk -R1 tablename
* 1번 인덱스 기준 레코드 정렬
-----------------------------------------------------------------
[[[[[[ EXCEL 에 있는 자료 mysql로 이전하기 ]]]]]]]
1. 엑셀의 화일을 파일형식-텍스트(탭으로분리)로 선택 저장
* sample.txt
ex) 허정수 A 경기도
이효진 B 구리시
2. FTP 로 전송후 LOAD DATA INFILE 명령으로 테이블 입력
* 미리 테이블이 생성되어 있어야 한다.
* 해당 txt 에 맞게 테이블을 만들어 주세요!
3.LOAD DATA INFILE 'sample.txt' INTO TABLE sample
LINES TERMINATED BY '\r\n' ;
* '\r\n' 줄구분차이 도스 윈도우
4. select * from sample;
----
복구하는 방법은 ...
mysql data 디렉토리에 그냥 같다가 놓는겁니다 ^^
.frm 파일은 테이블 구조가 저장되어 있는 파일입니다
.MYD 파일은 실제 데이터가 들어있는 파일입니다
.MYI 파일은 Index 정보가 들어가 있는 파일입니다
위 3개의 파일을 손상되지 않은 상태에서 가지고 계신다면
그냥 갖다가 놓는것 만으로 복구하실 수 있습니다
단, 퍼미션 조절은 해주셔야겠지요. 퍼미션 조절 안하시면 나중에 DB 파일을 읽어오지 못합니다
그리고 저 파일들을 .sql 형태로 변환하는 방법은 없습니다
적 어도 제가 알기론요..
다만
백업받으실때 .sql 형태로 백업받을 수는 있습니다
mysqldump -A -u root -p > mysql_bakup_all.sql
이렇게 하시면 모든 데이터베이스를 .sql 형태로 백업받게 됩니다
특 정 DB 만, 혹은 특정 Table 만 백업받는 방법은
Mysql 메뉴얼을 참조하시구요..
더 자세한 답변은 여기 계신 고수분들께서 해주실겁니다
그리고
database.sarang.net 사이트로 한번 들려보세요
DB/MSSQL] convert/ cast 함수
mssql의 convert()/cast() 함수
convert(), cast() 는 둘다 데이터를 표현할때 변환해서 보여주는 함수로 cast()는 ansi sql을 지원한다.
convert(datatype[length], expression, [style])
cast(expression as datatype)
expression : 표현식, 테이블의 필드, 문자열 등이 올 수 있다.
datatype : sql에서 지원하는 데이터타입을 말한다. int, char(), varchar() 등등...
style : expression이 datetime 형식일 경우 주로 사용되는 것으로 각 나라의 표현 형식을 지정할 때 사용한다.
한국의 경우 주로 121, 21이 사용되는 경우가 많다.
예제) titles 테이블에서 제목과 판매일자를 가지고 온다.
SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))
FROM titles
WHERE type = ''trad_cook''
DB / MSSQL ] 인덱스를 이용한 조건검색
인덱스의 유무에 따라서 데이터를 찾는 성능의 차이가 천차만별이 될 수도 있으나 또한 너무 남용을 하게 되면 데이터의 크기보다 인덱스의 크기가 커지는 배보다 배꼽이 더 큰경우가 발생하는 경우도 있으니 유의해서 사용을 해야된다.
인덱스는 테이블에서 어느 하나의 필드, 혹은 필드들의 조합으로 생성을 할 수 있다.
이 생성된 인덱스를 사용하게 하는 것이 쿼리 작성자의 능력이다.
이제 조건 검색에서 주의할 사항을 알아보자.
1. 조건검색시 ''='' 은 모든 인덱스검색중 최우선 순위를 가진다.
2. 조건 검색시 좌변인덱스는 가공하지 말고, 우변을 가공해서 조건을 생성할 것.
단, 의도적인 인덱스 사용을 막고자 하는 경우는 예외.
3. 조건 검색시 부정의 표현을 사용하지 말고 긍정표현 및 범위 조건을 사용할것.
다시말해, ''not'', ''<>'', ''or'' 이런 조건들은 될 수 있으면 긍정적인 표현으로 바꾸어서 사용할 것.
''<>'' => exists로 대체, ''not'' A => not (A) 대체
4. 인덱스가 있는 곳과 없는곳의 테이블을 조인하여 결과 검색시, 인덱스가 없는곳의 데이터가 먼저 읽혀지고 다음에 인덱스가 있는 테이블의 데이터가 읽혀진다.
5. 가급적 조건에 ''Null'', ''Not Null'' 을 없애기 위해 테이블 설계시, 결합인덱스의 구성컬럼이 된다면 Not Null로, 또한 입력조건값으로 자주 사용되는 것이면 Not Null로 설계를 하여서 조건검색시 Not Null, Null이란 조건을 가급적 없앤다.
위의 사항만을 유념해서 검색을 하더라도 select 쿼리 수행 시간을 줄일 여지가 많이 있다.
===========================================================================
쿼리문의 속도 향상 방법.
부분범위처리를 사용한다.부분범위처리란
- 조건을 만족하는 전체집합이 아닌 일부분만을 Access 하게 하는것
- Data량이 많아도 퍼포먼스에는 지장이 없고, 오히려 향상을 가져올 수도 있다.
- 인덱스나 클러스트를 적절히 활용하여 sort를 대체가능하다.
- table은 액세스하지 않고 index만 사용하도록 유도
- exists를 활용한다.
- query를 이원화 하여 일부분씩 scan하도록 유도
위의 것들을 조합하여 활용하면 쿼리문을 작성하여 대량의 데이터를 처리할 경우에도 무리없이 원하는 속도를 얻을 수 있을 것이다.
DB] DB2에서 merge into 사용
merge 문장의 문법 :
merge into tableA a
using (
select * from tableB
) b
on ( a.aaa = b.bbb --// 조회 조건.
)
when matched then
update 문장. <== tableA에 업데이트할 항목 나열
when not matched then
insert 문장. <== tableA에 insert 할 항목 나열.
else ignore;
설명 :
merge into 문장은 insert / update 작업을 한번에 할 수 있는 장점이 있는 sql 구문이다.
그러나, 사용상 주의점은 b 로 묶인 select 문장의 조회 결과가 없는 경우, when 조건절에 걸리지 않는 상황이 발생하는걸 경험했다.
현재까지의 결론.
1. merge into 는 tableA 에 대해 insert / update 작업을 한번에 수행한다.
단, a.aaa = b.bbb 가 일치하는 항목에 대해.
2. merge into 는 "select * from tableB" 에서 조회 결과가 없으면 when ... 을 무시한다.
결과적으로 else ignore 가 실행되는 듯 하다.
2012-10-31
java Framework]윈도우에서 톰캣5.0과 아파치2.0 그리고 jk2 연동하는 방법
<<윈도우에서 톰캣5.0과 아파치2.0 그리고 jk2 연동하는 방법 >>
우선 다음과 같은 S/W가 필요하다.
Apache2.0.45
J2SDK 1.4.1_02 (http://httpd.apache.org/download.cgi에서 apache_2.0.46-win32-x86-no_src.msi를 다운로드 )
Jakarta Tomcat4.1.24 (http://jakarta.apache.org/builds/jakarta-tomcat-4.0 /release/v4.1.24/bin/에서 jakarta-tomcat-4.1.24.exe 또는 jakarta-tomcat-4.1.24-LE-jdk14.exe를 다운로드합니다. J2SDK 1.4가 이미 설치되어 있다면 LE 버전만 받으면 됩니다. 그렇지 않다면 jakarta-tomcat-4.1.24.exe를 다운로드)
mod_jk2 (http://jakarta.apache.org/builds/jakarta-tomcat- connectors/jk2/release/v2.0.2/bin/win32/참고 윈도우용 mod_jk2-2.0.43.dll)
필 요한 소프트웨어를 모두 구했으면 각각을 설치한다. 가급적이면 설치는 J2SDK부터 설치하는 것이 좋다. 그 다음 아파치나 톰켓을 차례대로 설치하면 된다. JK2는 아파치 설치 후, modules 디렉토리에 mod_jk2-2.0.43. dll 파일을 복사하면 된다.
환경 설정
1) JAVA_HOME
JDK가 설치된 디렉토리를 JAVA_HOME 이라는 변수이름으로 환경변수에 추가한다. 바탕화면의 '내 컴퓨터'를 선택하고 팝업메뉴를 띄워 등록정보에 들어간 다음 ‘고급→환경변수’를 선택하면 된다. 모든 사용자에 관계없이 JAVA_HOME이 유효하게 하려면 시스템 변수에, 자신의 계정에만 유효하게 하려면 사용자 변수쪽에 추가하면 된다. 변수명은 JAVA_HOME으로 하고 변수값은 JDK를 설치한 디렉토리를 지정해주면 된다(예. C:\J2SDK_1.4.1_01). BIN 디렉토리까지 설정해주는 것이 아님을 기억하자.
JAVA_HOME 변수의 경우는 TOMCAT에서 JSP 컴파일 등을 할 때 사용할 뿐만 아니라 다른 자바관련 툴들(ANT같은)에서도 이 변수를 사용하므로 어떻든 간에 한번은 지정하는 것이 작업에 도움이 될 것이다.
2) CLASSPATH
TOMCAT 에서는 JSP를 컴파일 할 필요가 있을 때 JAVA_HOME에서 설정된 패스를 기준으로 lib 디렉토리를 뒤지거나 CLASSPATH 환경변수 설정을 참고해서 컴파일에 사용할 패키지인 servlet.jar를 찾는다. 따라서 servlet.jar를 $JAVA_HOME/jre/lib/ext 같은 곳에 넣어주거나 servlet.jar가 포함되어 있는 TOMCAT의 $TOMCAT_HOME/lib 디렉토리에 CLASSPATH 설정을 해주면 된다. 환경변수 설정하는 요령은 앞의 JAVA_HOME의 그것과 동일하다.
3) PATH
자바소스 컴파일에는 javac.exe가 사용되기 때문에, 이를 시스템 어디에서나 사용할 수 있도록 환경변수의 PATH에다가 $JAVA_HOME/bin 디렉토리를 추가해주면 된다. 자바프로그래머라면 대부분 이미 추가해 놓았으리라 생각한다.
4) 아파치 환경설정 - httpd.conf 와 workers2.properties
$APACHE/conf 디렉토리에 있는 httpd.conf 파일을 열고, LoadModule 이라고 되어있는 부분들을 찾아서 적당한 줄에다가 다음과 같이 입력한다.
LoadModule jk2_module modules/mod_jk2-2.0.43.dll
그 후에 DocumentRoot 항목을 찾아서 $TOMCAT_HOME/webapps과 같은식으로 지정해준다.
예) DocumentRoot "c:\Program Files\Apache Group\Tomcat 4.1\webapps"
그리고 아래쪽에 있는 Directory 항목 역시 동일하게 수정해준다.
예) <Directory "C:\Program Files\Apache Group\Tomcat 4.1\webapps">
다 끝냈으면 이번에는 workers2.properties를 편집한다. 이 파일은 기본적으로 아파치에 포함되지 않으므로 conf 폴더 내에서 찾을 수가 없다. 따라서 직접 만들어줘야 하는데 $APACHE_HOME/conf에다가 workers.properties 파일을 만들고 다음의 내용을 복사해넣고 저장하면 된다.
# Define the communication channel
[status:]
[uri:/jkstatus/*]
group=status:
[shm:]disabled=1
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009
# Web Applicaton을 설정
[uri:/examples/*]
info=Map the whole webapp
위 에서 언급한 바와 같이 workers2.properties 파일은 $APACHE/conf에 있어야만 아파치가 읽어들일 수 있기 때문에 특히 파일의 경로에 주의해야 한다. ($TOMCAT_HOME/conf 가 아님)
5) 톰캣 환경설정 - jk2.properties 과 server.xml
$TOMCAT_HOME/conf/jk2.properties 파일을 열고 편집하면 되는데 내용을 잘 모른다면 다음의 셋팅예제를 그대로 복사해 써도 무방하다.
## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED
## WHEN YOU EDIT THE FILE.
## COMMENTS WILL BE _LOST_
## DOCUMENTATION OF THE FORMAT IN JkMain javadoc.
# Set the desired handler list
handler.list=apr,channelSocket,request,shm
# Override the default port for the socketChannel
# Set the default port for the channelSocket
channelSocket.port=8009
# Default:
# channelUnix.file=${jkHome}/work/jk2.socket
# Just to check if the the config is working
# shm.file=${jkHome}/work/jk2.shm
# In order to enable jni use any channelJni directive
# channelJni.disabled = 0
# And one of the following directives:
# apr.jniModeSo=/opt/apache2/modules/mod_jk2.so
# If set to inprocess the mod_jk2 will Register natives itself
# This will enable the starting of the Tomcat from mod_jk2
# apr.jniModeSo=inprocess
# Dynamic library
serverRoot= "C:/Program Files/Apache Group/Tomcat/webapps "
완료했으면 이번에는 server.xml을 편집한다. $TOMCAT_HOME/conf/server.xml 파일을 열고 아래의 부분을 찾아 주석처리 하거나 삭제한다. 주석처리는 ‘<!-’로 시작해서 ‘->’로 끝내면 된다. 아래부분은 TOMCAT에 포함되어 있는 Coyote 웹서버에 연결하는 커넥터인데, 여기서는 웹서버로 아파치를 사용할 것이므로 필요없다.
<!--
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />
-->
위의 내용이 있는 곳에서 조금 아래쪽을 보면 다음과 같은 부분이 있다. org.apache.coyote.tomcat4.CoyoteConnector라는 이름의 Connector가 mod_jk2로 연결할 때 사용하는 부분으로, 아래쪽의 org.apache.ajp.tomcat4.Ajp13Connector가 mod_jk를 사용할 때 쓰는 부분이므로 mod_jk 부분(아래쪽)을 주석 처리하도록 한다.
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8009" minProcessors="5" maxProcessors="150"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="20000"
useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
<!-- Define an AJP 1.3 Connector on port 8009 -->
<!--
<Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
port="8009" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0"/>
-->
서버 구동 확인
톰캣과 아파치를 실행시킨 후 다음의 주소를 입력해 본다.
http://localhost/examples/servlets/index.html
http://localhost/examples/jsp/index.html
제대로 servlet 또는 jsp의 예제 페이지가 나타나고 각 예제들이 올바로 실행된다면 설치가 올바로 이루어진 것이다. 만약 jsp 나 서블릿 파일이 다운로드 된다거나 소스코드가 보인다거나 404 에러 등이 발견되면 어디에선가 셋팅이 잘못된 것이다. 클래스패스의 문제, servlet.jar 패키지의 부재, 잘못된 JDK컴파일러 설치, 설정파일 편집 오류 등 다양한 문제가 있을 수 있다. 아파치의 톰캣의 로그파일과 설치메뉴얼을 보면서 약간의 노력을 더 기울인다면 무난하게 해결 할 수 있을 것이다.
피드 구독하기:
글 (Atom)