mysql workbench 사용해서 관리하려는데 Can't connect to MySQL server on '서버IP or 도메인' (10061) 이렇게 10061 에러가 발생하는 경우가 있다.
이는 mysql 설정에서 외부접속 가능한 주소를 지정해주지 않아서 발생한다.
ubuntu 에서 apt-get 으로 설치를 한 경우엔 /etc/mysql/my.cnf 파일을 열어서 bind-address 항목을 찾아 적절히 수정해주자. 윈도우의 경우에는 설치폴더 내에 my.ini파일로 존재하는 경우도 있다고 하니 참고.

수정 후엔 서비스 재시작 하는것을 절대 잊지말것. 

License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License

Missing Database Connection
Error: Mysql requires a database connection

Error: Confirm you have created the file : app/Config/database.php.

Notice: If you want to customize this error message, create app/View/Errors/missing_connection.ctp.

Stack Trace

#0 /home/widyou/www/blog/lib/Cake/Model/ConnectionManager.php(101): DboSource->__construct(Array)
#1 /home/widyou/www/blog/lib/Cake/Model/Model.php(3241): ConnectionManager::getDataSource('default')
#2 /home/widyou/www/blog/lib/Cake/Model/Model.php(1030): Model->setDataSource('default')
#3 /home/widyou/www/blog/lib/Cake/Model/Model.php(3265): Model->setSource('posts')
#4 /home/widyou/www/blog/lib/Cake/Model/Model.php(2483): Model->getDataSource()
#5 /home/widyou/www/blog/app/Controller/PostsController.php(7): Model->find('all')
#6 [internal function]: PostsController->index()
#7 /home/widyou/www/blog/lib/Cake/Controller/Controller.php(473): ReflectionMethod->invokeArgs(Object(PostsController), Array)
#8 /home/widyou/www/blog/lib/Cake/Routing/Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))
#9 /home/widyou/www/blog/lib/Cake/Routing/Dispatcher.php(86): Dispatcher->_invoke(Object(PostsController), Object(CakeRequest), Object(CakeResponse))
#10 /home/widyou/www/blog/app/webroot/index.php(96): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#11 {main}



 
php를 세팅한 후 Cakephp 예제를 따라하는데 위와같이 아주 이쁘고 사람 미치게하는 에러가 계속해서 발생했다.
아무리 포럼을 뒤져보고 해도 해결되지 않는 문제. 저 문제가 나는 경우가 매우 극소수인듯 한데다가 가끔 달린 답변글은 암호가 다르거나 어쩌구저쩌구..
이것떄문에 하루를 버리다가 끄트머리에서 cakephp도 로그를 남기겠지 하고 로그를 뒤져보았다.
로그는 app/tmp/logs/error.log 에 위치해있었다.
아래로 쭉 내려보니 원인을 추정할 수있는 단서를 찾을 수 있었다.

2012-03-01 23:09:05 Error: [MissingConnectionException] Database connection     "Mysql" is missing, or could not be created.



아니 이게 무슨소리야! mysql연결에 쓰는 객체 자체가 없다니!
cakephp가 곶아라니!
저 에러로 검색을 해보니 cakephp는 pdo라는걸 이용해 db에 연결한다는 걸 알아냈다.
내 php에는 모듈이 하나도 없었으니 혹시나 하는 마음에 php 소스디렉토리에 가서 ext에 pdo로 시작하는 디렉토리를 찾아보니 떡하니 나오는 pdo_mysql...

속으로 온갖 욕을 하며 이전글처럼 모듈을 따로 빌드해다가 php에 넣었더니 무슨일 있었냐는 듯이 잘 연결된다.
으으 그래도 로그에서 저 한줄 찾은게 실마리가 되어서 다행이다.
오늘안에 못돌리면 포기하려고 했는데. 휴~

내일은 튜토리얼대로 간단한거 하나 만들어보고 내가만든 네모로직게임 자바스크립트 라이브러리로 사이드 하나 만들어본 후 잘 돌아가면 가상서버호스팅까지 해봐야겠다.

가상서버호스팅 대비해서 서버도 vmware는 최소화해놓고 후 모든 작업은 putty로 ssh콘솔 열어서 작업하고 있다.
영어채팅이 점점 빨라지는 기분이야!

