本文应用的几种情境
- metabase自带的h2数据库改为mysql
- metabase转移位置,从docker到本地
- 连接/更换目标数据库
0. metabase的安装环境
- java21
- metabase
- mysql8(可选,推荐)
无论是在docker还是在本地安装,都需要java21的环境和metabase安装包。metabase默认的数据库是自带的h2数据库,主要用于开发和测试环境,不适合大规模生产环境。推荐改用mysql8数据库。(这里的数据库指的是,存储仪表盘dashboard、模型model的数据库)
java21才支持新版本的metabase
在本地安装时,环境变量path里的%JAVA_HOME%要在最上面,才不会被别的java路径覆盖掉。
mysql要8以上的版本。
原因:MySQL在较旧版本中不支持CREATE OR REPLACE VIEW语句中的WITH子句。WITH agg_recipients AS (...)这种写法在MySQL中不被允许直接用于创建视图。
0.5 通过命令行连接mysql
dbeaver是数据库管理工具。在里面连接本地或docker上的mysql8服务器。
可以在dbeaver上右键服务器,“编辑 链接”来查看链接配置,包括url、端口和认证。只有认证能连接到数据库,新建的用户无论拥有什么权限都不行。 ERROR 1045 (28000): Access denied for user 'metabase'@'localhost' (using password: YES)
如果忘记mysql服务器的用户名和密码,可以使用openssl解密dbeaver的链接信息,再次获得。
在mysql中,为metabase创建数据库。
# 用sql编辑器,选对服务器
CREATE DATABASE `metabase2_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
本地命令行 连接 本地mysql
mysql -h localhost -u [服务器用户名] -p
mysql -h 127.0.0.1 -P 3306 -u [服务器用户名] -p
本地命令行 连接 docker上的mysql
mysql -h localhost -P 3336 -u [服务器用户名] -p
mysql -h 127.0.0.1 -P 3336 -u [服务器用户名] -p
docker命令行 连接 mysql
要禁用ssl,否则会报错。其他代码一样
# 连接docker上的mysql
mysql -h localhost -P 3336 -u [服务器用户名] -p --ssl-mode=DISABLED
mysql -h 127.0.0.1 -P 3336 -u [服务器用户名] -p --ssl-mode=DISABLED
# 连接本地mysql
mysql -h localhost -P 3306 -u [服务器用户名] -p --ssl-mode=DISABLED
mysql -h 127.0.0.1 -P 3306 -u [服务器用户名] -p --ssl-mode=DISABLED
docker上的mysql ports 是 3336:3306。它映射到了3336。必须使用3336!
如果不确定,还可以在上述代码,输入密码登陆后,查看数据库名称,靠里面的内容分清。
SHOW DATABASES;
USE [目标数据库];
SHOW TABLES;
退出连接直接输入EXIT
1. 数据库转移,从h2到mysql
1.1 复制
1.1.0 备份
停止旧metabase容器,备份复制内容!
本地
复制jar包相同目录下的metabase.db.mv.db
docker
需要备份的h2文件在容器里的完整路径为/metabase.db/metabase.db.mv.db,复制一份到物理机。
docker cp metabase:/metabase.db/metabase.db.mv.db /data/backup/metabase.db.mv.db
1.1.1 复制
(docker:从官网上下载metabase的jar包,记住版本)
把jar包和h2数据库放在一起
java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://localhost:3336/[新数据库名称]?user=[mysql服务器用户名]&password=[mysql服务器密码]" -jar metabase.jar load-from-h2 metabase.db
1.2 连接新数据库,运行metabase
新metabase的版本必须和jar包相同,或者更新。否则会报错“降级”,无法成功创建。
本地metabase & 本地mysql,直接使用jar包运行metabase
set MB_DB_TYPE=mysql
set MB_DB_DBNAME=[新数据库名称]
set MB_DB_PORT=3306
set MB_DB_USER=[mysql服务器用户名]
set MB_DB_PASS=[mysql服务器密码]
set MB_DB_HOST=127.0.0.1
java -jar metabase.jar
docker上的metabase & docker上的mysql,创建新的metabase容器
docker run -d -p 3000:3000 `
-e MB_DB_TYPE=mysql `
-e MB_DB_DBNAME=[新数据库名称] `
-e MB_DB_PORT=3336 `
-e MB_DB_USER=[mysql服务器用户名] `
-e MB_DB_PASS=[mysql服务器密码] `
-e MB_DB_HOST=host.docker.internal `
--name [新metabase容器名称] `
metabase/metabase:v0.55.3
其他组合可根据0.5自行更改port编号
2. metabase转移平台,从docker到本地,或者相反
- 关闭metabase
- 把metabase数据库从mysql中导出
- 在新位置,新建数据库
- 旧数据导入新数据库
- 设置新的连接参数,连接metabase(1.2)
- 检查/更改目标数据库连接方式(3.2)
dbeaver导入数据库报错
如果导入报错,删除数据库,加上参数重新导入
--default-character-set=utf8 --ssl-mode=DISABLED
3. metabase连接/更换目标数据库
3.1 连接目标数据库
docker上的metabase 连接 目标数据库
host必须用: host.docker.internal
3.2 检查/更换目标数据库
-
使用外部数据库180.x.x.x,不用管
-
跨平台使用数据库,数据库服务器的连接方式(host)和端口(port)不同!
只有数据库结构完全相同才能更换!
- 【docker】 连【docker上的数据库】用host.docker.internal 端口3336,
连【本地数据库】用host.docker.internal 端口3306 - 【本地】 连【本地数据库】用localhost/127.0.0.1 端口3306,
连【docker上的数据库】用 localhost 端口3336
- 【docker】 连【docker上的数据库】用host.docker.internal 端口3336,
点击右上角"setiing">"admin setting",新页面上面分区选"database",点击要修改连接方式的数据库,新页面"edit connection details"。再按照上面的情况,更改host和端口就行。只有连接成功,新配置才能保存。
4. windows二次开发
必须用linux系统!!!
其它需要的是:nodejs, yarn, Leiningen(Clojure用的Maven)
Metabase采用前后端分离的方式构建,前端使用react搭建页面,后端使用clojure提供REST API接口
安装参考连接:
blog.csdn.net/zanpengfei/…
juejin.cn/post/693880…
ask.csdn.net/questions/7…
Clojure和Leiningen
blog.csdn.net/weixin_4382…
blog.csdn.net/m_yeah/arti…
zhuanlan.zhihu.com/p/53742197