정태영

mysql 이 4.0 에서 4.1, 5.0 으로 올라가는 과정에서 이전 버젼과 호환되지 않는 점이 몇 가지 생겨버려서 예전부터 업데이트를 미뤄왔는데… 이제 mysql 4.1, 5.0 버젼대도 충분히 안정화된 듯 싶고, 5.0 에서 새로 생긴 기능들을 써보고 싶은 욕심들이 생겨서 요번 방학이 가기 전에 업데이트를 하기로 마음을 먹었다.

우선 호환성에 문제가 되는 문제점은 크게 아래와 같이 2가지로 볼 수 있다.

  1. Password()
  2. password() 가 리턴하는 hashed string 의 길이가 길어졌다. 때문에 4.0 버젼에서 만들어진 hashed string 을 비밀번호로 사용하는 경우 old_password() 를 사용해서 비교해야 한다.

  3. Encoding
  4. 예전에는 시스템 전체가 하나의 특정한 인코딩 (default: latin1) 을 사용한다는 전제를 두고 동작했지만 이제는 System, Database, Table, Column, Client 에서 사용하는 Encoding 을 전부 따로 설정하는게 가능해졌다.

    물론 시스템 전체가 그냥 utf-8 이라던지 euc-kr 을 사용한다면 문제는 간단해지지만 상황은 그렇지 않다는 점이 문제!

우선 문제 상황을 체크해봐야겠기에 사용자 계정을 살짝 살펴봤다. 사용되고 있는 툴들은 zero board, wordpress, punbb, phpbb, soojung, mint, dansunboard(?) 정도였다. 다른 툴들은 md5 나 자체 hashing algorithm 을 사용해서 password 로 사용하고 있었기 때문에 mysql password 함수가 동작하는게 달라졌다고 해도 영향을 받지 않겠지만, zero board 의 경우엔 로그인이 안되는 문제가 발생할 듯…

Encoding 관련해서 mysql manual 을 열심히 읽어 보니 아래와 같이 정리할 수 있을 듯…

  • client 보낸 데이타를 server 는 character_set_client 라고 생각
  • client 가 보낸 데이타를 server 측에선 character_set_connection 으로 변환
  • server 에서 client 로 데이타를 보낼 때는 character_set_results 를 이용

간단하게 client 에서 받은 건 character_set_client 에서 character_set_connection 으로 변환되고, 변환된 데이타는 database, table, column 별로 설정해놓은 character set 으로 다시 변환되어 저장되며 server 에서 client 로 데이타가 전송될 때는 character_set_results 를 이용한다.

뭐하튼 위에 열거된 프로그램들 중 deute 님이 사용하시는 단순보드(?) 와 zero board 를 제외하고는 전부 UTF-8 을 사용하고 있는 듯 싶으니 별로 신경 쓸 일은 없을 듯 하고… 그건 default client, result, connection character set 을 UTF-8 로 세팅하게 되더라도 zero board 와 단순보드 말고는 아무 것도 문제를 일으키지 않는 다는 얘기!!! 그렇다면 zeroboard 의 password 비교 부분과 connect 패치하는 걸로 DB migration 이 한 방에 가능해질 듯…-_-v

우선 테스트를 해봐야 겠기에 Virtual PC 를 설치하고 unfix 와 비슷한 환경을 구축하려고 해봤는데 가상머신이 돌고 있는 윈도우를 리붓 시켜 버리는 문제가 발생!! 역시 가상머신 하면 vmware 인가보다. 빌드해놓은 건 아까우니 tar.gz 로 묶어서 vmware 로 옮기니 테스트 환경은 완성!

우선 환경은 갖춰 놨으니 금토일 살살살 테스트를 해보고 다들 자고 있을 시간이나 사용자가 적은 아침 에 mysql 을 5.0 대 최신 버젼으로 업그레이드 해야겠다! 꺄홋!

참고:
http://mysql.com/doc/refman/5.0/en/application-password-use.html
http://mysql.com/doc/refman/5.0/en/charset.html

p.s) 다들 제로보드 패치들을 하도 안하길래 직접 제로보드 버젼별로 다 받아서 diff 뜨고 패치까지 적용해놨음… 패치파일들 필요하신 분은 아래 URL 로 가시기 바랍니다~

