루비 mysql2 젬 MySQL 5.7에서 사용하기

최근 rorlab.org  홈페이지 이전중 DB를 MySQL 5.7로 업그레이드 하면서 겪었던 문제입니다

MySQL 5.7로 업그레이드 하고 레일스 콘솔이나 asset precompile 등을 하다보면 다음과 같은 에러가 발생합니다.

NameError: uninitialized constant Mysql2::Client::SECURE_CONNECTION

이 에러는 MySQL 5.7 에서 무언가 기능이 빠지면서 발생하는 문제였습니다. 해결방법은 간단하게도 최신버전의 mysql2 gem을 사용하는것입니다.

bundle update mysql2 
혹은 
gem update mysql2

위의 두 명령어중 본인의 상황에 맞게 실행하면 됩니다. 아마 대부분 bundler를 사용할테니 첫번째 명령어를 사용하게 될겁니다.

rorlab.org에서 사용하던 mysql2 젬의 버전은 0.3.16 이었고 업데이트 후에는 0.4.2 였습니다.

그런데 여기서 다시 서버를 시작하거나 콘솔을 시작하면 생뚱 맞은 에러가 발생합니다.

Gem::LoadError Specified 'mysql2' for database adapter, but the gem is not loaded. 
Add `gem 'mysql2'` to your Gemfile

Gemfile에 mysql2 젬이 없다네요. 어 분명히 넣었으니까 아까 에러도 났는데? 이상하죠. 이는 ActiveRecord를 사용하는 경우 mysql2 최신 젬버전과 호환이 되지 않기 때문에 발생하는 에러입니다. Gemfile을 열고 다음과 같이 변경합니다.

gem 'mysql2', '~> 0.3.18'

mysql2 최신 버전인 0.4 를 사용하지 않도록 하는게 핵심입니다. 수정후 bundle update 하거나 bundle install 합니다.

이제는 문제가 없을겁니다 ^^

MySQL 5.7은 마이너 버전번호가 바뀐것 치고는 어플리케이션들에 영향이 좀 있는것 같습니다.

추가로 꿀팁 : MySQL 5.7을 직접 설치 하신다면 MySQL 5.7 부터는 최초 설치시 root 패스워드가 랜덤생성되고 /var/log/mysqld.log에 적혀 있으니 참고하시기 바랍니다. 예전에는 루트 비밀번호가 없어서 바로 접속해서 설정했는데 이거 안되서 고생했습니다. 공식 문서에서도 언급이 안되어 있었거든요. 관련해서 제가 올린 트윗 . 그런데 생각해보면 요즘 누가 직접 MySQL 설치 하겠어요? 다들 RDS 같은거 쓰고 PostgreSQL 쓰는거 아닌가요? ㅎㅎㅎ 농담반 진담반이에요

참고링크

게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.