3.0 upgrade시의 edge case
AuthSchemaIncompatible
상황
3.0 instance를 새로 셋업하면서 auth disable
db.adminCommand({copydb:1}) 을 사용하여 2.4 인스턴스에서 3.0 인스턴스로 데이터를 복사
auth enable로 설정을 변경하여 3.0 재기동
'Old 2.4 style user index identified' 에러와 함께 서버가 종료됨
원인
3.0.4 소스코드에서 확인했을 때 데이터베이스에 system.users 컬렉션이 있으면 오류가 발생함. wiredTiger 엔진은 컬렉션 이름 대신 내부 번호로 데이터 파일 이름을 붙이므로 mmap 때처럼 오류가 있는 컬렉션 데이터 파일만 삭제하는 임시 방법을 쓸 수 없음. 서버를 띄우지 못하면 아무런 해결 방법이 없음.
workaround
다음과 같이 복사 후에 바로 system.users 컬렉션의 이름을 변경한다. system.users 컬렉션은 system namespace이므로 바로 삭제할 수 없음.
db.getMongo().getDBNames().forEach(function(n) { db.getSisterDB(n).getCollection('system.users').renameCollection('_users'); });
node-mongodb-native 인증 버그
상황
node.js version 0.8
mongoose 3.8.25 (node-mongodb-native 1.4.32)
mongodb 3.0.4 w/ SCRAM-SHA-1 enabled (authSchema v.5)
에서 DB 접속에 실패함.
원인
node-mongodb-native driver 버그. (NODE-382 & NODE-459) changelog에 따르면 버전 1.4.36에서 문제가 수정되었으며, 관련 커밋 로그는 여기에서 볼 수 있음.
mongoose 최신 버전(3.8.32)도 native driver 1.4.33을 쓰므로 영향을 받는다.
workaround
node.js 0.10.x에서는 문제가 발생하지 않는다
mongoose 4.0.x를 사용한다
mongodb 구 버전을 사용한다 (2.4 or 2.6)
SCRAM-SHA-1 대신 MONGODB-CR 인증을 사용한다












