设置MySQL服务

mysql服务提供基于MariaDB版本10.2到10.4的永久数据存储,支持XtraDB存储引擎并重新实施了MySQL 5.6和5.7中的功能。

与其他MariaDB或MySQL版本相比,在MariaDB 10.4上重新索引需要更多时间。 请参阅​ 性能最佳实践 ​指南中的索引器

WARNING
将MariaDB从版本10.1升级到10.2时要小心。MariaDB 10.1是支持​_XtraDB_​作为存储引擎的最新版本。 MariaDB 10.2使用​_InnoDB_​作为存储引擎。 从10.1升级到10.2后,无法回滚更改。 Adobe Commerce支持这两个存储引擎;但是,您必须检查项目使用的扩展和其他系统,以确保它们与MariaDB 10.2兼容。查看10.1和10.2之间的不兼容更改。

请按照以下说明在专业集成环境和入门环境(包括master分支)上进行服务设置。

NOTE
提交Adobe Commerce支持票证以更改Pro生产和暂存环境中的服务配置。

启用MySQL

  1. 将所需的名称、类型和磁盘值(以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文件中为服务分配足够的磁盘空间。
  2. .magento.app.yaml文件中配置关系。

    code language-yaml
    relationships:
        database: "mysql:mysql"
    
  3. 添加、提交和推送代码更改。

    code language-bash
    git add .magento/services.yaml .magento.app.yaml && git commit -m "Enable mysql service" && git push origin <branch-name>
    
  4. 验证服务关系

TIP
在初始服务设置之后,您可以通过更新services.yaml.magento.app.yaml配置文件来更改已安装服务的软件版本。 有关升级或降级服务的指导,请参阅更改服务版本

配置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配置选项

选项
描述
默认值
default_charset
默认字符集。
utf8mb4
default_collation
默认归类。
utf8mb4_unicode_ci
max_allowed_packet
数据包的最大大小(以MB为单位)。 范围1100
16
optimizer_switch
设置查询优化器的值。 请参阅MariaDB文档
optimizer_use_condition_selectivity
选择优化程序使用的统计信息。 范围15。 请参阅MariaDB文档
4 for 10.4及更高版本

设置多个数据库用户

或者,您可以设置多个具有不同权限的用户来访问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"
NOTE
如果配置一个MySQL用户,则不能对存储过程和视图使用DEFINER访问控制机制。

连接到数据库

直接访问MariaDB数据库需要使用SSH登录到远程云环境,然后连接到数据库。

  1. 使用SSH登录到远程环境。

    code language-bash
    magento-cloud ssh
    
  2. $MAGENTO_CLOUD_RELATIONSHIP变量中的databasetype属性检索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"
       }
    ],
    
  3. 连接到数据库。

    • 首先,使用以下命令:

      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>'
      
TIP
您可以使用magento-cloud db:sql命令连接到远程数据库并运行SQL命令。

连接到辅助数据库

IMPORTANT
此功能仅在Pro Production和Staging群集上可用。

有时,必须连接到辅助数据库以提高数据库性能或解决数据库锁定问题。 如果需要此配置,请使用"port" : 3304建立连接。 请参阅​ 实施最佳实践 ​指南中的配置MySQL从属连接的最佳实践。

故障排除

请参阅以下Adobe Commerce支持文章,以获取有关MySQL问题疑难解答的帮助:

recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26