Krav för uppgradering av MariaDB

Innan du uppgraderar Adobe Commerce på molninfrastruktur kan du behöva uppgradera databasprogramvaran om du använder MariaDB. Exempel:

  • Adobe Commerce 2.4.6 med MariaDB version 10.5.1 eller senare
  • Adobe Commerce 2.3.5 med MariaDB version 10.3 eller tidigare

Adobe Commerce 2.4.6

Från och med MariaDB 10.5.1 markeras kolumner med gamla temporala format med en /* mariadb-5.3 */-kommentar i utdata för SHOW CREATE TABLE -, SHOW COLUMNS -, DESCRIBE -programsatserna samt i kolumnen COLUMN_TYPE i tabellen INFORMATION_SCHEMA.COLUMNS. Se MariaDB-dokumentation.

Adobe Commerce kan inte mappa datumkolumnerna till en korrekt datatyp på grund av MariaDB-kommentaren, som kan orsaka oväntat beteende i anpassad kod.

För att undvika oväntade beteenden när du uppgraderar MariaDB från äldre versioner till version 10.6 rekommenderar Adobe att du migrerar kolumnerna till det nya interna formatet.

Standardkonfiguration

I MariaDB 10.1.2 introducerades ett nytt tidsformat från MySQL 5.6. Systemvariabeln mysql56_temporal_format gör att databasen automatiskt kan konvertera det gamla datumformatet till det nya när en ändringstabell körs eller databasen importeras. Standardkonfigurationen för mysql56_temporal_format är alltid aktiverad på Adobe Commerce i molninfrastrukturen.

Migrera datumkolumner

Följande fråga visar tabellen och kolumnerna som påverkas och som måste migreras efter uppgradering av MariaDB till 10.5.1 eller senare:

SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_TYPE LIKE '%mariadb%';

Om du migrerar kolumnerna till det nya interna datumformatet måste du importera databasen på nytt eller utföra ändringar på den identifierade kolumnen med samma kolumndefinition. Följande fråga genererar nödvändiga ändringsfrågor:

SELECT CONCAT( 'ALTER TABLE `', COALESCE(TABLE_NAME), '`', ' MODIFY ', '`', COALESCE(COLUMN_NAME), '`', ' ', COALESCE(DATA_TYPE), ' ', IF(COALESCE(IS_NULLABLE)='YES','NULL', 'NOT NULL'), IF(COLUMN_DEFAULT IS NOT NULL,CONCAT(' DEFAULT ',COLUMN_DEFAULT),' '), ' ', COALESCE(EXTRA), ' COMMENT \'', COALESCE(COLUMN_COMMENT), '\';' ) as sql_query FROM INFORMATION_SCHEMA.`COLUMNS` WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_TYPE LIKE '%mariadb%';
NOTE
Det är viktigt att migrera kolumnerna till det nya interna datumformatet före som distribuerar den nya koden för att undvika oväntade beteenden.

Adobe Commerce 2.3.5

Uppgradera MariaDB-tjänsten i molninfrastrukturen från version 10.0 eller 10.2 till version 10.3, 10.4 eller 10.5. MariaDB version 10.3 och senare kräver att databasen använder det dynamiska tabellradformatet och Adobe Commerce kräver att du använder InnoDB-lagringsmotorn för tabeller. I den här artikeln beskrivs hur du uppdaterar din databas så att den uppfyller dessa MariaDB-krav.

När du har förberett databasen skickar du en Adobe Commerce supportanmälan för att uppdatera MariaDB-tjänstversionen i din molninfrastruktur innan du fortsätter med uppgraderingsprocessen för Adobe Commerce.

Förbered databasen för uppgraderingen

Innan Adobe Commerce supportteam börjar uppgraderingsprocessen förbereder du databasen genom att konvertera databastabellerna:

  • Konvertera radformatet från COMPACT till DYNAMIC
  • Ändra lagringsmotorn från MyISAM till InnoDB

Tänk på följande när du planerar och schemalägger konverteringen:

  • Konvertering från COMPACT till DYNAMIC-tabeller kan ta flera timmar med en stor databas.

  • För att förhindra att data skadas ska du inte slutföra konverteringsarbetet på en publicerad webbplats.

  • Slutför konverteringsarbetet under en begränsad trafikperiod på webbplatsen.

  • Byt plats till underhållsläge innan du kör kommandona för att konvertera databastabeller.

Konvertera radformat för databastabell

Du kan konvertera tabeller på en nod i klustret. Ändringarna replikeras automatiskt till de andra tjänstnoderna.

  1. Använd SSH för att ansluta till nod 1 från din Adobe Commerce i molninfrastrukturmiljö.

  2. Logga in på MariaDB.

  3. Identifiera tabeller som ska konverteras från kompakt till dynamiskt format.

    code language-mysql
    SELECT table_name, row_format FROM information_schema.tables WHERE table_schema=DATABASE() and row_format = 'Compact';
    
  4. Bestäm tabellstorlekarna så att du kan schemalägga konverteringsarbetet.

    code language-mysql
    SELECT table_schema as 'Database', table_name AS 'Table', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES ORDER BY (data_length + index_length) DESC;
    

    Det tar längre tid att konvertera större tabeller. Granska tabellerna och batchbearbeta konverteringsarbetet efter prioritet och tabellstorlek för att hjälpa till att planera nödvändiga underhållsperioder.

  5. Konvertera alla tabeller till ett dynamiskt format i taget.

    code language-mysql
    ALTER TABLE [ table name here ] ROW_FORMAT=DYNAMIC;
    

Konvertera lagringsformat för databastabell

Du kan konvertera tabeller på en nod i klustret. Ändringarna replikeras automatiskt till de andra tjänstnoderna.

Processen att konvertera lagringsformatet skiljer sig åt för Adobe Commerce Starter- och Adobe Commerce Pro-projekt.

  • Använd kommandot MySQL ALTER för att konvertera formatet för startarkitekturen.
  • I Pro-arkitekturen använder du kommandona MySQL CREATE och SELECT för att skapa en databastabell med InnoDB-lagring och kopiera data från den befintliga tabellen till den nya tabellen. Den här metoden ser till att ändringarna replikeras till alla noder i klustret.

Konvertera tabelllagringsformat för Adobe Commerce Pro-projekt

  1. Identifiera register som använder MyISAM-lagring.

    code language-mysql
    SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'MyISAM';
    
  2. Konvertera alla tabeller till lagringsformatet InnoDB en åt gången.

    • Byt namn på den befintliga tabellen för att förhindra namnkonflikter.

      code language-mysql
      RENAME TABLE <existing_table> <table_old>;
      
    • Skapa en tabell som använder InnoDB-lagring med data från den befintliga tabellen.

      code language-mysql
      CREATE TABLE <existing_table> ENGINE=InnoDB SELECT * from <table_old>;
      
    • Kontrollera att den nya tabellen har alla nödvändiga data.

    • Ta bort den ursprungliga tabell som du har ändrat namn på.

Konvertera tabelllagringsformat för Adobe Commerce Starter-projekt

  1. Identifiera register som använder MyISAM-lagring.

    code language-mysql
    SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'MyISAM';
    
  2. Konvertera tabeller som använder MyISAM-lagring till InnoDB-lagring.

    code language-mysql
    ALTER TABLE [ table name here ] ENGINE=InnoDB;
    

Verifiera databaskonverteringen

Dagen före den schemalagda uppgraderingen till MariaDB version 10.3, 10.4 eller 10.6 kontrollerar du att alla tabeller har rätt radformat och lagringsmotor. Verifiering krävs eftersom koddistributioner som görs efter att du har slutfört konverteringen kan göra att vissa tabeller återställs till den ursprungliga konfigurationen.

  1. Logga in i databasen.

  2. Sök efter tabeller som fortfarande har radformatet COMPACT.

    code language-mysql
    SELECT table_name, row_format FROM information_schema.tables WHERE table_schema=DATABASE() and row_format = 'Compact';
    
  3. Sök efter tabeller som fortfarande använder lagringsformatet MyISAM

    code language-mysql
    SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'MyISAM';
    
  4. Om några tabeller har återställts upprepar du stegen för att ändra tabellradformatet och lagringsmotorn.

Ändra lagringsmotorn

Se Konvertera MyISAM-tabeller till InnoDB.

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60