数据备份和迁移
H2数据库虽然是嵌入式数据库,但数据的备份与迁移仍然是不可忽视的运维环节。直接拷贝H2的数据文件看起来方便,但实际操作上几乎是不可行的,不同版本的H2数据库使用的数据文件格式可能不同,跨版本直接复制文件可能导致数据库无法正常读取,而且如果数据库在运行中直接拷贝文件也可能拷贝到不一致的数据状态。因此,H2官方推荐通过SQL脚本的方式进行数据导入导出,这也是最通用、最安全的做法。之前我们下载的H2数据库包中除了H2控制台还有一些工具程序,其中包括数据导出导入脚本,这篇笔记我们简单介绍其用法。
SQL导入导出
H2提供了两条专用于数据导入导出的SQL命令SCRIPT和RUNSCRIPT,我们可以直接在H2控制台的SQL执行窗口中运行它们。如果是在SpringBoot项目中集成了H2控制台,启动应用后访问/h2-console路径即可打开,具体配置方式可以参考上一篇笔记。如果是通过H2发行包启动的独立控制台,直接在界面中连接数据库后操作即可。
SCRIPT TO命令会将当前数据库中所有的DDL结构(建表语句)和数据(INSERT语句)导出为一个完整的SQL文件。
SCRIPT TO 'E:/backup.sql'
导出的SQL文件是纯文本格式的标准SQL语句,这种方式导出的脚本不仅便于查看和审计,也是跨版本迁移的推荐方式。
需要恢复数据时,使用RUNSCRIPT FROM命令重新执行导出的SQL文件即可。
RUNSCRIPT FROM 'E:/backup.sql'
注意在执行恢复脚本前,目标数据库应当是空库,否则可能因为表已存在而报错。
数据文件备份
除了SQL脚本方式,H2也提供了BACKUP TO命令,它会将当前数据库的数据文件直接压缩为ZIP格式进行备份。
BACKUP TO 'E:/backup.zip'
与直接拷贝数据文件的区别在于,BACKUP TO是在数据库运行时执行的热备份,H2内部会保证备份数据的一致性,不会出现拷贝到中间状态数据的情况。恢复时将ZIP解压缩,将其中的数据文件(*.mv.db)放到应用配置的数据库路径下,重新启动应用即可。不过需要注意,这种方式依然存在版本兼容风险,在H2大版本升级时数据文件格式可能发生变化,此时仍然建议优先使用SQL脚本方式迁移。