一般MySQL准則

另請參閱 系統需求 支援的MySQL版本。

Adobe 強烈 建議您在設定資料庫時,遵循下列標準:

  • Adobe Commerce使用 MySQL資料庫觸發程式 改善重新索引期間的資料庫存取許可權。 當索引器模式設定為時,就會建立這些模式 排程. 應用程式不支援資料庫中的任何自訂觸發器,因為自訂觸發器可能會造成與未來Adobe Commerce版本不相容。
  • 熟悉 這些潛在的MySQL觸發程式限制 然後再繼續。
  • 若要增強資料庫安全狀態,請啟用 STRICT_ALL_TABLES SQL模式可防止儲存無效的資料值,這可能會造成不必要的資料庫互動。
  • Adobe Commerce會 支援以MySQL陳述式為基礎的復寫。 請務必使用 僅限 列式復寫.
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重大變更。

已移除整數型別(內距)的寬度

整數資料型別(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)的顯示寬度規格在MySQL 8.0.17中已過時。在輸出中包含資料型別定義的陳述式不再顯示整數型別的顯示寬度,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
DEFAULT_GENERATED 更新時 CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0

除了 TINYINT(1),所有整數內邊距(TINYINT > 1、SMALLINT、MEDIUMINT、INT、BIGINT)應從 db_schema.xml 檔案。

如需詳細資訊,請參閱 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起,已棄用 ASCDESC 限定詞 GROUP BY 已移除子句。 先前依賴的查詢 GROUP BY 排序可能會產生與先前MySQL版本不同的結果。 若要產生指定的排序順序,請提供 ORDER BY 子句。

Commerce和MySQL 8

Adobe Commerce已進行一些變更,以適當支援MySQL 8。

查詢和插入行為

Adobe Commerce已透過在中設定SET SQL_MODE="來停用一般驗證行為 /lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.. 停用驗證時,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 引數,您可以連同表格大小設定一起調整該值以改善索引器效能。 請參閱 Optimization指南 以取得詳細資訊。

    • 為獲得最佳效能,請確定所有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, explicit_defaults_for_timestamp MySQL (MariaDB)的設定預設為 關閉.

與舊版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