一般MySQL准则

有关支持的MySQL版本,请参阅系统要求

Adobe 强烈 ​建议您在设置数据库时遵循以下标准:

  • Adobe Commerce使用MySQL数据库触发器来改进重新索引期间的数据库访问。 当索引器模式设置为计划时,将创建这些项。 应用程序不支持数据库中的任何自定义触发器,因为自定义触发器可能会与将来的Adobe Commerce版本不兼容。
  • 在继续之前,请熟悉这些潜在的MySQL触发器限制
  • 要增强数据库的安全状态,请启用STRICT_ALL_TABLES SQL模式以防止存储无效的数据值,这可能会导致不必要的数据库交互。
  • Adobe Commerce ​支持基于MySQL语句的复制。 确保仅使用​ 1} 基于行的复制
WARNING
Adobe Commerce当前在事务中使用CREATE TEMPORARY TABLE语句,这些语句与数据库实现中的不兼容使用基于GTID的复制,如Google Cloud SQL第二代实例。 考虑使用MySQL for Cloud SQL 8.0作为替代方法。
NOTE
如果Web服务器和数据库服务器位于不同的主机上,请在数据库服务器主机上执行本主题中讨论的任务,然后参阅设置远程MySQL数据库连接

在Ubuntu上安装MySQL

Adobe Commerce 2.4要求全新安装MySQL 8.0。有关在计算机上安装MySQL的说明,请按照下面的链接操作。

如果您希望导入大量产品,可以将max_allowed_packet的值增加到大于默认值16 MB的值。

NOTE
默认值适用于云基础架构​_和_​内部部署项目上的Adobe Commerce。 云基础架构上的Adobe Commerce Pro客户必须打开支持工单才能增加max_allowed_packet值。 云基础架构上的Adobe Commerce入门客户可以通过更新/etc/mysql/mysql.cnf文件中的配置来增加值。

若要增加值,请在文本编辑器中打开/etc/mysql/mysql.cnf文件,然后找到max_allowed_packet的值。 保存对mysql.cnf文件所做的更改,关闭文本编辑器,然后重新启动MySQL (service mysql restart)。

要选择性地验证您设置的值,请在mysql>提示符下输入以下命令:

SHOW VARIABLES LIKE 'max_allowed_packet';

然后,配置数据库实例

MySQL 8更改

对于Adobe Commerce 2.4,我们添加了对MySQL 8的支持。
本节介绍开发人员应了解的对MySQL 8的主要更改。

已移除整数类型的宽度(填充)

在MySQL 8.0.17中,已弃用整数数据类型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)的显示宽度规范。在输出中包含数据类型定义的语句不再显示整数类型的显示宽度,TINYINT(1)除外。 MySQL连接器假定TINYINT(1)列源自BOOLEAN列。 这一例外使他们能够继续作出这一假设。

示例

在mysql 8.19中描述admin_user

字段
类型
默认
额外
user_id
int unsigned
PRI
NULL
auto_increment
firstname
varchar(32)
NULL
lastname
varchar(32)
NULL
email
varchar(128)
NULL
username
varchar(40)
UNI
NULL
password
varchar(255)
NULL
created
timestamp
CURRENT_TIMESTAMP
DEFAULT_GENERATED
modified
timestamp
CURRENT_TIMESTAMP
更新CURRENT_TIMESTAMPDEFAULT_GENERATED
logdate
timestamp
NULL
lognum
smallint unsigned
0

除​ TINYINT(1) ​外,应从db_schema.xml文件中删除所有整数填充(TINYINT > 1、SMALLINT、MEDIUMINT、INT、BIGINT)。

有关详细信息,请参阅https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-feature

默认ORDER BY行为

在8.0之前,条目按外键排序。 默认排序顺序取决于使用的引擎。
如果您的代码依赖于特定排序,请始终指定排序顺序。

GROUP BY的已弃用ASC和DESC限定符

自MySQL 8.0.13起,已删除GROUP BY子句的已弃用ASCDESC限定符。 以前依赖于GROUP BY排序的查询可能会产生与以前的MySQL版本不同的结果。 要生成给定的排序顺序,请提供ORDER BY子句。

Commerce和MySQL 8

为了正确支持MySQL 8,对Adobe Commerce进行了一些更改。

查询和插入行为

Adobe Commerce通过在/lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.中设置SET SQL_MODE="来禁用常规验证行为。 禁用验证后,MySQL可能会截断数据。 在MySQL中,查询行为已更改: Select * on my_table where IP='127.0.0.1'不再返回结果,因为IP地址现在被正确视为字符串而不是整数。

从MySQL 5.7升级到MySQL 8

要将MySQL从版本5.7正确更新到版本8,必须按照以下顺序执行以下步骤:

  1. 将Adobe Commerce升级到2.4.0。
    测试所有内容,并确保系统按预期工作。

  2. 启用维护模式:

    code language-bash
    bin/magento maintenance:enable
    
  3. 进行数据库备份:

    code language-bash
    bin/magento setup:backup --db
    
  4. 将MySQL更新到版本8。

  5. 将备份的数据导入MySQL。

  6. 清理缓存:

    code language-bash
    bin/magento cache:clean
    
  7. 禁用维护模式:

    code language-bash
    bin/magento maintenance:disable
    

配置数据库实例

本节讨论如何为Adobe Commerce创建数据库实例。 虽然建议使用新数据库实例,但您可以选择将Adobe Commerce与现有数据库实例一起安装。

配置MySQL数据库实例:

  1. 以任意用户身份登录到数据库服务器。

  2. 转到MySQL命令提示符:

    code language-bash
    mysql -u root -p
    
  3. 出现提示时输入MySQL root用户的密码。

  4. 按照显示的顺序输入以下命令,以创建名为magento且用户名为magento的数据库实例:

    code language-sql
    create database magento;
    
    code language-sql
    create user 'magento'@'localhost' IDENTIFIED BY 'magento';
    
    code language-sql
    GRANT ALL ON magento.* TO 'magento'@'localhost';
    
    code language-sql
    flush privileges;
    
  5. 输入exit退出命令提示符。

  6. 验证数据库:

    code language-bash
    mysql -u magento -p
    

    如果显示MySQL监视器,则表示您正确创建了数据库。 如果显示错误,请重复上述命令。

  7. 如果Web服务器和数据库服务器位于不同的主机上,请在数据库服务器主机上执行本主题中讨论的任务,然后参阅设置远程MySQL数据库连接

    我们建议您根据业务需要配置数据库实例。 在配置数据库时,请牢记以下几点:

    • 索引器需要更高的tmp_table_sizemax_heap_table_size值(例如,64 M)。 如果配置batch_size参数,则可以调整该值以及表大小设置,以提高索引器性能。 有关详细信息,请参阅优化指南

    • 为获得最佳性能,请确保所有MySQL和Adobe Commerce索引表都可以保留在内存中(例如,配置innodb_buffer_pool_size)。

    • 与其他MariaDB或MySQL版本相比,在MariaDB 10.4上重新索引需要更多时间。 请参阅配置最佳实践

  8. 要使MySQL TIMESTAMP字段遵循应用程序的声明性架构架构所预期的首选项和构成,系统变量explicit_defaults_for_timestamp必须设置为on

    引用:

    如果未启用此设置,bin/magento setup:db:status将始终报告Declarative Schema is not up to date

NOTE
explicit_defaults_for_timestamp设置已弃用。 此设置控制将在未来MySQL版本中删除的已弃用TIMESTAMP行为。 删除这些行为时,explicit_defaults_for_timestamp设置也会被删除。
WARNING
对于云基础架构项目上的Adobe Commerce,MySQL (MariaDB)的explicit_defaults_for_timestamp设置默认为​_OFF_。

与以前的MariaDB或MySQL版本相比,对MariaDB 10.4和10.6重新编制索引需要更多时间。 要加快重新索引速度,我们建议设置以下MariaDB配置参数:

如果您在升级到MariaDB 10.6后遇到与索引无关的性能下降,请考虑启用--query-cache-type设置。 例如,--query-cache-type=ON

在升级云基础架构项目上的Adobe Commerce之前,您可能还需要升级MariaDB (请参阅MariaDB升级最佳实践)。

例如:

  • Adobe Commerce 2.4.6适用于MariaDB 10.5.1或更高版本
  • Adobe Commerce 2.3.5与MariaDB版本10.3或更低版本

除了这些建议之外,您还应咨询数据库管理员配置以下参数:

NOTE
这些设置仅适用于内部部署。 云基础架构上的Adobe Commerce客户无权访问这些设置。
recommendation-more-help
0f8e7db5-0e9c-4002-a5b8-a0088077d995