根據預設,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.0.x 執行個體做為後端。不支援 8.0 以下版本的 MySQL。
在 AWS RDS 中,db.m5.large
類別的例項可能就足以做為單一 Looker 例項的後端。雖然資料庫的實際用量可能介於 5 到 10 GB 之間,建議您配置 100 到 150 GB 的 SSD 儲存空間,因為系統會根據要求的儲存空間量來配置 IOPS。
MySQL 8.0.X - 變更預設的驗證外掛程式
在 MySQL 8.0.X 中,預設的驗證外掛程式為 caching_sha2_password
。Looker 會使用 mysql_native_password
外掛程式,透過 JDBC 驅動程式嘗試驗證 MySQL 資料庫。為了讓這個版本的 MySQL 正常運作,您必須採取下列額外步驟:
設定 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
參數。
請發出下列陳述式,並將
some_password_here
替換為安全的專屬密碼:CREATE USER looker IDENTIFIED WITH mysql_native_password BY 'some_password_here'; GRANT SELECT ON database_name.* TO 'looker'@'%';
調整 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
設定字元集
將下列預設參數設為 UTF8mb4,以便支援 UTF8 字元集。請參閱「在 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
binlog 的功能。如果您自行託管 MySQL 執行個體,請發出下列任一指令,將 binlog_format
設為 mixed
或 row
:
SET GLOBAL binlog_format = 'MIXED';
或
SET GLOBAL binlog_format = 'ROW';
建立資料庫和使用者
在資料庫執行個體上建立使用者和資料庫,並將 <DB_username>
、<DB_name>
和 <DB_password>
替換為使用者和資料庫的實際值。請將 <DB_charset>
和 <DB_collation>
替換為與 RDS 執行個體參數群組設定相符的所選字元集和定序 (如要支援真正的 UTF8,建議使用 utf8mb4
和 utf8mb4_general_ci
)。
create user <DB_username>;
set password for <DB_username> = password ('<DB_password>');
create database <DB_name> default character set <DB_charset> default collate <DB_collation>;
grant all on <DB_name>.* to <DB_username>@'%';
grant all on looker_tmp.* to '<DB_username>'@'%';
最後一行的 looker_tmp
資料庫不一定要存在,但內部報表需要 grant
陳述式。
建立資料庫憑證檔案
Looker 需要知道要與哪個 MySQL 資料庫通訊,以及要使用哪些憑證。在 Looker 目錄中建立名為 looker-db.yml
的檔案,並在其中加入下列內容,將 <DB_hostname>
、<DB_username>
、<DB_password>
和 <DB_name>
替換為資料庫的值:
dialect: mysql
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 也會在儲存前對機密資料進行加密或雜湊運算。這項規定適用於密碼、數據分析資料庫憑證、查詢快取等。不過,如果您不想將此設定的明文密碼儲存在磁碟上的 looker-db.yml
檔案中,可以設定環境變數 LOOKER_DB
,讓其包含 looker-db.yml
檔案中每行鍵/值清單。例如:
export LOOKER_DB="dialect=mysql&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
執行
migrate_internal_data
步驟時,可能找不到libcrypt
,並且會顯示堆疊追蹤,開頭如下:NotImplementedError: getppid unsupported or native support failed to load ppid at org/jruby/RubyProcess.java:752 ppid at org/jruby/RubyProcess.java:749
如果發生這種情況,請在執行 Java 指令前手動設定
LD_LIBRARY_PATH
: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/
目錄可能會從檔案系統備份中排除。詳情請參閱「建立備份」說明文件頁面。