아무튼 이런 삽질은 나만 하자는 마음으로 기록을 공유해본다.

계속 삽질하니 점점 apache와 php에 대해 알아가고 있는 느낌이 들어 좋다. 

License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License
테이블 하나가 자꾸 수정이 안되고 sql 에서발생.
hibernate 문제인가 아무리봐도 아님.
결국 log4j 설정하고 로그에서 업데이트시 생성되는 쿼리 캐치
(hibernate.cfg.xml에서 show_sql 프로퍼티를 1로 줌
<property name="show_sql">1</property>)

얻은 sql쿼리를 직접 실행.
역시 에러

한줄한줄 지웠다 살리면서 에러범위를 좁혀보니
exists = 1이라는 부분에서 에러
exists는 boolean저장을 위해 tinyint(1) 타입의 컬럼
다른 tinyint(1) 가진 테이블은 문제 없음.
혹시나하고 exists 컬럼명을 exist로 변경
에러없이 성공 lol

아오 슈ㅣ발 미친 exists가 예약어일줄이야
그동안 괸히 옆에있는 double타입 컬럼만 의심하고있었다.
이걸로 날린 내 6시간을 어쩔꺼야 ㅠㅠ

흠 근데 포스팅하면서 생각해보니 옛날 군대에서 쿼리문 작성할때 몇번 본거같기도 하고..

아무튼 오늘의 교훈:
hibernate를 쓸땐 꼭 log4j를 함께돌려서 에러시의 쿼리를 캐치하자.
syntax highlight 되는 쿼리편집기를 사용하자. 예약어따위 친절하게 볼드표시해주신다.




License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License
  1. chery 2008.07.03 17:32 신고

    mysql에서 키워드랑 필드명이랑 동일할때 구분지을 수 있는게 있어요 한번 해당 컬럼을 ` ` 묶어서 해보세요 그럼 될거 같은데용 ' ' 게 아니고 키보드 숫자 1 왼쪽에 있는 ` 입니다

    • Widyou 2008.07.08 15:16 신고

      오 몰랐던 팁이네요
      하지만 hibernate를 통해 동적으로 생성되는 sql이라 어절수 없었어요

사용자가 들어갈 DB 테이블을 만드는데 row생성시 생성시간을 자동으로 넣고싶었다.
그런데 mysql은 컬럼의 디폴트값에 함수를 넣을 수 없어서 current_date(), now() 따위를 디폴트로 써줄 수가 없다.
사용자를 생성하는 함수쪽에서 직접 날짜를 지정해줘도 되지만 좋은 방법을 찾았다.
timestamp 타입을 사용하면 null일경우 현재시간, 날짜를 자동으로 넣어준다.

해결~


License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License

얼마전 홈페이지를 게속 만들다가 문득 생각난게 있었다.
대부분의 호스팅은 MySQL이 기본인데 내 개발환경은 Oracle..
그래서 이참에 MySQL을 써보기로 하고 MySQL 5.0.x 압축된 설치파일 없는 윈도우버전을 받았다.
Oracle이나 MySQL이나 별거 있겠어 라는 생각을 사실 하고 있었다.


일단 데몬 켜고끄고 아이디생성하고 권한주고 db만들고 table만들고..등등을 익히는데 하루를 썼다..
군인이라 일할때밖에 공부할 시간이 없다.
그리고 다음날 test로 쓸 데이터들을 넣었다...
그런데 이게 왠일.... 한글이 깨진다...
UTF-8로 만들고 있던 난 한글이 안되는걸 보고 당황했다..
어떻하지..
이때부터 검색과의 싸움이 시작되면서 환경을 UTF-8로 만드는 작업에 들어갔다.
2일동안 씨름한 후 퇴근하기 30분 쯤 전에 난 DB 환경을 완벽하게 UTF-8로 전환하는 데 성공했고,
다시 개발에 힘을 쏟을 수 있게 되었다.

결국 날린시간은 3일....

아까운 시간이긴 하지만 MySQL을 쓰는데 조금은 익숙해진 거 같다.
다음은 AJAX와의 싸움인가...



License
달리 정하지 않는 한, 이 저작물 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Korea License

+ Recent posts