以前我们metabase的数据是直接docker run运行起来的,日子久了之后里面保存的数据也越来越多,而且也越来越重要,同时考虑到机器的迁移,所以决定把metabase迁移到k8s里面运行并且数据保存到mysql里面。
使用的数据库版本:MySQL-8.0.34
使用的metabase版本:
e0ad12528c68:/app# java -jar metabase.jar version
Warning: environ value jdk-11.0.20.1+1 for key :java-version has been overwritten with 11.0.20.1
2024-10-28 06:26:08,827 INFO metabase.util :: Maximum memory available to JVM: 468.0 MB
2024-10-28 06:26:10,827 INFO util.encryption :: Saved credentials encryption is DISABLED for this Metabase instance. 🔓
For more information, see https://metabase.com/docs/latest/operations-guide/encrypting-database-details-at-rest.html
2024-10-28 06:26:17,369 INFO driver.impl :: Registered abstract driver :sql 🚚
2024-10-28 06:26:17,380 INFO driver.impl :: Registered abstract driver :sql-jdbc (parents: [:sql]) 🚚
2024-10-28 06:26:17,384 INFO metabase.util :: Load driver :sql-jdbc took 94.9 ms
2024-10-28 06:26:17,385 INFO driver.impl :: Registered driver :h2 (parents: [:sql-jdbc]) 🚚
2024-10-28 06:26:17,428 INFO driver.impl :: Registered driver :mysql (parents: [:sql-jdbc]) 🚚
2024-10-28 06:26:17,460 INFO driver.impl :: Registered driver :postgres (parents: [:sql-jdbc]) 🚚
2024-10-28 06:26:19,689 INFO metabase.core ::
Metabase v0.47.2 (536c24c release-x.47.x)
Copyright © 2024 Metabase, Inc.
Metabase Enterprise Edition extensions are NOT PRESENT.
Metabase version: {:date 2023-09-18, :tag v0.47.2, :branch release-x.47.x, :hash 536c24c}
OS: Linux 5.15.0-119-generic amd64
Java version: OpenJDK 64-Bit Server VM 11.0.20.1
Country: US
System timezone: GMT
Language: en
File encoding: UTF-8
第一步:
#进入原来的容器,把/metabase打包:
tar -zcf metabase.tar.gz metabase.db
然后把数据复制出来
docker cp metabase:/metabase.tar.gz /tmp/metabase.tar.gz
解压,并重新启动一个metabase,目的是防止失败的话影响原来的数据
cd /tmp && tar -zxf metabase.tar.gz
执行迁移:
#先启一个docker
docker run -d --name metabase-datamig -v /tmp/metabase.db:/metabase.db registry.cn-beijing.aliyuncs.com/私有镜像/metabase:v1
docker exec -it metabase-datamig bash
#容器内执行:
cd /app
java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://xxx.mysql.cn-chengdu.rds.aliyuncs.com:3306/metabase?user=metabase&password=metabase" -jarmetabase.jar load-from-h2 /metabase.db/metabase.db
这里需要注意的一点是:
解压出来的/metabase.db是一个目录,它下面有两个文件
etabase.db.mv.db
metabase.db.trace.db
我们执行的命令里面,路径需要填写/metabase.db/metabase.db
要去掉后面的.mv.db
,这个也是官方文档里面提到的,其他的教程里面反而没有说这一块,否则会报错:
Command failed with exception: ERROR Set up h2 source database and run migrations...: Unable to connect to Metabase h2 DB.
完事之后,在k8s里面传入环境变量启动,就可以正常打开页面了,但我在登陆的时候发现了问题,报错:
Field 'id' doesn't have a default value
发现是login_history这个表的结构有问题,变更一下id为主键并设置自增长就好了。