一般MySQL准則
如需支援的MySQL版本,請參閱系統需求。
Adobe 強烈 建議您在設定資料庫時遵循下列標準:
- Adobe Commerce使用MySQL資料庫觸發程式來改善重新索引期間的資料庫存取。 當索引子模式設定為排程時,就會建立這些專案。 應用程式不支援資料庫中的任何自訂觸發器,因為自訂觸發器可能會造成與未來Adobe Commerce版本不相容。
- 繼續之前,請先熟悉這些潛在的MySQL觸發程式限制。
- 若要增強您的資料庫安全狀態,請啟用
STRICT_ALL_TABLES
SQL模式,以防止儲存無效的資料值,這可能會造成不必要的資料庫互動。 - Adobe Commerce 不 支援MySQL陳述式式復寫。 請確定您只使用 1} 資料列式復寫。
CREATE TEMPORARY TABLE
陳述式,這些陳述式與資料庫實作的不相容,使用以GTID為基礎的復寫,例如Google Cloud SQL第二代執行個體。 考慮使用MySQL for Cloud SQL 8.0作為替代方案。在Ubuntu上安裝MySQL
Adobe Commerce 2.4需要全新安裝MySQL 8.0。請遵循下列連結,取得在您的電腦上安裝MySQL的說明。
如果您預期要匯入大量產品,您可以增加max_allowed_packet
的值,使其大於預設值16 MB。
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
int unsigned
NULL
auto_increment
firstname
varchar(32)
NULL
lastname
varchar(32
)NULL
email
varchar(128)
NULL
username
varchar(40)
NULL
password
varchar(255)
NULL
created
timestamp
CURRENT_TIMESTAMP
DEFAULT_GENERATED
modified
timestamp
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP
上的DEFAULT_GENERATED
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起,已移除GROUP BY
子句的已棄用ASC
或DESC
限定詞。 先前依賴GROUP BY
排序的查詢可能會產生與先前MySQL版本不同的結果。 若要產生指定的排序順序,請提供ORDER BY
子句。
Commerce和MySQL 8
Adobe Commerce已進行一些變更,以適當支援MySQL 8。
查詢和插入行為
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版,您必須依照下列順序執行步驟:
-
將Adobe Commerce升級至2.4.0。
測試所有專案,並確定您的系統可如預期般運作。 -
啟用維護模式:
code language-bash bin/magento maintenance:enable
-
進行資料庫備份:
code language-bash bin/magento setup:backup --db
-
將MySQL更新至版本8。
-
將備份的資料匯入MySQL。
-
清除快取:
code language-bash bin/magento cache:clean
-
停用維護模式:
code language-bash bin/magento maintenance:disable
設定資料庫執行處理
本節說明如何建立Adobe Commerce的資料庫執行處理。 雖然建議使用新資料庫執行個體,但您可以選擇安裝Adobe Commerce搭配現有資料庫執行個體。
設定MySQL資料庫執行處理:
-
以任何使用者身分登入您的資料庫伺服器。
-
前往MySQL命令提示字元:
code language-bash mysql -u root -p
-
出現提示時輸入MySQL
root
使用者的密碼。 -
按照顯示的順序輸入以下命令,以建立名為
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;
-
輸入
exit
以結束命令提示字元。 -
驗證資料庫:
code language-bash mysql -u magento -p
如果顯示MySQL監督器,表示您已正確建立資料庫。 如果顯示錯誤,請重複上述命令。
-
如果您的Web伺服器和資料庫伺服器位於不同的主機,請在資料庫伺服器主機上執行本主題中討論的工作,然後請參閱設定遠端MySQL資料庫連線。
建議您根據業務需要設定資料庫執行個體。 設定資料庫時,請記住下列事項:
-
若要讓MySQL
TIMESTAMP
欄位遵循應用程式的宣告式結構描述架構預期的偏好設定和構成,系統變數explicit_defaults_for_timestamp
必須設定為on
。引用:
如果未啟用此設定,
bin/magento setup:db:status
一律會報告Declarative Schema is not up to date
。
explicit_defaults_for_timestamp
設定已過時。 此設定可控制將在未來MySQL發行版本中移除的已棄用TIMESTAMP行為。 移除這些行為時,explicit_defaults_for_timestamp
設定也會一併移除。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版或更舊版本
除了這些建議之外,您應該洽詢資料庫管理員設定下列引數: