金鑰環遷移會將金鑰從一個金鑰儲存區複製到另一個,讓 DBA 可以將 MySQL 安裝切換到不同的金鑰儲存區。成功的遷移作業會有這個結果
目標金鑰儲存區包含遷移之前已有的金鑰,以及來源金鑰儲存區的金鑰。
來源金鑰儲存區在遷移前後保持不變(因為金鑰是複製而非移動)。
如果目標金鑰儲存區中已存在要複製的金鑰,則會發生錯誤,並且目標金鑰儲存區會還原至遷移前的狀態。
金鑰環使用金鑰環元件和金鑰環外掛程式管理金鑰儲存區。這與遷移策略相關,因為來源和目標金鑰儲存區的管理方式決定了執行特定類型金鑰遷移的程序
從一個金鑰環外掛程式遷移到另一個:MySQL 伺服器具有提供此功能的運作模式。
從金鑰環外掛程式遷移到金鑰環元件:MySQL 伺服器具有提供此功能的運作模式。
從一個金鑰環元件遷移到另一個:mysql_migrate_keyring 公用程式提供此功能。
從金鑰環元件遷移到金鑰環外掛程式:MySQL 伺服器具有提供此功能的運作模式。
以下各節討論離線和線上遷移的特性,並說明如何執行遷移。
金鑰遷移為離線或線上
離線遷移:適用於當您確定本機上沒有任何正在執行的伺服器正在使用來源或目標金鑰儲存區時。在這種情況下,遷移操作可以將金鑰從來源金鑰儲存區複製到目標金鑰儲存區,而不會有執行中的伺服器在操作期間修改金鑰儲存區內容的可能性。
線上遷移:適用於當本機上有正在執行的伺服器正在使用來源金鑰儲存區時。在這種情況下,必須小心防止該伺服器在遷移期間更新金鑰儲存區。這涉及連線到正在執行的伺服器,並指示其暫停金鑰環操作,以便可以安全地將金鑰從來源金鑰儲存區複製到目標金鑰儲存區。金鑰複製完成後,允許正在執行的伺服器恢復金鑰環操作。
當您計畫金鑰遷移時,請使用以下幾點來決定應該進行離線遷移還是線上遷移
請勿執行涉及正在執行的伺服器使用的金鑰儲存區的離線遷移。
線上遷移期間暫停金鑰環操作,是透過連線到正在執行的伺服器,並將其全域
keyring_operations
系統變數設定為OFF
(在金鑰複製之前)和ON
(在金鑰複製之後)來完成的。這有幾個含義keyring_operations
是在 MySQL 5.7.21 中引入的,因此只有當執行中的伺服器是來自 MySQL 5.7.21 或更高版本時,才有可能進行線上遷移。如果執行中的伺服器版本較舊,您必須停止它,執行離線遷移,然後重新啟動它。其他地方所有提及keyring_operations
的遷移說明均受此條件限制。用來連線到正在執行之伺服器的帳戶,必須具有修改
keyring_operations
所需的權限。這些權限是ENCRYPTION_KEY_ADMIN
,以及SYSTEM_VARIABLES_ADMIN
或已棄用的SUPER
權限其中之一。如果線上遷移操作異常退出(例如,如果被強制終止),則
keyring_operations
可能會保持在執行中的伺服器上停用,使其無法執行金鑰環操作。在這種情況下,可能需要連線到正在執行的伺服器並使用以下陳述式手動啟用keyring_operations
SET GLOBAL keyring_operations = ON;
線上金鑰遷移提供了暫停單一執行中伺服器上的金鑰環操作的功能。如果要執行涉及多個正在使用金鑰儲存區的執行中伺服器的遷移,請使用 涉及多個執行中伺服器的金鑰遷移 中描述的程序。
僅當執行中的伺服器允許使用 TLS 的 Socket 連線或 TCP/IP 連線時,才支援使用遷移伺服器的線上金鑰遷移;例如,當伺服器在 Windows 平台上執行且僅允許共用記憶體連線時,則不支援。
如果 MySQL 伺服器以支援金鑰遷移的特殊操作模式呼叫,則會成為遷移伺服器。遷移伺服器不接受用戶端連線。相反地,它只執行足夠長的時間來遷移金鑰,然後退出。遷移伺服器會將錯誤報告到主控台(標準錯誤輸出)。
遷移伺服器支援以下遷移類型
從一個金鑰環外掛程式遷移到另一個金鑰環外掛程式。
從金鑰環外掛程式遷移到金鑰環元件。
從金鑰環元件遷移到金鑰環外掛程式。
遷移伺服器不支援從一個金鑰環元件遷移到另一個金鑰環元件。對於該類型的遷移,請參閱 使用 mysql_migrate_keyring 公用程式的金鑰遷移。
要使用遷移伺服器執行金鑰遷移操作,請確定所需的金鑰遷移選項,以指定涉及哪些金鑰環外掛程式或元件,以及遷移是離線還是線上。
要指示來源金鑰環外掛程式和目標金鑰環外掛程式或元件,請指定以下選項
--keyring-migration-source
:管理要遷移之金鑰的來源金鑰環元件或外掛程式。--keyring-migration-destination
:遷移的金鑰要複製到的目標金鑰環外掛程式或元件。--keyring-migration-to-component
:如果目標是金鑰環元件,則此選項為必填。--keyring-migration-from-component
:如果來源是金鑰環元件,則此選項為必填。
--keyring-migration-source
和--keyring-migration-destination
選項向伺服器表示它應該在金鑰遷移模式下執行。對於金鑰遷移操作,這兩個選項都是強制性的。每個外掛程式或元件都使用其程式庫檔案的名稱指定,包括任何平台特定的副檔名,例如.so
或.dll
。來源和目標必須不同,並且遷移伺服器必須同時支援它們。對於離線遷移,不需要其他金鑰遷移選項。
對於線上遷移,某些執行中的伺服器目前正在使用來源或目標金鑰儲存區。要調用遷移伺服器,請指定其他金鑰遷移選項,以指示如何連線到正在執行的伺服器。這是必要的,以便遷移伺服器可以連線到正在執行的伺服器,並告訴它在遷移操作期間暫停金鑰環的使用。
使用以下任何選項都表示線上遷移
--keyring-migration-host
:執行中的伺服器所在的主機。這始終是本機主機,因為遷移伺服器只能在本地外掛程式和元件管理的金鑰儲存區之間遷移金鑰。--keyring-migration-user
、--keyring-migration-password
:用於連線到執行中伺服器的帳戶憑證。--keyring-migration-port
:對於 TCP/IP 連線,要連線到執行中伺服器的埠號。--keyring-migration-socket
:對於 Unix Socket 檔案或 Windows 具名管道連線,要連線到執行中伺服器的 Socket 檔案或具名管道。
有關金鑰遷移選項的更多詳細資訊,請參閱 第 8.4.4.15 節,「金鑰環命令選項」。
使用金鑰遷移選項啟動遷移伺服器,這些選項指示來源和目標金鑰儲存區以及遷移是離線還是線上,可能還有其他選項。請記住以下注意事項
可能需要其他伺服器選項;也可能需要其他非金鑰環選項。指定這些選項的一種方法是使用
--defaults-file
來命名包含所需選項的選項檔。遷移伺服器期望路徑名稱選項值為完整路徑。相對路徑名稱可能不會像您預期的那樣解析。
在金鑰遷移模式下調用伺服器的使用者不得為
root
作業系統使用者,除非使用--user
選項指定非root
的使用者名稱,以該使用者身份執行伺服器。在金鑰遷移模式下執行的伺服器使用者,必須具有讀取和寫入任何本地金鑰環檔案的權限,例如基於檔案的外掛程式的資料檔案。
如果您從與通常用於執行 MySQL 的系統帳戶不同的帳戶調用遷移伺服器,則可能會建立在正常操作期間伺服器無法存取的金鑰環目錄或檔案。假設 mysqld 通常以
mysql
作業系統使用者身分執行,但您以isabel
身分登入時調用了遷移伺服器。遷移伺服器建立的任何新目錄或檔案都由isabel
擁有。當以mysql
作業系統使用者身分執行的伺服器嘗試存取isabel
擁有的檔案系統物件時,後續的啟動將失敗。為避免此問題,請以
root
作業系統使用者身分啟動遷移伺服器,並提供--user=
選項,其中user_name
user_name
是通常用於執行 MySQL 的系統帳戶。或者,在遷移之後,檢查與金鑰環相關的檔案系統物件,並使用 chown、chmod 或類似的命令,根據需要變更其所有權和權限,以便執行中的伺服器可以存取這些物件。
兩個金鑰環外掛程式之間進行離線遷移的範例命令列(在單行上輸入命令)
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
--keyring-migration-source=keyring_okv.so
--keyring-migration-destination=keyring_aws.so
兩個金鑰環外掛程式之間進行線上遷移的範例命令列
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
--keyring-migration-source=keyring_okv.so
--keyring-migration-destination=keyring_aws.so
--keyring-migration-host=127.0.0.1
--keyring-migration-user=root
--keyring-migration-password=root_password
若要在目標是金鑰環元件而非金鑰環外掛程式時執行遷移,請指定 --keyring-migration-to-component
選項,並將元件命名為 --keyring-migration-destination
選項的值。
從金鑰環外掛程式到金鑰環元件進行離線遷移的範例命令列
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
--keyring-migration-to-component
--keyring-migration-source=keyring_okv.so
--keyring-migration-destination=component_keyring_encrypted_file.so
請注意,在這種情況下,未指定 keyring_encrypted_file_password
值。元件資料檔案的密碼列在元件組態檔中。
從金鑰環外掛程式線上遷移到金鑰環元件的範例命令列
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
--keyring-migration-to-component
--keyring-migration-source=keyring_okv.so
--keyring-migration-destination=component_keyring_encrypted_file.so
--keyring-migration-host=127.0.0.1
--keyring-migration-user=root
--keyring-migration-password=root_password
若要執行遷移,當來源是金鑰環元件而非金鑰環外掛程式時,請指定 --keyring-migration-from-component
選項,並將元件名稱指定為 --keyring-migration-source
選項的值。
從金鑰環元件離線遷移到金鑰環外掛程式的範例命令列
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
--keyring-migration-from-component
--keyring-migration-source=component_keyring_file.so
--keyring-migration-destination=keyring_okv.so
--keyring-okv-conf-dir=/usr/local/mysql/mysql-keyring-okv
從金鑰環元件線上遷移到金鑰環外掛程式的範例命令列
mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
--keyring-migration-from-component
--keyring-migration-source=component_keyring_file.so
--keyring-migration-destination=keyring_okv.so
--keyring-okv-conf-dir=/usr/local/mysql/mysql-keyring-okv
--keyring-migration-host=127.0.0.1
--keyring-migration-user=root
--keyring-migration-password=root_password
金鑰遷移伺服器執行遷移操作的方式如下
(僅限線上遷移)使用連線選項連線到正在執行的伺服器。
(僅限線上遷移)在正在執行的伺服器上停用
keyring_operations
。載入來源和目的地金鑰儲存區的金鑰環外掛程式或元件程式庫。
將金鑰從來源金鑰儲存區複製到目的地。
卸載來源和目的地金鑰儲存區的金鑰環外掛程式或元件程式庫。
(僅限線上遷移)在正在執行的伺服器上啟用
keyring_operations
。(僅限線上遷移)中斷與正在執行的伺服器的連線。
若金鑰遷移期間發生錯誤,目的地金鑰儲存區會還原至遷移前的狀態。
成功完成線上金鑰遷移操作後,可能需要重新啟動正在執行的伺服器
如果正在執行的伺服器在遷移前使用來源金鑰儲存區,且在遷移後應繼續使用,則遷移後不需要重新啟動。
如果正在執行的伺服器在遷移前使用目的地金鑰儲存區,且在遷移後應繼續使用,則應該在遷移後重新啟動,以載入所有已遷移到目的地金鑰儲存區的金鑰。
如果正在執行的伺服器在遷移前使用來源金鑰儲存區,但在遷移後應使用目的地金鑰儲存區,則必須重新設定以使用目的地金鑰儲存區並重新啟動。在此情況下,請注意,雖然在遷移期間,正在執行的伺服器會暫停修改來源金鑰儲存區,但在遷移和後續重新啟動之間的時間間隔內不會暫停。應注意伺服器在此期間不要修改來源金鑰儲存區,因為任何此類變更都不會反映在目的地金鑰儲存區中。
mysql_migrate_keyring 公用程式會將金鑰從一個金鑰環元件遷移到另一個金鑰環元件。它不支援涉及金鑰環外掛程式的遷移。對於這種類型的遷移,請使用在金鑰遷移模式下運作的 MySQL 伺服器;請參閱 使用遷移伺服器的金鑰遷移。
若要使用 mysql_migrate_keyring 執行金鑰遷移操作,請判斷需要哪些金鑰遷移選項來指定涉及哪些金鑰環元件,以及遷移是離線還是線上
若要指示來源和目的地金鑰環元件及其位置,請指定下列選項
--source-keyring
:管理要遷移的金鑰的來源金鑰環元件。--destination-keyring
:要將遷移的金鑰複製到的目的地金鑰環元件。--component-dir
:包含金鑰環元件程式庫檔案的目錄。這通常是本機 MySQL 伺服器的plugin_dir
系統變數的值。
這三個選項都是必要的。每個金鑰環元件名稱都是不含任何平台特定副檔名 (例如
.so
或.dll
) 的元件程式庫檔案名稱。例如,若要使用程式庫檔案為component_keyring_file.so
的元件,請將選項指定為--source-keyring=component_keyring_file
。來源和目的地必須不同,且 mysql_migrate_keyring 必須同時支援兩者。對於離線遷移,不需要其他選項。
對於線上遷移,某些正在執行的伺服器目前正在使用來源或目的地金鑰儲存區。在此情況下,請指定
--online-migration
選項來表示線上遷移。此外,請指定連線選項,指示如何連線到正在執行的伺服器,以便 mysql_migrate_keyring 可以連線到該伺服器,並告知其在遷移操作期間暫停金鑰環的使用。--online-migration
選項通常與下列連線選項搭配使用--host
:正在執行的伺服器所在的主機。這永遠是本機主機,因為 mysql_migrate_keyring 只能在本機元件管理的金鑰儲存區之間遷移金鑰。--user
、--password
:用來連線到正在執行的伺服器的帳戶憑證。--port
:對於 TCP/IP 連線,要連線到正在執行的伺服器的連接埠號碼。--socket
:對於 Unix Socket 檔案或 Windows 具名管道連線,要連線到正在執行的伺服器的 Socket 檔案或具名管道。
如需所有可用選項的說明,請參閱 第 6.6.8 節,「mysql_migrate_keyring — 金鑰環金鑰遷移公用程式」。
啟動 mysql_migrate_keyring,並使用選項指示來源和目的地金鑰儲存區,以及遷移是離線還是線上,可能還包含其他選項。請記住下列注意事項
叫用 mysql_migrate_keyring 的使用者不得為
root
作業系統使用者。叫用 mysql_migrate_keyring 的使用者必須具有讀取和寫入任何本機金鑰環檔案的權限,例如檔案式外掛程式的資料檔案。
如果您從與通常用來執行 MySQL 的系統帳戶不同的系統帳戶叫用 mysql_migrate_keyring,它可能會建立在正常操作期間伺服器無法存取的金鑰環目錄或檔案。假設 mysqld 通常以
mysql
作業系統使用者身分執行,但您以isabel
身分登入時叫用 mysql_migrate_keyring。mysql_migrate_keyring 建立的任何新目錄或檔案都歸isabel
所有。當以mysql
作業系統使用者身分執行的伺服器嘗試存取isabel
擁有的檔案系統物件時,後續啟動會失敗。為了避免此問題,請以
mysql
作業系統使用者身分叫用 mysql_migrate_keyring。或者,在遷移之後,檢查與金鑰環相關的檔案系統物件,並視需要使用 chown、chmod 或類似命令變更其所有權和權限,讓正在執行的伺服器可以存取這些物件。
假設您想要將金鑰從 component_keyring_file
遷移到 component_keyring_encrypted_file
,且本機伺服器將其金鑰環元件程式庫檔案儲存在 /usr/local/mysql/lib/plugin
中。
如果沒有正在執行的伺服器正在使用金鑰環,則允許離線遷移。請像這樣叫用 mysql_migrate_keyring (在單行輸入命令)
mysql_migrate_keyring
--component-dir=/usr/local/mysql/lib/plugin
--source-keyring=component_keyring_file
--destination-keyring=component_keyring_encrypted_file
如果正在執行的伺服器正在使用金鑰環,則必須改為執行線上遷移。在此情況下,必須提供 --online-migration
選項,以及指定要連線到哪個伺服器和要使用的 MySQL 帳戶所需的任何連線選項。
下列命令會執行線上遷移。它會使用 TCP/IP 連線和 admin
帳戶連線到本機伺服器。此命令會提示您輸入密碼,您應該在出現提示時輸入密碼
mysql_migrate_keyring
--component-dir=/usr/local/mysql/lib/plugin
--source-keyring=component_keyring_file
--destination-keyring=component_keyring_encrypted_file
--online-migration --host=127.0.0.1 --user=admin --password
mysql_migrate_keyring 執行遷移操作的方式如下
(僅限線上遷移)使用連線選項連線到正在執行的伺服器。
(僅限線上遷移)在正在執行的伺服器上停用
keyring_operations
。載入來源和目的地金鑰儲存區的金鑰環元件程式庫。
將金鑰從來源金鑰儲存區複製到目的地。
卸載來源和目的地金鑰儲存區的金鑰環元件程式庫。
(僅限線上遷移)在正在執行的伺服器上啟用
keyring_operations
。(僅限線上遷移)中斷與正在執行的伺服器的連線。
若金鑰遷移期間發生錯誤,目的地金鑰儲存區會還原至遷移前的狀態。
成功完成線上金鑰遷移操作後,可能需要重新啟動正在執行的伺服器
如果正在執行的伺服器在遷移前使用來源金鑰儲存區,且在遷移後應繼續使用,則遷移後不需要重新啟動。
如果正在執行的伺服器在遷移前使用目的地金鑰儲存區,且在遷移後應繼續使用,則應該在遷移後重新啟動,以載入所有已遷移到目的地金鑰儲存區的金鑰。
如果正在執行的伺服器在遷移前使用來源金鑰儲存區,但在遷移後應使用目的地金鑰儲存區,則必須重新設定以使用目的地金鑰儲存區並重新啟動。在此情況下,請注意,雖然在遷移期間,正在執行的伺服器會暫停修改來源金鑰儲存區,但在遷移和後續重新啟動之間的時間間隔內不會暫停。應注意伺服器在此期間不要修改來源金鑰儲存區,因為任何此類變更都不會反映在目的地金鑰儲存區中。
線上金鑰遷移允許暫停單個運作伺服器上的金鑰環操作。若要執行多個運作伺服器正在使用相關金鑰儲存區的遷移,請使用此程序
手動連線至每個運作中的伺服器,並設定
keyring_operations=OFF
。這可確保沒有運作中的伺服器正在使用來源或目標金鑰儲存區,並滿足離線遷移所需的條件。使用遷移伺服器或 mysql_migrate_keyring,為每個已暫停的伺服器執行離線金鑰遷移。
手動連線至每個運作中的伺服器,並設定
keyring_operations=ON
。
所有運作中的伺服器都必須支援 keyring_operations
系統變數。任何不支援的伺服器都必須在遷移前停止,並在遷移後重新啟動。