Tag Archives: mysql

데이터베이스와 함께한 오전

뷁키백과는 데이터베이스 엔진으로 미디어위키를 쓴다. 그런데, 뷁키백과 데이터베이스를 흔드는 과정에서 미디어위키 데이터베이스에 너무 많은 글이 들어가서 글 개수 통계가 섞이는 등 만행이 일어났기 때문에 이런 특단의 조치로 전체 리비전을 지웠다.

  1. 우선 리비전을 지울 글을 클릭해서 “편집”을 누른다.
  2. 그 다음, 명령줄에서 "php -cli nukePages.php [페이지_제목]"을 입력한다.
  3. 다 되면 저장을 누른다.

그런데 이 과정에서 ㅅㄱㅎ 문서가 제대로 복구되지 않아서 옛 버전으로 남아있었다는 것을 망각했던 채

php -cli nukePages.php ㅅㄱㅎ

이 명령을… 때렸다! 처참한 결과만 남아서 울고 있었다. 위키백과의 특정 버전 삭제와는 다르게 이 명령은 데이터베이스 자체적으로 모든 것을 지우기 때문에, undo가 가능한 특정 버전 삭제와는 달리 동작은 한 방향이다. 이럴 때 쓸 수 있는 말이 OTL이지.
그러나 하늘이 무너져도 희망은 있는 법. 윈도우 서버 RWAPM이라는 것이 떠올라서 그 녀석을 통해서 전에 받아 두었던 DB 전체 백업을 다시 올렸다. 그리고 phpMyAdmin으로 들어가서 페이지를 찾아야 했다. 그렇지만 미디어위키의 너무 철저한 리비전 때문에 한 문서를 가르키는 테이블이 총 3종류 있다. 그 셋은 [prefix]_page, _text, _revision이다. 이제 이 세 테이블을 따라가 보자. [prefix] 값은 적절한 것을 찾으면 되고 여기서는 brw_이다.
우선, brw_page 테이블에서 page_title을 기준으로 ㅅㄱㅎ를 검색한다. 그러면 그에 대응하는 page_id와 page_latest 값을 찾을 수 있다. page_id 값과 page_latest 값을 기억한 다음, brw_revision에서 rev_id 기준으로 아까 찾은 값을 대입해서 검색한다. 그러면 rev_page 값과 page_id 값이 같으면 빙고라는 뜻을 이야기한다. 그 다음 brw_text로 간다.
그런데 이 녀석이 BLOB으로 기록되어 있다? 그래서 phpMyAdmin은 보여 주기를 거부하고 있다. 그것 때문에 MySQL을 직접 건드려도 봤으나 별 소득이 없었다. 그러다가 내 눈에 들어온 것이…

Export

였다! 즉, CSV 파일로 내보낸 다음에 검색하면 된다는 뜻이다. 이것을 몰라서 오늘 오전 내내 허공에다가 삽질하고 있었다. CSV 파일에서 검색은 page_latest 값을 기준으로 검색하면 내용이 나온다. 그러나, 다행히도 내용의 일부를 기억하고 있기 때문에 그것을 기준으로 검색을 해서 결국 문서를 살렸다.
오늘의 결론.

  • 백업과 복원을 생활화하자.
  • 무엇이든지 원리와 구조를 알고 논리적으로 접근하자.
  • 경희누나 미안.

결국 Drupal 포기

최근 KSA Ubuntu 서버를 Ubuntu 5.10->6.06.1로 업그레이드하면서 많은 것이 바뀌었다. 가장 크리티컬했던 것은 MySQL 5였다. 그런데 MySQL 4에서 물어 보지도 않고 그냥 5로 올려 버렸기 때문에 문자 인코딩 문제를 건너뛸 수 없었고, 결국에는 Drupal과 Mediawiki가 충돌하는 사태까지 벌어졌다.
게다가 Drupal 4.7의 로그인 버그는 이제 참고 쓰기에 심각한 수준이 되었으며, 옛날에 버렸던 태터툴즈가 GPL이라는 옷을 입고 다시 도착했기 때문에 TT로 복귀하는 데 대해서 미련이 없어졌다. 하지만 기존의 Drupal로 썼던 글들을 어떻게 처리하냐? 그 문제가 있었다. 단지 테이블의 헤더만 바꾸어 주면 된다. Drupal의 node_revisions 테이블에서 tt_Entries 테이블로 다음과 같이 처리해 주면 된다.
owner - 1
id - nid 값 사용
draft - 0
visibility - 2
category - 1
title - 그대로
slogan - title에서 공백을 하이픈으로 변경
content - body
location - /
password - 글을 테스트로 쓴 다음 거기서 추출
published - timestamp
created - timestamp
modified - timestamp

그 동안 정도 많이 들었던 Drupal이지만, 이렇게 떠나보낸다는 게 서운도 하다. 하지만 난 절대로 Drupal을 개인 블로그용으로 권장하고 싶지 않다. 호랑이를 토끼 우리 안에 집어넣고 키우는 꼴이라고 할까.