¶缘起
为了解决使用Arctic[1] MongoDB的日志里出现
1 | SASL SCRAM-SHA-1 authentication failed for myAdminUser on admin from client 192.168.3.100:9560 ; UserNotFound: Could not find user "myAdminUser" for db "admin" |
错误的问题,参考了数个连接(包括StackOverflow[2]),都提示要将authSchema.currentVersion
从5
改成3
。照做以后就杯具了,mongod
服务完全打不开了,提示错误
1 | This server is using MONGODB-CR, an authentication mechanism which has been removed from MongoDB 4.0. In order to upgrade the auth schema, first downgrade MongoDB binaries to version 3.6 and then run the authSchemaUpgrade command. See http://dochub.mongodb.org/core/3.0-upgrade-to-scram-sha-1 |
原因是我的MongoDB server是4.2版本,authSchema.currentVersion=3
代表MONGODB-CR的认证方式,4.0以上的Mongo Server已经不再支持了。
所以,尽量不要更改数据库里的配置,一定需要改的话,改之前一定要备份。
¶解决
¶失败尝试一
按照日志里的提示,将MongoDB服务的版本降低到3.6,同样无法启动,提示WeirdTiger格式不兼容。顿时感觉天昏地暗,前一个备份已经两周多了,完全不想重新恢复这两周的所有数据。
¶灵机一动的尝试二
想到我按照的修改既然是存在数据库里的,那么必然改了某个数据库的磁盘文件。那么这个文件的修改日期一定是所有数据库数据文件中最新的。于是赶紧cd
去数据库文件在磁盘里的目录,ls -lnt
找到最后修改的文件是这个collection-0-5610079802494816593.wt
。
用vim打卡,:%!xxd
切换到二进制模式,搜索authSchema
,果然找到了
1 | 00005070: 6400 0b00 0000 6175 7468 5363 6865 6d61 d.....authSchema |
赶紧把currentVersion
后边的0003改成0005。再次重启mongod
。发现日志还是报错
1 | wiredTiger Error: collection-*.wt does not appear to be a WiredTiger file |
并提示可以加--repair
参数尝试修复,于是执行
1 | mongod --noauth --dbpath /mongodb/data/ --repair |
成功结束后再次启动mongod服务
1 | systemctl start mongod |
成功~~