如何通过命令行修改H2 Database密码 无需登录H2 Console
无需登录H2 Console修改H2 Database密码的可行方案
不用登H2 Web控制台就能改H2数据库密码的方法是有的,最稳妥通用的就是直接用H2自带的命令行工具操作,全程不需要启动或者登录H2 Console。
注意:操作前一定要先关掉所有占用目标H2数据库文件的程序、服务,不然会触发数据库锁报错,操作根本跑不通。
命令行修改密码具体操作
按你记不记得原来的数据库密码,分两种情况处理:
记得原管理员密码的情况
直接调用H2 jar包内置的Shell工具跑改密码的SQL就行,1.x和2.x大版本的操作逻辑一致,只要替换成你本地对应版本的jar包路径就可以:
- 先找到本地存的H2驱动jar包,一般命名是
h2-<版本号>.jar,比如1.4.200版本就是h2-1.4.200.jar,2.2.224版本就是h2-2.2.224.jar,记好这个jar包的完整本地路径。 - 打开系统命令行(Windows用cmd或者PowerShell,Linux/macOS直接开系统终端),执行对应命令:
H2 1.x版本:
H2 2.x版本:java -cp /你本地的jar包存放路径/h2-1.4.200.jar org.h2.tools.Shell -url "jdbc:h2:file:/你的数据库文件放的路径/数据库名;IFEXISTS=TRUE" -user 原数据库用户名 -password 原密码 -sql "ALTER USER 原数据库用户名 SET PASSWORD '你要设置的新密码'"java -cp /你本地的jar包存放路径/h2-2.2.224.jar org.h2.tools.Shell -url "jdbc:h2:file:/你的数据库文件放的路径/数据库名;IFEXISTS=TRUE" -user 原数据库用户名 -password 原密码 -sql "ALTER USER 原数据库用户名 SET PASSWORD '你要设置的新密码'" - 命令跑完没抛错就是改成功了,后面用新密码连库验证就行。
忘记原密码,没法直接跑SQL改的情况
这种情况可以用H2自带的恢复工具把全量数据导成SQL脚本,删了旧库之后用新密码建空库,再把脚本导回去就行,整个过程也不需要登H2 Console:
- 还是先找到本地的H2 jar包路径,执行导出命令,把库里所有数据导成SQL脚本:
java -cp /你本地的jar包存放路径/h2-<对应版本号>.jar org.h2.tools.Recover -dir /数据库文件所在的文件夹路径 -db 你的数据库文件名(不要带.mv.db后缀) - 命令跑完,会在数据库文件同目录生成一个和数据库同名的
.sql脚本。这步一定要先把原数据库所有同前缀的文件(.mv.db、.trace.db这些)备份到别的文件夹,别搞丢数据,备份完再把原目录里的这些旧库文件删掉。 - 执行导入命令,指定新密码创建新库,同时把之前导出的全量数据导进去:
java -cp /你本地的jar包存放路径/h2-<对应版本号>.jar org.h2.tools.Shell -url "jdbc:h2:file:/你的数据库文件放的路径/数据库名" -user 原数据库用户名 -password 你要设置的新密码 -sql "RUNSCRIPT FROM '/数据库文件所在目录/刚才导出的sql文件名.sql'" - 命令跑完就完事了,新密码可以直接连,原来的数据也都在。
补充:如果你用的是内存模式的H2库,本来数据就会跟着进程关了清空,直接重启对应进程的时候在JDBC连接参数里写新密码就行,不用额外改。Windows系统跑命令的时候如果路径带反斜杠,直接换成正斜杠就不会有转义问题。
内容的提问来源于stack exchange,提问作者Prabhashi
相关产品推荐
相关产品推荐

