MySQL

本頁說明如何將 MySQL 連接為資料倉儲。若要將 MySQL 用於 Metabase 的應用程式資料庫,請參閱設定 Metabase 應用程式資料庫

若要新增資料庫連線,請按一下右上角的齒輪圖示,然後導覽至管理設定 > 資料庫 > 新增資料庫

支援的版本

Metabase 支援最舊的支援版本到最新的穩定版本。請參閱MySQL 終止生命週期日期

設定

您可以隨時編輯這些設定。請記得儲存您的變更。

顯示名稱

資料庫在 Metabase 介面中顯示的名稱。

主機

您的資料庫 IP 位址,或其網域名稱 (例如 esc.mydatabase.com)。

連接埠

資料庫連接埠。例如 3306。

使用者名稱

您想要用來連線到資料庫的帳戶的資料庫使用者名稱。您可以使用不同的使用者帳戶設定多個連線到同一個資料庫,每個連線都具有不同的權限

密碼

您用來連線到資料庫的使用者名稱的密碼。

使用安全連線 (SSL)

您可以貼上伺服器的 SSL 憑證鏈。

使用 SSH 通道

請參閱我們的SSH 通道指南

展開 JSON 欄

對於 MySQL 資料庫,Metabase 可以將 JSON 欄展開為元件欄位,產生一個表格,其中每個 JSON 金鑰都會變成一個欄。JSON 展開預設為開啟,但如果效能緩慢,您可以關閉 JSON 展開。

如果您開啟 JSON 展開,您也可以在表格元數據中切換個別欄的展開。

其他 JDBC 連線字串選項

您可以將選項附加到 Metabase 用來連線到資料庫的連線字串。

重新執行簡單探索的查詢

如果使用者希望在套用任何摘要或篩選條件之前按一下 [執行] (播放按鈕),請將此選項關閉

預設情況下,當您從 [摘要] 選單中選擇分組選項,或從鑽取選單中選擇篩選條件時,Metabase 就會立即執行查詢。如果您的資料庫速度緩慢,您可能會想要停用重新執行,以避免每次點擊都載入資料。

選擇 Metabase 同步與掃描的時間

開啟此選項以管理 Metabase 用來與您的資料庫保持同步的查詢。如需更多資訊,請參閱同步與掃描資料庫

資料庫同步

如果您已選取 [選擇同步與掃描發生的時間] > [開啟],您將能夠設定

  • 同步的頻率:每小時 (預設) 或每天。
  • 執行同步的時間,以執行 Metabase 應用程式的伺服器的時區為準。

掃描篩選值

Metabase 可以掃描此資料庫中每個欄位中存在的值,以在儀表板和問題中啟用核取方塊篩選器。這可能是一個相當耗費資源的程序,特別是當您擁有非常大的資料庫時。

如果您已選取 [選擇同步與掃描發生的時間] > [開啟],您會在 [掃描篩選值] 下方看到以下選項

  • 定期,依排程可讓您以符合資料庫變更速率的頻率執行掃描查詢。時間設定為執行 Metabase 應用程式的伺服器的時區。對於小型資料庫或具有經常更新的不同值的表格,這是最佳選項。
  • 如果您希望掃描查詢依需求執行,僅在新增篩選器小工具時是一個絕佳選項。開啟此選項表示 Metabase 只會掃描並快取在儀表板或 SQL 問題中新增篩選器時使用的欄位值。
  • 永不,如果需要我會手動執行是適用於資料庫過於龐大,或從未真正新增值的資料庫的選項。使用 [立即重新掃描欄位值] 按鈕執行手動掃描,並將您的篩選值更新到最新狀態。

定期重新指紋識別表格

定期重新指紋識別會增加資料庫的負載。

開啟此選項以在每次 Metabase 執行同步時掃描值範例。

指紋識別查詢會檢查每個欄位的前 10,000 列,並使用該資料來估計每個欄位有多少個唯一值、數值和時間戳記欄位的最小值和最大值等等。如果您將此選項關閉,Metabase 只會在設定期間對您的欄位進行一次指紋識別。

連線到 MySQL 8+ 伺服器

Metabase 使用 MariaDB 連接器連線到 MySQL 伺服器。MariaDB 連接器不支援 MySQL 8 的預設驗證外掛程式。若要連線,您需要變更 Metabase 使用者使用的外掛程式

mysql_native_password`: `ALTER USER 'metabase'@'%' IDENTIFIED WITH mysql_native_password BY 'thepassword';

無法使用正確的憑證登入

