全部產品
Search
文件中心

PolarDB:多租戶管理

更新時間:Jan 17, 2025

PolarDB MySQL版提供了多租戶模式,允許多個租戶在同一叢集下共用計算資源和儲存資源,同時保證各租戶之間的資料隔離和資源隔離。各租戶僅能訪問其自身的資料,不會出現資源爭搶現象,從而保證業務的穩定運行。

技術原理

說明

DB_1與user_1雖然在系統租戶、普通租戶A及普通租戶B中均存在,但它們是不同的資料庫和使用者,僅名稱相同。

術語

租戶:租戶(tenant)為實現多租戶模式所提出的概念,租戶的層級結構在一個資料庫叢集之下,在資料庫與使用者之上。租戶分為系統租戶普通租戶

  • 系統租戶系統租戶是為適應原有模式下的使用者而設立的。在資料庫叢集中,原有的資料庫和使用者預設歸屬於系統租戶。當通過系統租戶下的使用者串連資料庫時,若該使用者具備相應的資料庫存取權限,則可以訪問所有租戶下的資料庫。

  • 普通租戶:普通租戶需在系統租戶下進行建立。普通租戶之間的資料庫與使用者完全隔離,無法相互訪問,並且普通租戶也無法訪問系統租戶下的資料庫。在進行CPU資源調度時,普通租戶根據min_cpu的值是否大於0,將其分為獨佔型租戶共用型租戶

    • 獨佔型租戶min_cpu>0,需要保證任何時刻的CPU資源不小於min_cpu。

    • 共用型租戶min_cpu=0。

    獨佔型租戶共用型租戶可以通過調整min_cpu的值進行相互轉換。

資源配置:資源配置(resource_config)是為了實現各租戶之間資源隔離與資源調度所提出的概念,一個資源配置描述了一個租戶下能夠使用的資源。當前僅支援對CPU資源進行隔離以及調度。

使用前提

若要開啟多租戶模式,您的叢集需滿足如下條件:

資料庫引擎MySQL 8.0.2及以上,產品版本企業版系列叢集版,且叢集的節點規格保持一致

說明

多租戶模式目前處於灰階發布階段。如有需求,請通過DingTalk群聯絡相關工作人員來開啟該功能。功能開啟後,您需要重啟目的地組群才會生效。

DingTalk群號為:59535005981。

注意事項

  • 暫不支援租戶下的Binlog資訊同步。

  • 暫不支援對使用者部分撤銷許可權(Partial Revoke)。

快速體驗

  1. 開啟單機多租戶模式。

    說明

    多租戶模式目前處於灰階發布階段。如有需求,請通過DingTalk群聯絡相關工作人員來開啟該功能。功能開啟後,您需要重啟目的地組群才會生效。

    DingTalk群號為:59535005981。

  2. 使用高許可權帳號串連資料庫。

  3. 建立資源配置r1r2

    CREATE resource_config r1 min_cpu 1 max_cpu 2;
    CREATE resource_config r2 min_cpu 1 max_cpu 4;
    說明
    • 請根據您叢集的節點規格來填寫min_cpu和max_cpu。

    • 任意一個租戶的min_cpu不超過當前叢集節點規格的核心數-1,需要為系統租戶預留至少1個CPU。否則,在建立租戶時,租戶與資源配置會綁定失敗。

  4. 建立租戶tn1tn2。建立租戶時需綁定上述建立的資源配置。

    CREATE tenant tn1 resource_config r1;
    CREATE tenant tn2 resource_config r2;
    說明

    需要保證所有租戶的資源配置中min_cpu之和不能超過當前叢集節點規格中的核心數-1

  5. 建立使用者u1u2,資料庫db1db2

    -- 在租戶 tn1 下建立使用者 u1
    CREATE USER 'u1@tn1' IDENTIFIED BY 'password';
    
    -- 在租戶 tn1 下建立資料庫 db1
    CREATE DATABASE `db1@tn1`;
    
    -- 在租戶 tn2 下建立使用者 u2
    CREATE USER 'u2@tn2' IDENTIFIED BY 'password';
    
    -- 在租戶 tn2 下建立資料庫 db2
    CREATE DATABASE `db2@tn2`;
    說明

    使用高許可權帳號建立使用者與資料庫時,需在使用者名稱或資料庫名後添加@租戶名稱尾碼進行操作。

  6. 對使用者u1u2授權。

    -- 給使用者 u1 授予租戶 tn1 的許可權。
    GRANT ALL PRIVILEGES ON `%@tn1`.* TO 'u1@tn1'@'%' WITH GRANT OPTION;
    
    -- 給使用者 u2 授予租戶 tn2 的許可權。
    GRANT ALL PRIVILEGES ON `%@tn2`.* TO 'u1@tn2'@'%' WITH GRANT OPTION;
  7. 現在,您可以使用使用者u1@tn1u2@tn2來驗證不同租戶之間的資料和資源隔離效果。

  8. (可選)查看上述所建立的租戶、使用者及資料庫。

    • 租戶:使用高許可權帳號串連資料庫,並通過SELECT語句來查看租戶。樣本如下:

      SELECT * FROM mysql.tenants;
    • 使用者:您可以前往PolarDB控制台配置與管理 > 賬戶管理頁面查看。

      • 賬戶名不帶@租戶名稱尾碼的為系統租戶下的使用者。

      • 賬戶名@租戶名稱尾碼的為對應租戶下的使用者。

    • 資料庫:您可以前往PolarDB控制台配置與管理 > 資料庫管理頁面查看。

      • 資料庫名不帶@租戶名稱尾碼的為系統租戶下的資料庫。

      • 資料庫名@租戶名稱尾碼的為對應租戶下的資料庫。

