프로그래밍 언어는 python을 이용하고 웹 프레임워크는 Django 를 사용하고, 데이타베이스로는 MySQL 을 사용중인데 admin 사이트 구현중에

date_hierarchy = 'created_at'

이 구문 때문에

Database returned an invalid value in QuerySet.dates(). Are time zone definitions and pytz installed?

이런 에러가 발생한다.

해결을 위해서는 일단 pytz 를 설치해줘야 한다.

$ pip install pytz

그리고 우분투에 설치된 mysql 에 한하여 (docker 로 설치한 mysql 도 괜찮다, 테스트 해보니 osx 도 된다)

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p  mysql

하고 데이타베이스를 재시작 하면 된다. docker 데이타베이스는 설정을 바꾸면 재시작이 안되니 조심해야 한다. 원격 데이타베이스에 관해서는 (Google App Engine 의 Cloud SQL 도 가능하다)

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p  -h $REMOTE_SERVER mysql

osx 에서 docker container 로 mysql 을 띄웠을 때, DB container 에 접속이 안되는 문제

$ docker run --name db -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

입력하면 mysql container 가 db 라는 이름으로 만들어져서 동작한다.

$ docker exec -it db bash

명령으로 들어가 보면 root prompt 가 떠서 여러가지 동작을 할 수 있게 된다.

# mysql -uroot -p

접속해서 테이블이나 데이타베이스도 만들 수 있다.

그 뒤에 'OSX 터미널'에서 다음과 같이 명령을 치면

$ mysql -uroot -h192.168.99.100 -p

(192.18.99.100 은 osx 에 깔린 docker-machine 의 ip 다. 보통 상황마다 다르니 꼭 확인하자)

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.99.100' (61)

위와 같은 에러가 발생한다. OSX 에서는 docker-machine 에서 도커를 띄우기 때문에 포트를 연결시켜서 띄워줘야 한다. 즉

$ docker run --name db -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql

포트 연결시켜주는 커맨드를 필수로 띄워줘야 한다.

MySQL 이 오라클 손에 넘어가고 부터 걱정한 사람들이 많았는데 MySQL 을 개발했던 담당자들도 걱정이 많았나 봅니다. MySQL 이 5.5.30 부터 변화가 없던 것을 우려해서 만들었다고 하는데요. (결국 그 우려는 현실로 드러났지요 http://goo.gl/a7AOs )

그것은 바로 마리아디비  (https://mariadb.org/ )입니다.  MySQL 하고 현재 100% 호환이라고 합니다. 즉 MySQL 서버대신 마리아디비로 바꿔버려도 그대로 동작한다고 합니다. (심지어 인스토 파일 이름도 install_mysql 어쩌구 입니다 ㅎㅎ) 

오라클이 하는 짓이 짜증나신다면 한번쯤 생각해볼만한 대안이라고 볼 수 있습니다.
 

MySQL 5.5.31 버젼에서 라이센스 변화가 아무도 모르게(?) 살짝 진행됐나 보네요. 

기존 MAN Page

This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.

바뀐 Man Page

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

음.. 이제 대세는 PostgreSQL 이 될려나요? 

만약 이게 의도적이라면, 오라클은 기존의 FSF 재단이 운영하던 MySQL 의 모든 소스를 훔친거나 다름 없습니다. MySQL 은 거기에 고용된 개발자 뿐만 아니라 오픈소스 프로젝트로 참여하고 있던 사람들의 소스도 포함됐기 때문입니다. 

참조 블로그: https://blog.mariadb.org/mysql-man-pages-silently-relicensed-away-from-gpl/
osx snow leopard (10.6) 에 mysql 64bit 5.5.8 버젼을 설치하는 방법을 설명합니다. 

빌어먹을 osx 스노우 레오파드 (snow leopard) 에는 mysql 도 제대로 설치가 되지 않습니다. 물론 이건  mysql 측에서 제대로 만들어 줘야 하는 문제인거 같기는 하지만 짜증나는건 마찬가지입니다. 
   

위 사이트에서 "Mac OS X ver. 10.6 (X86 , 64-bit), DMG Archive" 를 받아서 설치해 줍니다. 그리고 
  
mysql -uroot 

 하면 아무일도 안 일어날 것입니다. 그래서 조금의 삽질 끝에 설치하는 법을 알아냈습니다. 

    * 참조 사이트 를 참조했습니다. 


   1. ~/.bash_profile 파일을 에디터로 열어서 다음과 같이 추가한다.     

      export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH

   2. 그리고 .bash_profile 파일을 다시 인식시킨다.  Terminal 콘솔 창에서 다음과 같은 명령을 실행한다. 

      source ~/.bash_profile

   3. 제대로 설정됐는지 확인해본다 역시 터미널 창에서 
      
      echo $PATH

      /usr/local/bin 이 앞에 출력되면 된다. 

   4. 다음 파일을 다운 받는다. 

      com.mysql.mysqld.plist (내 블로그에 링크되어 있다)
      
      아니면 

      curl -O http://hivelogic.com/downloads/com.mysql.mysqld.plist

      로 다운 받는다. 

   5. 데몬 관리 부분에 넣어두고 owner 를 루트로 바꾸어 준다. 

      sudo cp com.mysql.mysqld.plist /Library/LaunchDaemons/
     sudo chown root /Library/LaunchDaemons/com.mysql.mysqld.plist

   6. 띄우기 (스크립트로 만들어 두면 좋습니다) 역시 터미널 창입니다. 

      sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist

      테스트를 해보기로 합니다. 

      mysql -uroot 

      ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

      이런식으로 나오면 곤란합니다. 

      - /tmp/mysql.sock 에러 발생 해결하기 
100% 권한 (Permission) 문제입니다. 

sudo chown user_id /tmp/mysql.sock 

해주면 됩니다. (user_id 는 자기 아이디)
   

   7. 중지 시키기 
      
      sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist


이제 편하게 사용하시면 됩니다. 


책에서 나온대로 레일즈 프로젝트 따라하기 중인데 

depot> rake db:migrate 

명령을 치라는 부분을 치니, gem 에 mysql 이 기본으로 포함이 안되어 있다는 메시지가 발생 하더군요. 
시키는 대로 해도 몇몇 에러가 발생하더군요. 이래저래 돌아다니면서 알아보니 

처음에 발생한 에러 메시지 입니다. 

(in /Users/crazia/Documents/workspace/rails/depot)
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
no such file to load -- mysql

그래서 

gem install mysql 

라고 입력했습니다. 

crazia$ gem install mysql
WARNING:  Installing to ~/.gem since /Library/Ruby/Gems/1.8 and
 /usr/bin aren't both writable.
WARNING:  You don't have /Users/crazia/.gem/ruby/1.8/bin in your PATH,
 gem executables will not run.
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
ERROR: Failed to build gem native extension.

이런 에러가 발생하더군요. 

그래서 ~/.bash_profile 에 

export PATH=$PATH:/opt/local/bin:/opt/local/sbin:/usr/local/mysql/lib:~/.gem/ruby/1.8/bin

추가해줬습니다. 그리고 다시  gem install mysql 을 실행 

 gem install mysql
Password:
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
ERROR: Failed to build gem native extension.

다시 에러 입니다. 잠깐의 구글링을 통해서 헤더랑 라이브러리를 지정해줘야 하는것 같더군요. 

gem install mysql -- --with-mysql-include=/usr/local/mysql/include/mysql --with-mysql-lib=/usr/local/mysql/lib --with-mysql-config=/usr/local/mysql/bin/mysql_config 

이런식으로 입력하니 다시 에러 찾아보니 스노우레오파드의 아키텍쳐를 명시해줘야 한다고 합니다. 

env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-include=/usr/local/mysql/include/mysql --with-mysql-lib=/usr/local/mysql/lib --with-mysql-config=/usr/local/mysql/bin/mysql_config 

이렇게 등록해 주면 됩니다. mysql 은 스노우레오파드에 디폴트로 포함되어 있는 버젼입니다. 

그리고 다시  rake db:migrate 

crazia$ rake db:migrate
(in /Users/crazia/Documents/workspace/rails/depot)

성공!! 즐겁게 레일즈 코딩하세요 ~








+ Recent posts