设置MySQL服务
mysql
服务提供基于MariaDB版本10.2到10.4的永久数据存储,支持XtraDB存储引擎并重新实施了MySQL 5.6和5.7中的功能。
与其他MariaDB或MySQL版本相比,在MariaDB 10.4上重新索引需要更多时间。 请参阅 性能最佳实践 指南中的索引器。
请按照以下说明在专业集成环境和入门环境(包括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_RELATIONSHIP变量中的
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问题疑难解答的帮助: