從客戶託管的 Looker 執行個體匯出資料

客戶託管 Looker 執行個體的管理員可能會考慮遷移至 Looker 代管環境,主要是為了以基礎架構管理作業的負擔,換取更高的便利性、更豐富的功能,以及代管的可靠性。使用 Looker 代管的執行個體,可大幅減少安裝、設定及維護 Looker 應用程式所需的工作量,因為所有與 Looker 應用程式相關的必要 IT 職能,都會由我們為您處理。

將客戶託管執行個體遷移至 Looker 代管環境,主要有以下步驟:

  1. 接收和設定:向 Looker 團隊提出支援要求,並填寫 Looker On-Prem 遷移問卷。Looker 團隊會根據您在問卷中填寫的答案,建立新的代管執行個體。
  2. 加密:Looker SRE 會產生 GnuPG (GPG) 金鑰組,並與您共用公開金鑰。
  3. 匯出:停止 Looker 執行個體並匯出資料 (資料庫、檔案系統和客戶管理金鑰 (CMK))。
  4. 資料轉移和匯入:Looker 團隊會將備份檔匯入 Looker 代管的執行個體,並進行驗證。

本頁說明如何執行「步驟 3:匯出」所需的作業:

事前準備

如要使用本頁面的指令碼備份執行個體資料,請務必確認 Looker 執行個體、資料庫和加密設定符合遷移需求。

必要設定

如要執行本頁所述的指令碼,必須使用下列 Looker 和資料庫版本:

  • Looker 執行個體必須搭載支援的 Looker 發布版本
  • 執行個體必須使用與 MySQL 8.0.0 以上版本相容的資料庫,這樣 Looker 才能使用匯出的資料庫結構定義檔案。

如果您使用 AWS KMS,請按照「變更 Looker 的加密金鑰」說明文件頁面中的步驟,遷移至 Looker 的 AES-256 GCM 加密。

為確保資料儲存和字元顯示正常,資料庫定序必須設為 utf8mb4 (建議) 或 utf8。如果使用其他排序規則,儲存特殊字元時可能會導致資料損毀或發生錯誤。

評估要遷移的執行個體

如要判斷客戶託管的 Looker 執行個體是否可以遷移至 Looker 代管的 Looker (原始) 執行個體,您必須評估執行個體資料庫和檔案系統的大小和效能。這項評估也會判斷來源環境是否能處理備份產生程序期間的資料擷取作業。這項資訊可協助 Looker 團隊為目標 Looker 代管執行個體分配足夠的資源。

如要進行評估,您必須複製 GitHub 存放區,當中包含 Looker 的指令碼,可評估 Looker 執行個體的運算用量和檔案系統效能。這項指令碼會使用 Go Looker SDK,並可在 GitHub 的 Looker O2C 遷移評估存放區中取得。

以下各節將說明執行個體評估指令碼的必要步驟,包括下列工作:

  1. 複製包含指令碼的存放區。
  2. 產生 API 憑證。
  3. 執行指令來檢查運算用量。
  4. 執行指令,檢查檔案系統效能。

安裝評估工具

在要備份 Looker 執行個體資料的機器上,安裝下列工具、語言和 SDK:

  1. Git
  2. Go 程式設計語言
  3. Go Looker SDK

複製 Looker O2C 遷移評估存放區

如要複製包含評估指令碼的存放區,請從將執行分析和備份作業的使用者主目錄執行下列指令:

git clone https://github.com/looker-open-source/looker-o2c-migration-tool.git

產生 API 憑證

評估指令碼會使用 Looker SDK 擷取資料,做為 API 用戶端,透過網路將要求傳送至 Looker 伺服器。執行指令碼的管理員使用者必須擁有 Looker API 用戶端 ID 和用戶端密鑰。如要為 Looker 管理員帳戶產生 API 憑證,請按照下列步驟操作:

  1. 前往「管理」面板中的「使用者」頁面。
  2. 選取帳戶的「編輯」
  3. 在帳戶詳細資料頁面中,找到「API3 金鑰」部分,然後選取「編輯金鑰」
  4. 選取「New API Key」(新增 API 金鑰)
  5. Looker 會顯示「Client ID」(用戶端 ID) 和「Client Secret」(用戶端密鑰)。複製這些值並儲存在安全的位置。

產生運算用量資訊

如要使用遷移評估指令碼傳回執行個體運算用量的相關資訊,請在與 Looker 應用程式的 API 端點有直接網路連線的機器上執行下列指令:

cd looker-o2c-migration-tool
go run main.go --client-id API_CLIENT_ID --client-secret API_CLIENT_SECRET --looker-instance-address LOOKER_INSTANCE_ADDRESS --output-csv-path OUTPUT_CSV_PATH --ssl=SSL

更改下列內容:

  • API_CLIENT_ID:上一個步驟中的用戶端 ID。
  • API_CLIENT_SECRET:上一個步驟中的用戶端密鑰。
  • LOOKER_INSTANCE_ADDRESS:Looker 執行個體的地址,包括通訊協定。
  • OUTPUT_CSV_PATH:CSV 輸出路徑,例如 /content/compute_usage_info.csv
  • SSL:機器與 Looker 執行個體之間的連線是否應使用 SSL 憑證。預設值為 true

這個指令會輸出 CSV 檔案,其中包含 Looker 執行個體的用量詳細資料。

產生檔案系統效能資訊

這項指令碼會顯示個別模型相關目錄的大小和檔案計數,以及磁碟寫入速度測試。假設 Looker 安裝在使用者名稱為 looker 的使用者主目錄中,如「安裝 Looker 應用程式」說明文件頁面所述。

如要使用遷移評估指令碼傳回執行個體檔案系統效能的相關資訊,請在 Looker 執行個體代管的機器上執行下列指令:

cd looker-o2c-migration-tool
go run main.go --file-system-evaluation --output-csv-path OUTPUT_CSV_PATH

更改下列內容:

  • OUTPUT_CSV_PATH:CSV 輸出路徑,例如 /content/fs_perf_info.csv

這項指令會輸出 CSV 檔案,其中包含 Looker 執行個體的檔案系統效能。

準備備份執行個體

安裝執行本頁所述指令碼所需的套件和依附元件,準備備份執行個體資料。您也可以設定一些環境變數,簡化指令撰寫作業。

安裝及驗證依附元件

安裝備份 Looker 執行個體資料所需的依附元件時,請使用 Linux 發行版標準的套件管理工具。以下版本對應 Debian 12 (Bookworm) 中提供的套件,且代表各必要套件的最低版本。

在要備份 Looker 執行個體資料的機器上安裝下列套件:

  1. bash 5.2.15

  2. gpg 2.2.40 (GnuPG) - 備份產生程序會使用 gpg 加密資料庫和檔案系統備份,然後再與 Looker 團隊共用。

  3. libgcrypt 1.10.2

  4. Gpg-agent 2.2.40 (GnuPG)

  5. GNU tar 1.34

  6. gzip 1.12

  7. md5sum 9.1 (GNU coreutils)

  8. GNU grep 3.11 (支援 PCRE2 10.42 2022-12-11 以上版本)

  9. GNU sed 4.9

  10. mariadb-client-core (必須連線至 MySQL 8.X)

舉例來說,在以 Debian 為基礎的 Linux 系統上,執行下列指令即可安裝必要套件:

sudo apt-get update
sudo apt-get install -y \
    bash \
    gnupg \
    libgcrypt20 \
    gnupg-agent \
    tar \
    gzip \
    coreutils \
    grep \
    sed \
    mariadb-client-core

定義變數

下列指令會定義一些變數,這些變數會在備份產生程序中使用。在您打算執行任何後續指令的終端機上設定這些變數。

環境變數:設定備份目錄路徑

下列指令會設定備份目錄的路徑,檔案將建立於該目錄中。在您打算執行目錄專屬備份產生作業的任何終端機上,執行下列指令:

BACKUP_DIRECTORY="DIRECTORY_PATH"
BACKUP_DIRECTORY="${BACKUP_DIRECTORY%/}"

更改下列內容:

  • DIRECTORY_PATH:備份檔案的建立路徑。請確認這個目錄有足夠空間存放備份。請勿加入路徑開頭的 /

環境變數:設定檔案系統備份的來源路徑

檔案系統備份來源路徑的變數定義會假設 looker 是安裝 Looker 應用程式的使用者名稱,且安裝作業是在使用者的主目錄中進行,如「安裝 Looker 應用程式」說明文件頁面所述。如果您將 Looker 安裝在其他目錄,就必須修改變數。在要執行 Looker 檔案系統備份的終端機上設定這個變數:

  LOOKER_USER="looker"
  ROOT_LOOKER_FS_DIRECTORY="$(getent passwd "$LOOKER_USER" | cut -d: -f 6)"

環境變數:定義新的 Looker 執行個體

定義變數,代表要匯入的執行個體名稱和專屬 ID。Looker 團隊會提供這些變數的值。

export luid='LOOKER_HOSTED_INSTANCE_ID'
export customer='LOOKER_HOSTED_INSTANCE_NAME'

更改下列內容:

  • LOOKER_HOSTED_INSTANCE_ID:要遷移至的 Looker 執行個體專屬 ID
  • LOOKER_HOSTED_INSTANCE_NAME:要遷移的新 Looker 執行個體名稱

環境變數:加密金鑰

下列指令會在執行個體上安裝公開 GPG 金鑰。在您要執行執行個體備份指令的任何終端機上設定此變數 (Looker 會提供此變數的值):

base64_encryption_key="BASE64_ENCRYPTION_KEY"

更改下列內容:

  • BASE64_ENCRYPTION_KEY:備份指令碼用來加密備份的金鑰。Looker 團隊會提供這個變數的值。

產生公開加密金鑰

下列指令會在執行個體上安裝公開 pgp 金鑰。備份指令碼會使用這個金鑰加密備份資料。在要執行指令來備份執行個體的任何終端機上設定。

echo -n "${base64_encryption_key}" | base64 -d | gpg --import

備份執行個體資料

執行下列指令,安全地封裝執行個體檔案系統和資料庫結構定義的重要元件,以便轉移及還原至新的 Looker 代管 Looker (原始) 執行個體。指令碼會執行備份作業,並使用 md5sum 驗證備份內容的完整性。最後,系統會使用 GnuPG 加密備份,然後以 MD5 檔案格式匯出結果。

備份執行個體檔案系統資料

請在要匯出備份資料的目錄中,以及設定環境變數的相同終端機中,執行這些指令。選取要遷移的 Looker 代管執行個體類型分頁。

Looker (原始版本)

執行這項指令,確保備份內容包含用於資料驗證或工作流程自動化的任何自訂 Git 伺服器端掛鉤:

cd "${BACKUP_DIRECTORY}"

function findHookPath() {
rootPath=$1

find \
    ${rootPath}/models{-user-*,}/*/.git/config \
    -maxdepth 0 \
    -type f \
    -xtype f \
  | xargs -I {} grep hooksPath {} \
  | sort \
  | uniq \
  | sed -r -e 's/^.+hooksPath = //g' \
  | xargs -I {} dirname {} \
  | sort \
  | uniq \
  | sed -r -e "s#\.\.\/\.\.\/#${rootPath}/#g"

}

hooksPath=$(findHookPath "${ROOT_LOOKER_FS_DIRECTORY}" | sort | uniq | head -1)

執行下列指令,列出所有必要目錄並備份:

time find "${ROOT_LOOKER_FS_DIRECTORY}" \
  -maxdepth 1 \
  -type d \
  \( \
         -name marketplace \
      -o -name bare_models \
      -o -name deploy_keys \
      -o -name models \
      -o -name remote_dependencies \
      -o -name models-self-service \
      -o -name "models-user-*" \
      -o -wholename "${hooksPath}" \
  \) | tar \
  --gzip \
  --create \
  --file="${customer}_looker_fs_backup.tar.gz" \
  --files-from=-

執行這項指令,在加密前取得備份的「指紋」:

time md5sum "${customer}_looker_fs_backup.tar.gz" > "${customer}_fs_backup.md5"

執行下列指令來加密備份:

time gpg --encrypt --yes \
  --output "${customer}_looker_fs_backup.tar.gz.enc" \
  --recipient "looker-devops+migration-${luid}@google.com" \
  "${customer}_looker_fs_backup.tar.gz"

執行這項指令,在加密後取得另一個「指紋」:

time md5sum "${customer}_looker_fs_backup.tar.gz.enc" >> "${customer}_fs_backup.md5"

Looker 會使用檢查碼驗證資料備份的完整性。

Looker (Google Cloud Core)

執行這項指令,確保備份內容包含用於資料驗證或工作流程自動化的任何自訂 Git 伺服器端掛鉤:

cd "${BACKUP_DIRECTORY}"

function findHookPath() {
rootPath=$1

find \
    ${rootPath}/models{-user-*,}/*/.git/config \
    -maxdepth 0 \
    -type f \
    -xtype f \
  | xargs -I {} grep hooksPath {} \
  | sort \
  | uniq \
  | sed -r -e 's/^.+hooksPath = //g' \
  | xargs -I {} dirname {} \
  | sort \
  | uniq \
  | sed -r -e "s#\.\.\/\.\.\/#${rootPath}/#g"

}

hooksPath=$(findHookPath "${ROOT_LOOKER_FS_DIRECTORY}" | sort | uniq | head -1)

執行下列指令,列出所有必要目錄並備份:

time find "${ROOT_LOOKER_FS_DIRECTORY}" \
  -maxdepth 1 \
  -type d \
  \( \
         -name marketplace \
      -o -name bare_models \
      -o -name deploy_keys \
      -o -name models \
      -o -name remote_dependencies \
      -o -name models-self-service \
      -o -name "models-user-looker" \
      -o -wholename "${hooksPath}" \
  \) | tar \
  --gzip \
  --create \
  --file="${customer}_looker_fs_backup.tar.gz" \
  --files-from=-

執行這項指令,在加密前取得備份的「指紋」:

time md5sum "${customer}_looker_fs_backup.tar.gz" > "${customer}_fs_backup.md5"

執行下列指令來加密備份:

time gpg --encrypt --yes \
  --output "${customer}_looker_fs_backup.tar.gz.enc" \
  --recipient "looker-devops+migration-${luid}@google.com" \
  "${customer}_looker_fs_backup.tar.gz"

執行這項指令,在加密後取得另一個「指紋」:

time md5sum "${customer}_looker_fs_backup.tar.gz.enc" >> "${customer}_fs_backup.md5"

Looker 會使用檢查碼驗證資料備份的完整性。

這個指令碼會產生下列檔案,用於遷移檔案系統部分:

  1. ${customer}_looker_fs_backup.tar.gz.enc:加密壓縮的檔案系統備份。
  2. ${customer}_fs_backup.md5:包含用於驗證的總和檢查碼。

備份執行個體資料庫結構定義

這些指令會建立暫時性設定檔,讓遷移工具連線至 Looker 執行個體的內部資料庫,為備份 Looker 執行個體資料庫結構定義準備環境。這個指令碼會將使用者名稱和主機名稱等敏感資料寫入設定檔,而非直接傳遞至指令,mysqldumpmysql 等工具可以讀取這些資料。

執行下列指令,建立臨時設定檔並設定各種設定:

export database_name="DATABASE_SCHEMA_NAME"
temporary_cnf_file="$(mktemp --tmpdir=. --suffix .cnf)"
echo "[client]
host=DATABASE_HOST
port=DATABASE_PORT
user=DATABASE_USER
password=PASSWORD

[mariadb-dump]
no-sandbox

[mysql]
no-auto-rehash

[mysqldump]
no-tablespaces
loose_set-gtid-purged=OFF
single-transaction
quick
max_allowed_packet=1G
ignore-table=${database_name}.LookerQ_LookerBQ_ACTIVEMQ_ACKS
ignore-table=${database_name}.LookerQ_LookerBQ_ACTIVEMQ_LOCK
ignore-table=${database_name}.LookerQ_LookerBQ_ACTIVEMQ_MSGS

[Server-specific settings - mostly for mysqld/mariadbd processes]
max_allowed_packet = 1024M
" > ${temporary_cnf_file}

更改下列內容:

  • DATABASE_HOST:Looker 資料庫的 DNS 或 IP。
  • DATABASE_PORT:資料庫連接埠。
  • DATABASE_USER:用於執行匯出的資料庫使用者名稱。
  • PASSWORD:執行匯出作業的使用者密碼明文值。Looker 不會檢查這組密碼。不過,如果您想省略純文字密碼規定,可以將這個變數留空,系統會在您執行備份指令時強制提示輸入密碼。
  • DATABASE_SCHEMA_NAME:資料庫或結構定義的名稱。

如果資料庫需要 SSL 憑證才能連線,請在臨時設定檔中新增下列路徑:

設定憑證授權單位 (CA) 檔案的路徑:

ssl-ca=/etc/mysql/certs/ca.pem

設定用戶端 SSL 憑證的路徑:

ssl-cert=/etc/mysql/certs/client-cert.pem

設定用戶端 SSL 私密金鑰的路徑:

ssl-key=/etc/mysql/certs/client-key.pem

如果是 MySQL 資料庫,請要求使用 SSL 並驗證伺服器憑證:

loose-ssl-mode=VERIFY_CA

如果是 MariaDB 資料庫,請要求使用 SSL 並驗證伺服器憑證:

loose-ssl-verify-server-cert=ON

執行下列指令,進行資料庫結構定義備份、加密及驗證。

前往要儲存備份的目錄:

cd "${BACKUP_DIRECTORY}"

執行下列指令來備份資料庫:

time mysqldump \
    --defaults-file="${temporary_cnf_file}" \
    "${database_name}" \
  | gzip > "${customer}_looker_db_backup.sql.gz"

執行這項指令,在加密前取得備份的「指紋」:

time md5sum "${customer}_looker_db_backup.sql.gz" >> "${customer}_db_backup.md5"

執行下列指令來加密備份:

time gpg --encrypt --yes \
    --output "${customer}_looker_db_backup.sql.gz.enc" \
    --recipient "looker-devops+migration-${luid}@google.com" \
    "${customer}_looker_db_backup.sql.gz"

執行這項指令,在加密後取得另一個「指紋」:

time md5sum "${customer}_looker_db_backup.sql.gz.enc" >> "${customer}_db_backup.md5"

這個指令碼會產生下列檔案,用於遷移資料庫結構定義:

  1. ${customer}_looker_db_backup.sql.gz.enc:加密壓縮的資料庫結構定義備份。
  2. ${customer}_db_backup.md5:包含用於驗證的總和檢查碼。

加密客戶自行管理的加密金鑰 (CMK)

下列指令會驗證、格式化及加密 CMK。如果沒有這項加密功能,移轉的資料庫就無法在新 Looker 環境中解密。

注意:下一個 CMK 指令只需要在主機上執行一次,該主機必須是內部資料庫或 Looker 執行個體的主機,但不能同時是兩者。

