2014년 8월 27일 수요일

2014년 8월 25일 월요일

심볼릭 링크를 설정시 문제점.

심볼릭 링크를 설정시
타겟을 위치를 절대경로로 만들시 하위에 새로 생성되는 문제가 있다.

아래와 같이 명령어를 실행 했다.
ln -s /usr/local/mysql/data/ /var/lib/mysql

처음에는 제대로 /usr/local/mysql/data/ 디렉토리가 /var/lib/mysql 로 제대로 생성 되었다.

다시한번 실행해보자.
아무오류 없이 명령어가 적용된다.

/var/lib/mysql 위치로 들어가 보면 data 심볼링 링크가 생긴다.

제일 마지막의 '/' 주건 안 주건 상관 없다.
/var/lib/mysql/

그냥 속편히
cd /var/lib/
ln -s /usr/local/mysql/data/ mysql

이렇게 하면
ln: failed to create symbolic link `mysql/mysql': 파일이 있습니다
위와 같은 오류가 나온다.

심볼링 링크 삭제 시 주의점

symlinkFolder 가 심볼링 링크 파일일 경우

아래와 같이 하면 해당 파일의 하위까지 전부 지워버린다.
rm -rf symlinkFolder/

이런식으로 줘야 함.
rm symlinkFolder

2014년 8월 22일 금요일

mysql 에러 라인 출력.

mysql dump를 복구 하는데, 에러가 남.

근데, 어디서 에러가 나는 지 라인이 안나옴.

--debug  옵션을 주자.
mysql  --debug  database < database.sql

근데 에러남.

ERROR: Option 'debug' used, but is disabled

재컴파일 해야 된다고 함.
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euckr --with-debug

mysql 4.1.22 버젼 이었음.

tar 압축 해제시 에러

tar 압축해제시 파일명에 특수문자가 있으면 에러가 남.

[root@backup]# tar zxvfp mysql_14-07-22_3\:48.tgz
tar (child): 원격 셸을 실행할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
tar (child): mysql_14-07-22_3\:48.tgz: Cannot open: 입력/출력 오류
tar (child): Error is not recoverable: exiting now

gzip: stdin: unexpected end of file
tar: Child returned status 2
tar: Error is not recoverable: exiting now

 
해당 파일을 특수문자 없이 변경후 압축해제.
mv mysql_14-07-22_3\:48.tgz  mysql.tgz

2014년 8월 19일 화요일

mysql 4.0 to 5.1 업그레이드

frm 파일 자체를 옮겨서 시도.
실패.

mysqldump 로 시도.
mysqldump -u root-ppass -e --all-databases > DB_ALL.sql

아래와 같은 오류 발생.
ERROR 1064 (42000) at line 250: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN smallint(6) unsigned NOT NULL default '0',
  OUT smallint(6) unsigned NOT NUL' at line 18

정상적인 쿼리이나, IN 필드명이 mysql에서 사용하는 명령어라서 에러가 발생하는 것으로 보임.

테스트로 해당 테이블 필드를 모두 '로 감싸고 실행 했더니, 정상적으로 실행됨.

필드명를 '(따옴표)로 감싸줄 필요가 있음.

--quote-names 추가.
mysqldump -u kim01 -pwjqthr01 --opt --quick --quote-names --all-databases > DB_ALL.sql

결론.
-  mysql 간의 이동이라면 --opt 옵션를 사용하자. 복구 시간이 엄청 단축된다.
- --quote-names 를 사용하자.

참조 : http://start.goodtime.co.kr/2013/03/mysqldump-sql-%ED%98%B8%ED%99%98%EC%84%B1-%EB%86%92%EC%9D%B4%EA%B8%B0/

pid 값으로 강제 종료 스크립트.

service mysqld stop으로 mysql이 죽지를 않는다.

pkill mysqld 도 안 먹는다.

killall mysqld 도 안 먹는 다.

kill -9 pid 로는 먹는다.

근데 전부 다 죽여줘야 한다.

스크립트를 찾았다. 역시 있었다.
#!/bin/bash

[ -z "$1" ] && echo "Usage : Input Process .......... Please [scriptFileName ProcessName]" && exit

process_id=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

if [ -z "$process_id" ];then
echo "+-------------------------------------------------------------+"
echo "Not Found Process (입력하신 프로세스를 찾지 못했습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
exit
else
process_id_number=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

for i in ${process_id_number} ;do
kill -9 $i &> /dev/null
printf "%-40s %-s\n" "$i PID Killed" "$(echo -ne "[ \\033[01;32m OK \\033[0m ]")"
done
sleep 2;
echo "+-------------------------------------------------------------+"
echo "Process Kill OK (프로세스가 강제적으로 종료 되었습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
fi

출처