Metabase 自帶的系統資料庫為 H2,僅用於測試試用期間,若要轉為正式應用(production),官方強烈建議將系統資料移至大型資料庫。
建議版本為 MySQL 5.7.7(含) 或 MariaDB 10.2.2(含) 或 PostgreSQL 9.4(含) 以上;本筆記為 MySQL 8.0。
注意:避免同時做 Metabase 更新升級 及 資料庫移植
關閉 Metabase,目前我的練功主機是開終端機視窗,在家目錄以
[user]~$ java -jar metabase.jar
的指令啟動 Metabase
所以只要在瀏覽器的 Metabase 頁面登出,然後在終端機視窗 Ctrl+C 中斷 Metabase 即可。
備份 H2︰複製 metabase.db.mv.db 到另一個安全的目錄存放。
以 root 登入 phpMyAdmin
在 MySQL 新增 metabase 帳戶並建立同名資料庫 metabase。
注意:建議密碼自已設定,而不要由 phpMyAdmin 幫您產生,以免密碼中不知道有哪個字元踩到了雷!!目前已知的有 【@】、【:】、【/】、【?】、【#】,會造成 java 錯誤解析 URI 字串,若是一定要用時,則在組連線字串時,須將上述字元改成 URI 編碼,後面再進一步說明。
-- 重點在最後面的 "with grant option", phpMyAdmin 圖形界面似乎做不到賦予 grant 權限 GRANT ALL PRIVILEGES ON `metabase`.* TO 'metabase'@'localhost' with grant option;
執行移植指令
# 切換到 metabase.jar 所在目錄, 在本例為 [user]~/metabase/ [user]~/metabase$ export MB_DB_TYPE=mysql [user]~/metabase$ export MB_DB_CONNECTION_URI="jdbc:mysql://localhost:3306/metabase?user=metabase&password=密碼&verifyServerCertificate=false&allowPublicKeyRetrieval=true" [user]~/metabase$ java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://localhost:3306/metabase?user=metabase&password=密碼&verifyServerCertificate=false&allowPublicKeyRetrieval=true" -jar metabase.jar load-from-h2 metabase.db # 注意檔名
前面提到,如果密碼非得要用那幾個特殊字元,則在組 java 的 JDBC 連線字串時,要改成 URI 編碼,如下:
@ → %40
: → %3A
/ → %2F
? → %3F
# → %23
@ → %40
: → %3A
/ → %2F
? → %3F
# → %23
因為有備份 H2,所以可以放心刪除 metabase 所在目錄下的 H2 檔案,以確認 metabase 存取的是 MySQL。
重新啟動 metabase
[user]~/metabase$ export MB_DB_TYPE=mysql [user]~/metabase$ export MB_DB_CONNECTION_URI="jdbc:mysql://localhost:3306/metabase?user=metabase帳戶&password=密碼" [user]~/metabase$ java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://localhost:3306/metabase?user=metabase&password=密碼&verifyServerCertificate=false&allowPublicKeyRetrieval=true" -jar metabase.jar重登入 metabase,可以看到之前製作的儀表板都在。
相關筆記 ----




沒有留言:
張貼留言