首先,請使用目前的 CMK 設定變數,該變數應採用 base64 格式:

CMK="CUSTOMER_CMK_KEY"

更改下列內容:

  • CUSTOMER_CMK_KEY:CMK 的值

接著執行下列指令,產生 CMK 金鑰檔案、產生解密 CMK 的檢查碼、加密 CMK 檔案,以及產生加密 CMK 的檢查碼:

echo -n "${CMK}" > "${customer}_looker_cmk_key"

time md5sum "${customer}_looker_cmk_key" >> "${customer}_cmk_key.md5"

time gpg --encrypt --yes \
  --output "${customer}_looker_cmk_key.enc" \
  --recipient "looker-devops+migration-${luid}@google.com" \
  "${customer}_looker_cmk_key"

time md5sum "${customer}_looker_cmk_key.enc" >> "${customer}_cmk_key.md5"

這個指令碼會為遷移作業的 CMK 部分產生下列檔案:

  • ${customer}_looker_cmk_key.enc:加密的 CMK 檔案
  • ${BACKUP_DIRECTORY}/${customer}_cmk_key.md5:包含用於驗證的總和檢查碼的檔案

準備遷移檔案

您目前執行的指令碼已產生下列檔案:

  • compute_usage_info.csv:包含執行個體運算用量資訊的 CSV 檔案
  • fs_perf_info.csv:包含執行個體檔案系統效能資訊的 CSV 檔案
  • ${customer}_looker_fs_backup.tar.gz.enc:加密壓縮的檔案系統備份
  • ${customer}_fs_backup.md5:包含用於驗證的總和檢查碼的檔案
  • ${customer}_looker_db_backup.sql.gz.enc:加密壓縮的資料庫結構定義備份
  • ${customer}_db_backup.md5:包含用於驗證的總和檢查碼的檔案
  • ${customer}_cmk_key.md5:包含用於驗證的總和檢查碼的檔案
  • ${customer}_looker_cmk_key.enc:加密的 CMK 檔案

如要將 MD5 檔案合併為名為 ${customer}_backup.md5 的單一檔案,請在備份目錄中執行下列指令:

cat \
    "${customer}_db_backup.md5" \
    "${customer}_fs_backup.md5" \
    "${customer}_cmk_key.md5" \
  | sort | uniq \
  > "${customer}_backup.md5"

驗證備份構件

為確保備份檔案完整、安全且可供遷移,請使用 Looker On-Prem 資料驗證工具。這項工具會執行全面驗證,包括檢查 MD5 總和檢查碼、GPG 加密金鑰、資料庫結構和 CMK 有效性。

安裝驗證工具

如要執行驗證工具,您必須在電腦上安裝 GoGnuPG

如要複製存放區及建構工具,請執行下列指令:

git clone https://github.com/looker-open-source/customer-scripts.git
cd customer-scripts/onprem-data-verifier
go build -o onprem-verifier main.go

執行驗證工具

這項工具會處理含有備份檔案的目錄。執行工具前,請確認 ${BACKUP_DIRECTORY} 中有所有必要檔案 (四個加密構件和三個解密構件)。

執行下列指令來驗證構件:

./onprem-verifier \
  --backupDir "${BACKUP_DIRECTORY}" \
  --customerName "${customer}" \
  --luid "${luid}"

成功後,這項工具會產生 metadata.json 檔案。將備份構件移交給 Looker 團隊時,請務必附上這個檔案。

交接檔案

備份和加密程序完成後,您應該會看到下列檔案:

  • ${customer}_looker_db_backup.sql.gz.enc
  • ${customer}_looker_fs_backup.tar.gz.enc
  • ${customer}_looker_cmk_key.enc
  • ${customer}_backup.md5
  • metadata.json
  • compute_usage_info.csv
  • fs_perf_info.csv

將這些檔案提供給 Looker 團隊,以便匯入 Looker 託管的執行個體。