如何偵測:Metabase 無法連線到您的 MySQL 伺服器,並顯示錯誤訊息「使用者名稱或密碼似乎不正確」,但您確定使用者名稱和密碼正確。您可能已使用非您連線來源的主機建立 MySQL 使用者。

例如,如果 MySQL 伺服器在 Docker 容器中執行,且您的 metabase 使用者是使用 CREATE USER 'metabase'@'localhost' IDENTIFIED BY 'thepassword'; 建立的,則 localhost 將會解析為 Docker 容器,而不是主機,導致存取被拒絕。

您可以查看 Metabase 伺服器記錄檔中的錯誤訊息來識別此問題

Access denied for user 'metabase'@'172.17.0.1' (using password: YES).

請注意主機名稱 172.17.0.1 (在此案例中為 Docker 網路 IP 位址),以及結尾的 using password: YES

當您嘗試使用命令列用戶端連線到 MySQL 伺服器時,您會看到相同的錯誤訊息:mysql -h 127.0.0.1 -u metabase -p

如何修正:使用正確的主機名稱重新建立 MySQL 使用者

CREATE USER 'metabase'@'172.17.0.1' IDENTIFIED BY 'thepassword';

否則,如有必要,可以使用萬用字元作為主機名稱

CREATE USER 'metabase'@'%' IDENTIFIED BY 'thepassword';

需要設定該使用者的權限

GRANT SELECT ON targetdb.* TO 'metabase'@'172.17.0.1';
FLUSH PRIVILEGES;

記得刪除舊使用者

DROP USER 'metabase'@'localhost';

如果您無法連線到資料庫,但使用者、主機和密碼都正確,請嘗試將 trustServerCertificate=true 新增至其他 JDBC 選項。即使伺服器憑證未安裝根憑證,此選項也會告訴 Metabase 驅動程式信任伺服器憑證,並且應該建立安全連線。

同步包含 JSON 的記錄

Metabase 將根據表格前五百列中的金鑰推斷 JSON「結構描述」。MySQL JSON 欄位缺少結構描述,因此 Metabase 無法依賴表格元數據來定義 JSON 欄位具有哪些金鑰。為了解決缺少結構描述的問題,Metabase 將取得前五百筆記錄,並剖析這些記錄中的 JSON,以推斷 JSON 的「結構描述」。Metabase 將自身限制為五百筆記錄的原因是,同步元數據不會對您的資料庫造成不必要的壓力。

問題是,如果 JSON 中的金鑰在記錄與記錄之間有所不同,則前五百列可能無法擷取該 JSON 欄位中 JSON 物件使用的所有金鑰。若要讓 Metabase 推斷所有 JSON 金鑰,您需要將額外的金鑰新增至前五百列中的 JSON 物件。

升級 MySQL 8+ 的 MySQL Docker 容器

如果您正在啟動新的 MySQL 容器,且

  • 您希望 Metabase 連線到容器,而無需手動建立使用者或變更驗證機制,
  • 或您遇到 RSA 公開金鑰在用戶端無法使用 (未設定選項 serverRsaPublicKeyFile) 錯誤,

執行容器時,請使用 ['--default-authentication-plugin=mysql_native_password'] 修飾詞,如下所示

  • 簡單的 docker 執行:docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx mysql:8.xx.xx --default-authentication-plugin=mysql_native_password

  • 或在 docker-compose 中

mysql:
  image: mysql:8.xx.xx
  container_name: mysql
  hostname: mysql
  ports:
    - 3306:3306
  environment:
    - "MYSQL_ROOT_PASSWORD=xxxxxx"
    - "MYSQL_USER=metabase"
    - "MYSQL_PASSWORD=xxxxxx"
    - "MYSQL_DATABASE=metabase"
  volumes:
    - $PWD/mysql:/var/lib/mysql
  command: ["--default-authentication-plugin=mysql_native_password"]

使用 Vitess 型資料庫的限制

查詢 Vitess 資料庫時,您應該在每個子查詢中新增 LIMIT 子句。

原因:通常,Metabase 會將限制 (例如 2000 或 10000 列) 套用至最終查詢結果。但由於 Vitess 中存在已知錯誤,Vitess 可能會將這些限制套用至子查詢,這可能會導致非預期的結果。解決方法是在每個子查詢中新增限制。

您可能需要諮詢託管平台的供應商,因為 Vitess 在從資訊結構描述傳回元數據時可能會遇到問題。Metabase 需要此元數據來填入其應用程式資料庫;如果 Metabase 無法取得該元數據,欄位可能不會出現 (或顯示為空白)。

延伸閱讀

閱讀其他Metabase 版本的文件。