흠 제로보드를 받아서 풀어보니 줄바꿈 관련해서 어떤건 DOS 형식이고 어떤건 unix 형식이길래 dos2unix 를 통해 전부 unix 형식으로 통일 시켜놓고 diff 를 뜬 거라 DOS 형식으로 올려놓은 분들은 패치하다가 실패할 수도 있습니다 -_-;; (old_password 와 encoding 설정하는 패치도 잘 찾아보면 있습니다.)

http://mytears.org/resources/tmp/

Tags: , , , , , , ,

This entry was posted on Friday, August 18th, 2006 at 3:24 am and is filed under Unfix. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

17 Responses to “mysql update…”

  1. 코카스 Says:

    그래서 debian은 old_passwords = 1 을 써놓더라고요. 아직 libmysqlclient12랑 연결된 패키지가 많아서.

  2. 정태영 Says:

    흠? 새로운 password 함수를 쓴다고 해도 이전에 mysqlclient 인터페이스를 사용할 수 없는 건 아니에요~

    문제는 제로보드 등에서 password 를 저장하기 위한 컬럼을 만들고 password(’user’s password’); 정도로 encryption 시켜서 저장시켜놨기 떄문에 새 password 함수를 사용하게 되면 old_password 로 encrypt 된 비밀번호들과 매칭을 시킬 수 없는게 문제거든요.

  3. kz Says:

    오히려 암호 쪽은 old_password라는 길로 돌아갈 수 있으니 낫습니다.

    문제는 인코딩입니다. 4.0까지는 없던 인코딩 개념이 4.1에 들어오면서, database.sarang.net에 수많은 질문을 만들어냈죠. 인코딩 문제 없이 조심스럽게 업그레이드해야 할 겁니다.

  4. 정태영 Says:

    흐흐 디비에 기본 charset 을 명시해주면 어느정도 피해갈 수 있을거라고 생각하고 있는데 흠흠 테스트를 해봐야할 거 같아요 ㅠ0ㅠ

  5. deute Says:

    단순보드는 인스톨이 안되어있을텐데=_=;

  6. RedBaron Says:

    귀찮더라도..인코딩은 하나하나 충분한 테스트 후에 하세요 =3

  7. 정태영 Says:

    뜨끔… 제가 그렇게 새심하질 않아서 ㅋㅋ 벌써 업데이트 끝내버렸습니다. 별 문제는 없는 듯 싶네요 ;)

    (오늘 제로보드만 10개를 패치한 것만 빼면 -_-;; 그나마 diff 떠서 했는데도 ^m 때문에 conflict 나는 경우가 많아서 아악 제로보드 이제 보기도 싫어요)

  8. Headvoy Says:

    이히

  9. badung Says:

    역시 태영옹 촉수 촉수 ~! 잘 지내요?

  10. kukie Says:

    버그신고~

    다른 부분들은 다 괜찮구~
    textpattern으로 만든 것들만 한글이 깨진당
    work.kukie.net이랑 일기장;
    work는 어차피 새로 정리해야하는 것들이라서 상관없는데
    일기장은 복구 안되면 대략 낭팬뎅 ;ㅁ; 둘러봐야겠당~ ㅋㅋ

  11. kukie Says:

    고생 했구나아~~~~~~;ㅁ;

  12. kukie Says:

    또 신고~
    그누보드에서 뭔가 스크립트 에러가 나는데 그것 때문인지 글 수정이나 삭제가 안되는 것 같아~

  13. 정태영 Says:

    흐흐 바둥옹 오랫만이에요~

  14. kukie Says:

    마지막 하나;
    board다 잘 되는데~ 관리자 아이디 로긴이 안대~ ;ㅁ;
    비번 다 틀렸대..ㅠ.ㅠ 뭘 고쳐야 할까?

  15. 정태영 Says:

    GNU board 도 mysql password 함수를 쓰네… 분명 mysql manual 에는 그런 용도로 쓰지 말라고 되있는데 -_-;;

    그래도 wrapping 이 되있어서 하나만 고치면 되길래 패치해놔따 ㅋㅋ

  16. kukie Says:

    다 잘된다~
    고마웡~ ㅎㅎ 태영이 천재 -_)b

  17. RedBaron Says:

    gnuboard4는 하나만 패치하면 되지만..3는..(5개)

Leave a Reply