功能詳解

開啟單機多租戶模式

說明

多租戶模式目前處於灰階發布階段。如有需求,請通過DingTalk群聯絡相關工作人員來開啟該功能。功能開啟後,您需要重啟目的地組群才會生效。

DingTalk群號為:59535005981。

開啟資料隔離功能

開啟資料隔離功能,需要將參數enable_multi_tenant的值設定為ON

開啟資源隔離功能

開啟資源隔離功能,需先開啟資料隔離功能。需要將參數enable_multi_tenantthread_pool_multi_tenant_enabled以及thread_pool_enabled的值均設定為ON,且需要保證參數thread_pool_size的值與目的地組群的節點規格的核心數保持一致。

  • 查看節點規格

    您可以在目的地組群的基本資料頁面的資料庫節點地區查看叢集的節點規格。如下圖:

    image

  • 設定參數

    • enable_multi_tenantthread_pool_multi_tenant_enabled請聯絡相關工作人員來開啟。

    • thread_pool_enabledthread_pool_size您可以前往PolarDB控制台配置與管理 > 參數配置頁面來修改參數。更多資訊,請參見設定叢集參數和節點參數

資源管理

PolarDB MySQL版單機多租戶模式下的資源隔離僅支援CPU資源隔離。在建立資源配置時,指定此資源配置所對應的CPU資源限制條件min_cpumax_cpu。當某一租戶綁定此資源限制條件時便可限制此租戶下使用者串連使用的CPU資源。

建立資源配置

使用高許可權帳號串連資料庫,並通過CREATE語句來建立資源配置。

文法

CREATE resource_config <resource_config_name> min_cpu <min_cpu> max_cpu <min_cpu>;

樣本

CREATE resource_config r1 min_cpu 0 max_cpu 1;
CREATE resource_config r2 min_cpu 1 max_cpu 4;
說明
  • 請根據您叢集的節點規格來填寫min_cpu和max_cpu。

  • 建立資源配置時,將不會檢測資源配置資訊與叢集節點規格的關係,僅當租戶綁定資源限制條件時才會進行檢測。

  • 任意一個租戶的min_cpu不超過當前叢集節點規格的核心數-1,需要為系統租戶預留至少1個CPU。否則,在建立租戶時,租戶與資源配置會綁定失敗。

  • 系統租戶下的使用者可使用的資源為CPU資源總和減去所有獨佔型租戶佔用的CPU資源

查看資源配置

使用高許可權帳號串連資料庫,並通過SELECT語句來查看資源配置。

樣本

SELECT * FROM mysql.tenant_resource_config;
+----------------------+-------------------------+-------------------------+
| resource_config_name | resource_config_min_cpu | resource_config_max_cpu |
+----------------------+-------------------------+-------------------------+
| r1                   |                       0 |                       1 |
| r2                   |                       1 |                       4 |
+----------------------+-------------------------+-------------------------+

修改資源配置

使用高許可權帳號串連資料庫,並通過ALTER語句來修改資源配置。

文法

ALTER resource_config <resource_config_name> min_cpu <min_cpu> max_cpu <min_cpu>;

樣本

ALTER resource_config r2 min_cpu 1 max_cpu 2;
說明
  • 若有租戶正在使用該資源配置,則無法進行更新操作。

  • 請根據您叢集的節點規格來填寫min_cpu和max_cpu。

  • 建立資源配置時,將不會檢測資源配置資訊與叢集節點規格的關係,僅當租戶綁定資源限制條件時才會進行檢測。

  • 任意一個租戶的min_cpu不超過當前叢集節點規格的核心數-1,需要為系統租戶預留至少1個CPU。否則,在建立租戶時,租戶與資源配置會綁定失敗。

  • 系統租戶下的使用者可使用的資源為CPU資源總和減去所有獨佔型租戶佔用的CPU資源

刪除資源配置

使用高許可權帳號串連資料庫,並通過DROP語句來刪除資源配置。

文法

DROP resource_config <resource_config_name>;

樣本

DROP resource_config r1;
說明

若有租戶正在使用該資源配置,則無法進行刪除操作。

租戶管理

租戶分為系統租戶和普通租戶。系統租戶是為適應原有模式下的使用者所設立的,不涉及管理操作。此處所管理的對象為普通租戶。

建立租戶

使用高許可權帳號串連資料庫,並通過CREATE語句來建立新租戶。

文法

CREATE tenant <tenant_name> resource_config <resource_config_name>;

樣本

CREATE tenant tn1 resource_config r1;
說明
  • 租戶名稱的長度不能超過10個字元,並且支援包含大寫字母、小寫字母、數字或底線(_)。

  • 需要保證所有租戶的資源配置中min_cpu之和不能超過當前叢集節點規格中的核心數-1

查看租戶

使用高許可權帳號串連資料庫,並通過SELECT語句來查看租戶。

樣本

SELECT * FROM mysql.tenants;
+-------------+----------------------+
| tenant_name | resource_config_name |
+-------------+----------------------+
| tn1         | r1                   |
+-------------+----------------------+

修改租戶

使用高許可權帳號串連資料庫,並通過ALTER語句來修改租戶。

文法

ALTER tenant <tenant_name> resource_config <resource_config_name>;

樣本

ALTER tenant tn1 resource_config r2;
說明
  • 租戶名稱的長度不能超過10個字元,並且支援包含大寫字母、小寫字母、數字或底線(_)。

  • 需要保證所有租戶的資源配置中min_cpu之和不能超過當前叢集節點規格中的核心數-1

刪除租戶

使用高許可權帳號串連資料庫,並通過DROP語句來刪除租戶。

文法

DROP tenant <tenant_name>;

樣本

DROP tenant tn1;
說明
  • 刪除租戶時,需要保證對應租戶下的資料庫已經被刪除。否則,將無法刪除對應租戶。

  • 刪除租戶時,會預設將對應租戶下的所有使用者刪除,請謹慎操作。

使用者管理

使用者分為系統租戶下的使用者和普通租戶下的使用者。系統租戶下的使用者為原有模式下的使用者,具體管理方式請參見帳號管理此處所管理的對象為普通租戶下的使用者。

您可以在系統租戶下或普通租戶下進行相應的管理操作。

說明
  • 在系統租戶下建立或刪除使用者時,需要以'使用者名稱稱@租戶名稱'的方式對使用者進行操作。

  • 開啟單機多租戶模式下,使用者名稱稱的長度被限制為不超過20個字元,並僅可包含大寫字母、小寫字母、數字和底線(_)。

  • 租戶內不可以建立以下使用者:

    • replicator

    • root

    • mysql.infoschema

    • mysql.session

    • mysql.sys

    • aurora

    • aliyun_root

  • 租戶下的使用者不能擁有__recycle_bin__mysqlperformance_schemasys庫許可權。

系統租戶

在系統租戶下,使用高許可權帳號建立和刪除某普通租戶下的使用者。

建立使用者

使用高許可權帳號串連資料庫,並通過CREATE語句來建立普通租戶下的使用者。

文法

CREATE USER <user_name>@<tenant_name> [IDENTIFIED BY <password>];

樣本

-- 不帶密碼
CREATE USER 'u1@tn1';
-- 帶密碼
CREATE USER 'u1@tn1' IDENTIFIED BY 'password';

刪除使用者

使用高許可權帳號串連資料庫,並通過DROP語句來刪除普通租戶下的使用者。

文法

DROP USER <user_name>@<tenant_name>;

樣本

DROP USER 'u1@tn1';

使用者授權

使用高許可權帳號串連資料庫,對普通租戶下的使用者進行授權。

  • 授予租戶下的許可權。授權完成後,該使用者即可擁有當前租戶下所有資料庫的存取權限了。

    樣本:為使用者u1授予租戶tn1下的許可權。

    GRANT ALL PRIVILEGES ON `%@tn1`.* to 'u1@tn1'@'%' WITH GRANT OPTION;
  • 授予CREATE USER許可權。授權完成後,該使用者即可在當前租戶下建立其他使用者了。

    樣本:為使用者u1授予CREATE USER許可權。

    GRANT CREATE USER ON *.* TO 'u1@tn1'@'%';
  • 查看使用者擁有的許可權。

    樣本:查看使用者u1擁有的許可權。

    SHOW GRANTS FOR 'u1@tn1';
    +---------------------------------------------------------------------+
    | Grants for u1@tn1@%                                                 |
    +---------------------------------------------------------------------+
    | GRANT CREATE USER ON *.* TO `u1@tn1`@`%`                            |
    | GRANT ALL PRIVILEGES ON `%@tn1`.* TO `u1@tn1`@`%` WITH GRANT OPTION |
    +---------------------------------------------------------------------+

普通租戶

在普通租戶下,使用租戶下的使用者建立和刪除當前租戶下的使用者。操作前,請確認您登入的使用者具有CREATE USER許可權。如何授權,請參見使用者管理 > 系統租戶 > 使用者授權

建立使用者

使用租戶下的使用者串連資料庫,並通過CREATE語句來建立當前租戶的使用者。如何建立租戶下的使用者,請參見使用者管理 > 系統租戶 > 建立使用者

文法

CREATE USER <user_name> [IDENTIFIED BY <password>];

樣本

-- 不帶密碼
CREATE USER 'u2';
-- 帶密碼
CREATE USER 'u2' IDENTIFIED BY 'password';

刪除使用者

使用租戶下的使用者串連資料庫,並通過DROP語句來刪除當前租戶下的使用者。

文法

DROP USER <user_name>;

樣本

DROP USER 'u2';

使用者授權

使用租戶下的使用者串連資料庫,對當前租戶下的使用者進行授權。

  • 對當前租戶下的使用者進行全域授權。

    文法

    GRANT SELECT ON *.* TO <user_name>

    樣本

    GRANT SELECT ON *.* TO 'u2';
  • 對當前租戶下的使用者進行資料庫授權。

    文法

    GRANT SELECT ON <database_name>.* TO <user_name>

    樣本

    GRANT SELECT ON db.* TO 'u2';
說明
  • 多租戶模式下,暫不支援將資料庫授權和全域授權混合使用,若混合使用,可能無法正確鑒別許可權。建議僅使用全域授權或僅使用資料庫層級的授權。

  • 查看使用者擁有的許可權,請參見系統租戶 > 使用者授權

串連資料庫

通過用戶端來串連資料庫時,需要將使用者指定為使用者名稱稱@租戶名稱的形式。串連成功後,該使用者將受到對應租戶下的資源限制。

文法

mysql -h <host> -P <port> -u <user_name>@<tenant_name> -p

樣本

mysql -h pc... -P 3306 -u u1@tn1 -p
Enter password: 

資料庫管理

資料庫分為系統租戶下的資料庫和普通租戶下的資料庫。系統租戶下的資料庫為原有模式下的資料庫,具體管理方式請參見資料庫管理此處所管理的對象為普通租戶下的資料庫。

您可以在系統租戶下或普通租戶下進行相應的管理操作。

說明
  • 在系統租戶下建立或刪除資料庫時,需要以'資料庫名稱@租戶名稱'的方式對資料庫進行操作。

  • 開啟單機多租戶模式下,資料庫名稱的長度被限制為不超過50個字元,並且僅可包含大寫字母、小寫字母、數字和底線(_)。

  • 租戶內不可以建立以下資料庫:

    • information_schema

    • performance_schema

    • mysql

    • sys

    • __recycle_bin__

    • query_rewrite

  • 若在租戶下建立dbms_ccldbms_outlndbms_consensus等庫,租戶下的使用者將無法調用資料庫中的內建預存程序。此時,您可以使用CALL dbms_admin.show_native_procedure();來查看資料庫中所有的內建預存程序。

  • 若在租戶下建立的資料庫名稱與內建預存程序中的schema_name相同,將無法調用該資料庫下的內建預存程序。

系統租戶

在系統租戶下,使用高許可權帳號建立和刪除某普通租戶下的資料庫。

建立資料庫

使用高許可權帳號串連資料庫,並通過CREATE語句來建立普通租戶下的資料庫。

文法

CREATE DATABASE <database_name>@<tenant_name>;

樣本

CREATE DATABASE `db1@tn1`;

刪除資料庫

使用高許可權帳號串連資料庫,並通過DROP語句來刪除普通租戶下的資料庫。

文法

DROP DATABASE <database_name>@<tenant_name>;

樣本

DROP DATABASE `db1@tn1`;

普通租戶

在普通租戶下,使用租戶下的使用者建立和刪除當前租戶下的資料庫。操作前,請確認您登入的使用者具有全域許可權。如何授權,請參見使用者管理 > 系統租戶 > 使用者授權

建立資料庫

使用租戶下的使用者串連資料庫,並通過CREATE語句來建立當前租戶的資料庫。如何建立租戶下的使用者,請參見使用者管理 > 系統租戶 > 建立使用者

文法

CREATE DATABASE <database_name>;

樣本

CREATE DATABASE `db2`;

刪除資料庫

使用租戶下的使用者串連資料庫,並通過DROP語句來刪除當前租戶下的資料庫。

文法

DROP DATABASE <database_name>;

樣本

DROP DATABASE `db2`;

查看線程組與租戶綁定關係

  1. 使用高許可權帳號串連資料庫,並通過以下SQL語句來查看線程組與租戶的綁定關係:

    SELECT * FROM information_schema.thread_pool_status;
  2. 返回樣本如下所示:

    在開啟多租戶資源隔離模式下,查詢結果中會顯示此線程組所綁定的獨佔型租戶。若查詢結果中的租戶資訊為空白,則表示線程組被多個租戶共用。

    TENANT_NAME:線程池中當前線程組所綁定的獨佔型租戶名。

    +----+--------------+---------------------+----------------------+-------------------+----------------+-------------+
    | ID | THREAD_COUNT | ACTIVE_THREAD_COUNT | WAITING_THREAD_COUNT | DUMP_THREAD_COUNT |      ...       | TENANT_NAME |
    +----+--------------+---------------------+----------------------+-------------------+----------------+-------------+
    |  0 |            2 |                   0 |                    0 |                 0 |      ...       |             |
    |  1 |            2 |                   1 |                    0 |                 0 |      ...       | tn1         |
    |  2 |            4 |                   0 |                    0 |                 1 |      ...       |             |
    |  3 |            2 |                   0 |                    0 |                 0 |      ...       |             |
    |  4 |            3 |                   0 |                    0 |                 1 |      ...       |             |
    +----+--------------+---------------------+----------------------+-------------------+----------------+-------------+

查看審計日誌

在多租戶模式下進行的操作,審計日誌中將會展示其使用的物理資料庫和物理使用者等資訊。

例如,在租戶t2下,使用者u1db3資料庫內執行的SQL語句被記錄在審計日誌中,資料庫列將顯示為db3@t2使用者列將顯示為u1@t2

image