根據預設,Looker 會使用 HyperSQL 記憶體內資料庫儲存設定、使用者和其他資料。在繁忙的執行個體上,這個資料庫可能會成長至數 GB 大小,進而導致效能問題、Java 記憶體壓力,以及啟動時間過長。
在客戶託管的執行個體中,如果內部 HyperSQL 資料庫大小超過 600 MB,建議您將 HyperSQL 資料庫換成完整的 MySQL 資料庫後端。如要檢查 HyperSQL 資料庫的大小,請查看 looker.script 檔案的大小:
cd looker
cd .db
ls -lah
如果 looker.script 檔案大小超過 600 MB,請按照下列程序遷移至外部 MySQL 資料庫。
佈建 MySQL 執行個體和使用者
您可以佈建 MySQL 8.4.X (建議) 或 MySQL 8.0.X 執行個體做為後端。系統不支援 8.0 之前的 MySQL 版本。
Looker 26.6 以上版本支援 MySQL 8.4.X 做為 Looker 後端資料庫。如果客戶託管的執行個體使用 MySQL 8.0.X 做為 Looker 後端資料庫,建議您在將 Looker 執行個體更新至 26.6 以上版本後,立即更新至 MySQL 8.4.X。
在 AWS RDS 中,db.m5.large 類別的執行個體可能就足以做為單一 Looker 執行個體的後端。雖然資料庫的實際用量可能在 5 到 10 GB 範圍內,但建議您佈建 100 到 150 GB 的 SSD 儲存空間,因為佈建的 IOPS 是根據要求的儲存空間量而定。
MySQL 8.4.X
從 Looker 26.6 開始,Looker 支援使用 MySQL 8.4.X 做為內部資料庫。如要使用 MySQL 8.4.X,您可以採用下列任一 MySQL 驗證外掛程式,詳情請參閱下列章節:
正在使用 caching_sha2_password
在 MySQL 8.4.X 中,預設的驗證外掛程式為 caching_sha2_password。Looker 提供兩種使用 caching_sha2_password 外掛程式的方式:
- 使用內部資料庫的 SSL 連線時:不需要 RSA 公開金鑰。Looker 會使用您提供的使用者憑證,安全地連線至資料庫。如要設定資料庫的 SSL 連線,請參閱本頁的「建立資料庫憑證檔案」一節。
- 如果未啟用 SSL 連線:當使用者帳戶提供給 Looker 時,Looker 預設會使用
--get-server-public-key選項連線至內部資料庫。caching_sha2_password如果未啟用 SSL,請確保網路環境安全無虞。
無論使用哪種方式,請發出下列陳述,設定使用者:caching_sha2_password
CREATE USER 'DB_username' IDENTIFIED WITH caching_sha2_password BY 'password';
更改下列內容:
- DB_username:使用者名稱
- password:安全的不重複密碼
正在使用 mysql_native_password
Looker 會使用 mysql_native_password 外掛程式,透過 JDBC 驅動程式向 MySQL 資料庫進行驗證。如要讓 MySQL 8.4.X 與 mysql_native_password 外掛程式搭配運作,請完成下列額外步驟:
設定 MySQL 資料庫以啟用
mysql_native_password外掛程式。視 MySQL 資料庫的部署方式,以及您對設定的存取權類型而定,有多種方法可以完成這項操作:- 使用
--mysql-native-password=ON啟動 MySQL 伺服器。 在
my.cnf設定檔中設定屬性:[mysqld] mysql_native_password=ON如果 MySQL 執行個體託管於 Google Cloud、AWS 或 Azure,系統應會自動啟用
mysql_native_password外掛程式。如需詳細操作說明,請參閱供應商說明文件。
- 使用
建立使用者:
CREATE USER 'DB_username' IDENTIFIED WITH mysql_native_password BY 'password';更改下列內容:
- DB_username:使用者名稱
- password:安全的不重複密碼
MySQL 8.0.X
在 MySQL 8.0.X 中,預設的驗證外掛程式為 caching_sha2_password。Looker 會使用 mysql_native_password 外掛程式,嘗試透過 JDBC 驅動程式向 MySQL 資料庫進行驗證。如要讓 MySQL 8.0.X 正常運作,請採取下列額外步驟:
設定 MySQL 資料庫以使用
mysql_native_password外掛程式。這項作業有多種做法,具體取決於 MySQL 8 資料庫的部署方式,以及您對設定的存取權類型:使用
--default-auth=mysql_native_password旗標啟動程序在
my.cnf設定檔中設定屬性:[mysqld] default-authentication-plugin=mysql_native_password如果資料庫執行個體是透過 AWS RDS 代管,請透過套用至這個資料庫執行個體的 RDS 參數群組,設定
default_authentication_plugin參數。
建立使用者:
CREATE USER 'DB_username' IDENTIFIED WITH mysql_native_password BY 'password';更改下列內容:
- DB_username:使用者名稱
- password:安全的不重複密碼
調整 MySQL
調整 MySQL 執行個體的下列設定。
增加封包大小上限
MySQL 的預設 max_allowed_packet 大小太小,不適合資料庫遷移作業,可能會導致遷移失敗並出現 PACKET_TOO_LARGE 錯誤。將 max_allowed_packet 設為 1073741824 的最大允許值:
max_allowed_packet = 1073741824
設定暫時資料表演算法
MySQL 8 處理內部暫時資料表的方式與舊版不同。預設設定可能會導致 Looker 無法執行部分查詢,特別是針對有許多使用者和專案的 Looker 執行個體。最佳做法是設定下列全域伺服器設定:
internal_tmp_mem_storage_engine = MEMORY
設定字元集
請設定下列預設參數,使用支援 UTF8 字元集的 UTF8mb4。請參閱「在 MySQL 中,請勿使用『utf8』。使用「utf8mb4」。一文,瞭解我們建議搭配 MySQL 使用 UTF8mb4 (而非 UTF8) 的原因。
character_set_client = utf8mb4
character_set_results = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_server = utf8mb4
collation_connection = utf8mb4_general_ci
collation_server = utf8mb4_general_ci
在 Amazon RDS 執行個體上,您可以建立或修改參數群組,並編輯適當的設定,藉此套用這項設定。建議您複製目前的參數群組,並在副本上進行變更,特別是當您在多個 RDS 執行個體之間共用參數群組時。儲存參數群組後,請將其套用至 RDS 執行個體。您可能需要重新啟動。
設定副本配置
Looker 依賴的功能需要 mixed 或 row 二進位記錄檔。如果您自行代管 MySQL 執行個體,請發出下列其中一個指令,將 binlog_format 設為 mixed 或 row:
SET GLOBAL binlog_format = 'MIXED';
或
SET GLOBAL binlog_format = 'ROW';
建立資料庫並授予使用者權限
在資料庫執行個體上建立資料庫:
create database DB_name default character set DB_charset default collate DB_collation;
接著,請授予您在佈建 MySQL 執行個體和使用者時建立的使用者權限:
grant all on DB_name.* to 'DB_username'@'%';
grant all on looker_tmp.* to 'DB_username'@'%';
更改下列內容:
- DB_name:資料庫名稱
- DB_charset:與 RDS 執行個體參數群組設定相符的字元集 (如要支援真正的 UTF8,建議使用
utf8mb4) - DB_collation:與 RDS 執行個體參數群組設定相符的定序 (如要支援真正的 UTF8,建議使用
utf8mb4_general_ci) - DB_username:使用者名稱
最後一行上的 looker_tmp 資料庫不一定要實際存在,但內部報表需要 grant 陳述式。
建立資料庫憑證檔案
Looker 必須知道要與哪個 MySQL 資料庫通訊,以及要使用哪些憑證。在 Looker 目錄中,建立名為 looker-db.yml 的檔案,並填入下列內容,然後將 DB_hostname、DB_username、DB_password 和 DB_name 替換為資料庫的值:
dialect: mysql_8
host: DB_hostname
username: DB_username
password: DB_password
database: DB_name
port: 3306
如果 MySQL 資料庫需要 SSL 連線,請在 looker-db.yml 中加入下列程式碼:
ssl: true
如要啟用 SSL 憑證驗證,請在 looker-db.yml 中加入下列程式碼:
verify_ssl: true
您也可以視需要新增 jdbc_additional_params,指定 MariaDB JDBC 驅動程式支援的其他 JDBC 參數。舉例來說,如需使用特定信任儲存區檔案,您可以將下列參數新增至 MySQL JDBC 連線字串:
jdbc_additional_params: trustStore=/path/to/my/truststore.jks&keyStore=/path/to/my/keystore.jks
如果是客戶託管的安裝項目,您可以視需要新增 max_connections,指定 Looker 可與資料庫建立的連線數量上限。舉例來說,如要將資料庫的並行連線數限制為 10,請新增下列項目:
max_connections: 10
根據 Looker 的加密機制,資料庫中的所有機密資料都會經過靜態加密。即使有人取得資料庫純文字憑證並存取資料庫,Looker 也會在儲存前加密或雜湊處理敏感資料。這適用於密碼、Analytics 資料庫憑證和查詢快取等元素。不過,如果不想將這項設定的明文密碼儲存在磁碟上的 looker-db.yml 檔案中,可以設定環境變數 LOOKER_DB,其中包含 looker-db.yml 檔案中每行的鍵和值清單。例如:
export LOOKER_DB="dialect=mysql_8&host=localhost&username=root&password=&database=looker&port=3306"
備份 .db 目錄
備份 .db 目錄,其中包含建構記憶體內 HyperSQL 資料庫所需的檔案,以防需要還原 HyperSQL:
cp -r .db .db-backup
tar -zcvf db-backup.tar.gz ./.db-backup
遷移資料庫
將資料庫遷移至 MySQL 可能需要數小時 (適用於中型或大型執行個體),尤其是 HyperSQL 資料庫大小為 1 GB 以上時。建議您在遷移期間暫時將 EC2 執行個體升級至 m5.2xlarge (RAM 為 32 GB,可容納步驟中指定的 26 GB 堆積),這樣所需時間會縮短至約 10 分鐘。
在 Looker 主機上:
cd looker ./looker stop vi looker在 Looker 開機指令碼中,於檔案中新增第二行:
exit在 AWS 控制台中停止執行個體。停止後,將 EC2 執行個體大小變更為
m5.2xlarge,然後重新啟動執行個體。以 Looker 使用者身分透過 SSH 連線至主機。請先確認 Java 未執行,然後執行下列指令:
cd looker java -Xms26000m -Xmx26000m -jar looker.jar migrate_internal_data looker-db.yml執行 步驟時,系統可能找不到
libcrypt,並顯示以這項內容開頭的堆疊追蹤記錄:migrate_internal_dataNotImplementedError: getppid unsupported or native support failed to load ppid at org/jruby/RubyProcess.java:752 ppid at org/jruby/RubyProcess.java:749如果發生這種情況,請先手動設定
LD_LIBRARY_PATH,再執行 Java 指令:export LD_LIBRARY_PATH=$HOME/looker/.tmp/:$LD_LIBRARY_PATH完成後,請從 AWS 控制台停止執行個體。
現在您可以將執行個體還原為原始大小。
再次啟動執行個體。
啟動 Looker
編輯 Looker 開機指令碼,並刪除先前新增的
exit行。請確認開機指令碼的
LOOKERARGS中未定義任何引數。請改為將所有引數移至lookerstart.cfg檔案,以免開機指令碼的新版本覆寫這些引數。儲存並結束開機指令碼。編輯「
lookerstart.cfg」。此步驟應類似下列所示:LOOKERARGS="-d looker-db.yml"如果 Looker 開機指令碼中還有其他引數,請將這些引數加入
lookerstart.cfg檔案。封存
.db目錄 (如果尚未封存)。mv .db .db-backup tar -zcvf db-backup.tar.gz ./.db-backup rm -rf ./.db-backup/啟動 Looker:
./looker start
確認 Looker 使用的是新資料庫
如果 Looker 成功使用後端 MySQL,您應該會看到 Looker 執行個體與新資料庫執行個體之間的網路連線。如要檢查,請在 Looker 執行個體上執行下列指令:
netstat -na | grep 3306
您應該會看到資料庫執行個體的連線。以下是輸出範例,顯示 IP 位址為 10.0.3.155 的資料庫執行個體:
looker@instance1:~$ netstat -na | grep 3306
tcp6 0 0 10.0.5.131:56583 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56506 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56582 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56508 10.0.3.155:3306 ESTABLISHED
備份 Looker
遷移至 MySQL 後端後,Looker 的自動 S3 備份功能將無法運作。建議您至少每晚備份 MySQL 資料庫,以及 Looker 工作目錄的檔案系統。檔案系統備份作業可能會排除 looker/log/ 目錄。詳情請參閱「建立備份」說明文件頁面。