設定MySQL服務
mysql
服務提供以MariaDB版本10.2到10.4為基礎的持續性資料儲存,支援XtraDB儲存引擎,並重新實作MySQL 5.6和5.7的功能。
與其他MariaDB或MySQL版本相比,在MariaDB 10.4上重新索引需要更多時間。 請參閱 效能最佳實務 指南中的索引子。
使用下列指示在Pro整合環境與入門環境(包括master
分支)上進行服務設定。
若要啟用MySQL:
-
將必要的名稱、型別和磁碟值(以MB為單位)新增至
.magento/services.yaml
檔案。code language-yaml mysql: type: mysql:<version> disk: 5120
note tip TIP 磁碟空間不足可能導致MySQL錯誤,例如 PDO Exception: MySQL server has gone away
。 請確認您已在.magento/services.yaml
檔案中為服務配置足夠的磁碟空間。 -
設定
.magento.app.yaml
檔案中的關聯性。code language-yaml relationships: database: "mysql:mysql"
-
新增、提交和推送您的程式碼變更。
code language-bash git add .magento/services.yaml .magento.app.yaml && git commit -m "Enable mysql service" && git push origin <branch-name>
設定MySQL資料庫
設定MySQL資料庫時,有以下選項:
schemas
— 結構描述會定義資料庫。 預設結構描述是main
資料庫。endpoints
— 每個端點代表具有特定許可權的認證。 預設端點是mysql
,具有main
資料庫的admin
存取權。properties
— 屬性用於定義其他資料庫組態。
以下是.magento/services.yaml
檔案中的基本範例設定:
mysql:
type: mysql:10.4
disk: 5120
configuration:
properties:
optimizer_switch: "rowid_filter=off"
optimizer_use_condition_selectivity: 1
上述範例中的properties
將預設optimizer
設定修改為「效能最佳實務指南🔗」中的建議。
MariaDB組態選項:
設定多個資料庫使用者
您可以選擇設定多個具有不同許可權的使用者來存取main
資料庫。
依預設,有一個名為mysql
的端點擁有資料庫的管理員存取權。 若要設定多個資料庫使用者,您必須在services.yaml
檔案中定義多個端點,並在.magento.app.yaml
檔案中宣告關係。 對於Pro測試和生產環境,提交Adobe Commerce支援票證以請求其他使用者。
使用巢狀陣列來定義特定使用者存取的端點。 每個端點可以指定一個或多個結構描述(資料庫)的存取權,以及每個結構描述的不同許可權層級。
有效的許可權層級為:
ro
:僅允許SELECT查詢。rw
:允許SELECT查詢和INSERT、UPDATE和DELETE查詢。admin
:允許所有查詢,包括DDL查詢(CREATE TABLE、DROP TABLE等)。
例如:
mysql:
type: mysql:10.4
disk: 5120
configuration:
schemas:
- main
endpoints:
admin:
default_schema: main
privileges:
main: admin
reporter:
privileges:
main: ro
importer:
privileges:
main: rw
properties:
optimizer_switch: "rowid_filter=off"
optimizer_use_condition_selectivity: 1
在上述範例中,admin
端點提供對main
資料庫的管理員層級存取權,reporter
端點提供唯讀存取權,importer
端點提供讀寫存取權,這表示:
admin
使用者擁有資料庫的完整控制權。reporter
使用者只有SELECT許可權。importer
使用者具有SELECT、INSERT、UPDATE和DELETE許可權。
將上述範例中定義的端點新增至.magento.app.yaml
檔案的relationships
屬性。 例如:
relationships:
database: "mysql:admin"
databasereporter: "mysql:reporter"
databaseimporter: "mysql:importer"
DEFINER
存取控制機制。連線到資料庫
直接存取MariaDB資料庫需要您使用SSH登入遠端雲端環境,並連線至資料庫。
-
使用SSH登入遠端環境。
code language-bash magento-cloud ssh
-
從$MAGENTO_CLOUD_RELATIONSHIPS變數中的
database
和type
屬性擷取MySQL登入認證。code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
或
code language-bash php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"])));'
在回應中,尋找MySQL資訊。 例如:
code language-json "database" : [ { "password" : "", "rel" : "mysql", "hostname" : "nnnnnnnn.mysql.service._.magentosite.cloud", "service" : "mysql", "host" : "database.internal", "ip" : "###.###.###.###", "port" : 3306, "path" : "main", "cluster" : "projectid-integration-id", "query" : { "is_master" : true }, "type" : "mysql:10.3", "username" : "user", "scheme" : "mysql" } ],
-
連線到資料庫。
-
首先,使用以下命令:
code language-bash mysql -h database.internal -u <username>
-
對於Pro,請使用下列命令,其中包含從
$MAGENTO_CLOUD_RELATIONSHIPS
變數擷取的主機名稱、連線埠號碼、使用者名稱和密碼。code language-bash mysql -h <hostname> -P <number> -u <username> -p'<password>'
-
magento-cloud db:sql
命令連線到遠端資料庫並執行SQL命令。連線到次要資料庫
有時候,您必須連線到次要資料庫,以改善資料庫效能或解決資料庫鎖定問題。 如果需要此組態,請使用"port" : 3304
建立連線。 請參閱 實作最佳實務 指南中的設定MySQL從屬連線的最佳實務主題。
疑難排解
請參閱下列Adobe Commerce支援文章,以取得MySQL問題疑難排解的說明: