Metabase v0.41.2从H2数据库迁移到MySQL时卡在运行迁移步骤如何解决
问题原因
- 目标MySQL配置不符合要求:未使用utf8mb4字符集、版本与Metabase v0.41.2不兼容、连接参数缺失、数据库权限不足,或者innodb_buffer_pool_size配置过小导致大表迁移执行过慢,看似卡住。
- H2数据库文件异常:原Metabase进程未完全停止导致H2文件被占用、H2文件损坏、存储的历史数据量过大,Windows环境下IO性能不足引发迁移假死。
- 迁移环境配置错误:未正确配置目标MySQL的连接环境变量,或H2文件路径填写错误,导致迁移流程无法正常读取写入数据。
- 版本自身bug:Metabase v0.41.2的
load-from-h2命令在Windows环境下存在已知兼容性问题,Liquibase迁移脚本执行无报错但无法推进。
解决方法
- 先停止所有正在运行的Metabase进程,通过Windows资源管理器确认H2数据库文件(metabase.db.mv.db)无程序占用,迁移前提前备份原H2文件避免数据丢失。
- 调整目标MySQL配置:
- 确保MySQL版本为5.7或8.0,与Metabase v0.41.2兼容
- 创建迁移库时指定字符集和排序规则:
CREATE DATABASE metabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 给迁移用户授予全量权限:
GRANT ALL PRIVILEGES ON metabase.* TO '你的用户名'@'%'; FLUSH PRIVILEGES; - 临时调大innodb_buffer_pool_size参数到物理内存的50%,提升迁移IO性能。
- 执行迁移前先在当前命令行窗口配置目标库环境变量,Windows cmd环境下配置命令如下:
set MB_DB_TYPE=mysql set MB_DB_DBNAME=metabase set MB_DB_HOST=127.0.0.1 set MB_DB_PORT=3306 set MB_DB_USER=你的数据库用户名 set MB_DB_PASS=你的数据库密码 set MB_DB_CONNECTION_URI="jdbc:mysql://127.0.0.1:3306/metabase?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8mb4"
- 填写H2路径时不需要加.mv.db后缀,例如你的H2文件路径为
C:\metabase\metabase.db.mv.db,迁移命令应写为:java -jar metabase.jar load-from-h2 C:\\metabase\\metabase.db - 若仍无法推进,可将Metabase包升级到同分支的v0.41.6小版本,该版本修复了多个迁移兼容性bug,替换jar包后重新执行迁移命令即可。
- 若原H2文件体积超过1G,可先启动原Metabase服务,清理掉不需要的查询历史、过期日志数据后再执行迁移,大幅降低迁移耗时。
内容的提问来源于stack exchange,提问作者MemZ
相关产品推荐
相关产品推荐

