mysql4.1은 4.0에 비하여 user, db 테이블의 컬럼에 collate utf8_bin, character set utf8 옵션등이 추가가 되었다.
따라서 그냥 데이타베이스 디렉토리를 옮기고 실행할 수가 없다. 실행하면 character sete에 관련된 오류가 발생하고 바로 mysql이 죽는다.
# 오류 내용060626 10:32:07 [Warning] './mysql/host' had no or invalid character set, and default character set is multi-byte, so character column sizes may have changed
060626 10:32:07 [Warning] './mysql/user' had no or invalid character set, and default character set is multi-byte, so character column sizes may have changed
060626 10:32:07 [Warning] './mysql/db' had no or invalid character set, and default character set is multi-byte, so character column sizes may have changed
060626 10:32:07 [ERROR] Fatal error: mysql.user table is damaged or in unsupported 3.20 format.
060626 10:32:07 mysqld ended
그리고 user의 password 컬럼의 사이즈도 기존 16에서 41로 늘어났다.
이로 인해
/etc/my.cnf에
[mysqld]set-variable = old_password=1 위의 변수를 설정해줘야 한다.
따라서 디비마다 덤프를 받아서 import를 시켜줘야 한다. 작업 순서는 아래와 같다.
1. 기존 운영중인 4.0.x 의 mysql 데이타베이스를 덤프 받는다.# mysqldump -uroot -p mysql > mysql.sql
다음으로 mysql.sql파일을 열어서 user, db 테이블만 나누고 모든 라인을 삭제한다. 그리고 user, db 테이블 생성하는 것 구문도 없앤다. 마지막으로 남는 것은 user, db에 관련된 insert문만 남을 것이다. user의 insert문중 user컬럼중 root에 관련된 라인도 삭제한다. 이미 등록이 되어 있으므로...
2. mysql4.0.x의 전체 데이타베이스를 덤프를 받는다.# mysqldump -uroot -pmysql --all-databases > database.dmp
파일을 열어서 mysql 및 test 데이타베이스와 관련된 테이블 생성 및 insert구문은 삭제한다. 이미 생성되어 있으므로..
3. mysql.dmp의 가장 상단에는
set foreign_key_checks=0;하단에는
set foreign_key_checks=1;옵션을 넣어준다. 이유는 이것을 하지 않을 경우 foreign key constraints옵션이 있는 테이블을 생성할 경우 foreign key를 체크하기때문에 foregin key 를 참조하는 테이블이 없으면 오류가 발생하고 중단된다.
따라서 이 옵션은 foreign key를 체크하지 않겠다는 것이다. 마지막은 원래대로 돌려놓는 것이다.
4. 기존 mysql4.0으로 운영중인것을 중지하고 mysql4.1대로 가동한다.(참고 : /etc/my.cnf에서 default-character-set=euc_kr인것을 euckr로 변경해준다.)
5. 위의 mysql.sql, database.dmp를 각각 import시킨다.6. 그리고 홈페이지에서 디비 접속이 제대로 되고 있는지 확인한다.마지막으로 innodb는 mysqldump에 모두 들어가 있으므로 혹시라도 ibdata관련 파일을 복사하지 않도록 한다.
--------------------------------------------------------------------------------------
음 ... 어제하고 오늘 글 나눠서 올릴라고 했는데 너무 몰아서 올리네 ㄱ- ㅋㅋㅋㅋㅋ 이해해주세요 ~
이번에 알려드릴꺼는 MySQL 5.X버전대의 악조건 바로 패스워드입니다.
아시는분은 아시겠지만 MySQL 4.X버전대에서 5.X버전대로 옴겨오면서
패스워드방식이 바뀐걸로 압니다. 그래서 5.X버전대에서 4.x버전대를 요구하는 경우도 종종생기게되죠.
오류문 : Client does not support authentication protocol requested by server; consider upgrading MySQL client
이 문제를 해결할 방법은 두가지 입니다. 하나는 사용하시는 root 패스워드를 올드패스워드로 바꿔주는것이고
하나는 MySQL 버전을 다운그레이드하는 방법이 있습니다.
여기서 저는 첫번째 방법을 설명하도록 하겠사옵니다~
오토셋 화면에서 파일 - MySQL 콘솔창 을 클릭 해줍니다.
하셧다면 mysql> 이런상태로 명령프롬프트창이 뜰탠데요. 그상태에서
mysql>SET PASSWORD FOR 엔터
->'root'@'localhost' = OLD_PASSWORD('사용하시던비밀번호'); 엔터
이렇게 해주시면 오류없이 잘됩니다. 그리고 마무리로 mysql>FLUSH PRIVILEGES; 엔터 입력해주는 센스
다음으로
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('사용하시던비밀번호') 엔터
-> WHERE Host = 'localhost' AND User = 'root'; 엔터
mysql> FLUSH PRIVILEGES; 엔터
위대로 실행합니다. ^^
마지막으로 exit 로 콘솔을 꺼주는 센수~
이제부터가 좀 힘들어지는데 ; ^^ 잘따라오세염 ~
MySQL을 꺼줍니다. (중요)
시작-실행-cmd 로 명령프롬프트를 실행하셔서
C:\AutoSet\Server\mysql\bin 폴더로 이동시켜줍니다.
----------방법1-----------
명령프롬프트를 켜시면 C:\Documents and Settings\Administrator> 이렇게 되어있으실탠데요.
C:\로 옴기시려면 C:\Documents and Settings\Administrator>cd .. 엔터
C:\Documents and Settings\>cd .. 엔터 이렇게 하시면
C:\> 이렇게 바뀝니다 . 이상태에서
C:\cd AutoSet\Server\mysql\bin 엔터 이렇게 해주시면 C:\AutoSet\Server\mysql\bin> 폴더로 잡히게 됩니다 ^^
-----------------------------
그리고 MySQL실행 옵션을 설정해서 MySQL를 실행시킵니다.
C:\AutoSet\Server\mysql\bin>mysqld-max-nt.exe --old-password 엔터
이렇게 하시면 키보드커서가
C:\AutoSet\Server\mysql\bin>mysqld-max-nt.exe --old-password
| 이렇게 깜빡이게 됩니다. 이렇게 하셧다면 성공! CMD창을 꺼주시구요.
다시 방법1대로 하셔서 C:\AutoSet\Server\mysql\bin> 이쪽폴더로 옵니다.
이제는 간단하게 mysql -uroot -p사용하시던비밀번호 엔터 하시면
아까 보셧던 콘솔창처럼 됩니다. (여기서오토셋에서콘솔창키면되지하시는데!안됩니다.저를따라오세염 ~)
mysql> SELECT localhost, root, 사용하시던패스워드 FROM mysql.user 엔터
-> WHERE LENGTH(사용하시던패스워드) > 16; 엔터
이렇게 하셔서 오류가 없으시다면 성공입니다 ^^
이제부터 root는 올드패스워드를 사용하게됩니다. 사용하시는데에 이상은 없을꺼같구요.
5.X버전대에서는 올드패스워드를 한개만 지원하는거 같더군요.
4.X버전대에서는 무한개 가능하던데 ㅠㅠ 아무튼 이글보시구 모두들 오류없으시길 ~