Category Archives: etc

mysql table이 깨졌을때 복구..

mysql을 써보긴 했어도 테이블이 깨진적은 없었는데………
물론 이번에도 내가 쓰는데서 문제가 된건 아니고.. 아는 동생이 물어봐서…검색을 해봤는데….아래와 같은 방법으로 해결이 가능하다고 하는데……..
막상 해보니 repair 명령을 실행하면….syntax가 올바르지 않는다는 헛소리만 지껄이고…
결국 myisamchk로 해결…..결론은 아래와 같이…..;;;;

%mysql inst dir%bin/myisamchk -r %mysql data path%/table_name

 

[출처] [MySQL Error]Table ‘problem_table’ is marked as crashed and should be repaired.|작성자 NaNNa

### 오류 메세지 ###
General SQL error.
[MySQL][ODBC 3.51 Driver][mysqld-5.0.21-community-nt]Table ‘problem_table’ is marked as crashed and should be repaired.

 

### 원 인 ###
테이블이 손상되는 증상은 아래와 같은 예기치 않는 문제로 인하여 발생됩니다.
– tbl_name.frm변경에 대한 락이 걸린 경우
– tbl_name.MYI(Errcode: nnn) 파일을 찾을 수 없는 경우
– 예상치 못한 파일 종료
– 저장 파일의 충돌
– table handler로 부터 오류 nnn을 받았을 때

자세한 내용은 MySQL 5.1 Reference Manual > 6.6.3 How to Repair MyISAM Tables 를 참조바랍니다.

 

### 해결 방법 ###
1. MySQL Query Browser 를 이용하여
1) 시작>프로그램>MySQL>MySQL Query Browser를 실행합니다.

2) MySQL Query Brower 로그인 화면에서 패스워드를 입력하고
로그인합니다.

3) MySQL Brower 메뉴의
“File>New Script Tab”을 실행하여
다음을 입력

analyze table problem_table;//해당 테이블의 보고서 작성
repair table problem_table;//해당 테이블의 복원 명령

 

4) MySQL Query Brower 오른쪽 상단의 “Execute” 버튼을 클릭합니다.

 

2. MySQL Command Line Client를 이용하여
1) 시작>프로그램>MySQL>MySQL Sever>MySQL Command Line Client를 실행합니다.

2) 패스워드를 입력하여 MySQL Command Line을 실행

3) mysql>use db명;//해당 데이터베이스 선택
mysql>analyze table problem_table;//해당 테이블의 보고서 작성
mysql>repair table problem_table;//해당 테이블의 복원 명령

 

위와 같은 방법으로 해결이 되지 않는 다면
MySQL 데이터베이스 서비스를 중지시키고
C:\Program Files\MySQL\MySQL Server\bin 폴더의 myisamchk.exe 실행 파일을 이용하여
myisamchk -r problem_table; 명령으로 복구 시도하시기 바랍니다.

 

eclipse 정규표현식을 이용한 문자열 일괄 치환

업무상 진행중인 프로젝트에서 기존에 작업했던 url을 /myxxx/ 에서 /mypage/로 일괄 변경해야 하는 이슈가 발생해서, 해결 과정을 정리함.

우선 이클립스에서 변경하고자 하는 프로젝트를 선택하고, ctrl + H 로  Search 창을 열어서.. File Search 탭으로 이동하고, 정규표현식을 이용할 것이니, regular expression을 체크한다.

그리고 Containing text에 찾고자 하는 문자열을 입력한다.
일단 현재 진행중인 프로젝트에서는 다음과 같은 경로들이 존재했다.

http://www.test.com/myxxx/test.do
http://www.test.com/myxxx/include/test.do
http://www.test.com/myxxx/popup/test.do

위의 문자열을 찾기 위해서 다음과 같은 정규표혀식을 이용하면 검색이 가능하다.

\ /myxxx\/[A-Za-z0-9._\/]*do
풀어보면 /를 문자열로 검색하기 위해서 \를 추가한거고…..
[ ] 안의 의미는 대문자 A-Z, 소문자 a-z, 숫자 0–9, 그리고 .(dot), _, / 가 포함된 경우이고….
위와같이 적어서 검색을 해보면……..원하는 패턴의 문자열을 찾을 수 있다.

예로 아래의 문자열에서 myxxx를 mypage로 변경하고자 할때 다음과 같은 방법으로 변경이 가능하다.

http://www.test.com/myxxx/include/popup_test/test.do

Containing text : (\ /)myxxx(\/[A-Za-z0-9._\/]*do)
()로 묶은 부분은 나중에 치환시 () 하나당 \1, \2로 대체할 수 있다.

위와같이 입력 후 Replace 버튼을 누르면 패턴에 해당하는 문자열을 먼저 검색하고…
변경할 문자열을 입력하는 창이 나오는데 여기서….
\1mypage\2 로 입력하는 경우……처음 검색대상 문자열에서 ()로 묶었던 부분은 그대로 두며, 가운데 myxxx 부분만 mypage로 변경이 가능하다.

말은 쉽고, 이론도 쉽고, 실천도 쉬웠지만…..언제 그러하듯 예상치 못한 패턴이 있기 마련인지라 추가적으로 약간의 노가다를 더해야 하는 번거로움이 있었으나…….
수천개에 달하는 링크 중에서 수십개 정도만 누락되다보니…….나머지는 그냥 수작업으로 고쳐서 해결….

처음부터 확실히 했어야 했는데, 중간에 url을 바꾸는건…위험부담이 좀 있는………..