Wiederherstellung von Shopware 6 Backup nicht möglich

Hallo zusammen,

mir ist gestern bei einem Update das System gecrashed. Eigentlich habe ich stündliche Backups…aber was bringen einem Backups wenn sie nicht funktinieren.

 

Wenn ich versuche das Dump via PHPMyAdmin einzuspielen kommt ein Fehler.

The value specified for generated column ‚order_date‘ in table ‚order‘ is not allowed.

 

Was ich hier im Forum schon rauslesen konnte ist das es wohl Probleme bei virtuellen Tabellen gibt bzw. wenn bereits Bestellungen vorhanden sind. Aber eigentlich logisch das in einem laufenden Shop Bestellungen vorhanden sind oder nicht? Das kanns ja wohl nicht sein :stuck_out_tongue:

 

Das Backup wurde mit einem PHP Skript per Cron erstellt.

$mysqlDatabaseName ='xxx';
$mysqlUserName ='xxx';
$mysqlPassword ='xxx';
$mysqlHostName ='xxxx.hosting-data.io';
$mysqlExportPath ='archiv/'.$mysqlDatabaseName.'_'.$mysqlBackupDate.'.sql.gz';

//Bei den folgenden Punkten bitte keine Änderung durchführen
//Export der Datenbank und Ausgabe des Status
$command='mysqldump --opt -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' | gzip > ' .$mysqlExportPath;

 

Ich habe auch schon versucht das Dump von Hand zu bearbeiten und alle „Virtual“ Befehle rauszunehmen. Dann läuft es zwar irgendwie durch aber Bestellungen im Shop brechen ab ohne aussagekräftige Fehlermeldung.

 

Da nichts geklappt hat, habe ich sogar einen Restore bei 1&1/Ionos für 70€ beauftragt…das scheint aber auch nicht geklappt zu haben :smiley:

 

Seit gestern früh ist jetzt der Shop offline und ich bin ehrlich gesagt ratlos was ich noch tun kann…

 

System

  • Shopware 6.2.3
  • MySQL 5.7
  • Ionos

 

VG

Frank

Hast du das Backup denn in eine komplett neue Datenbank eingespielt?

Ja, das versuche ich aktuell. Gleicher Fehler :(. Sowohl per SSH als auch PhpMyAdmin

 

Es liegt wohl daran wie mysqldumper das Backup erzeugt hat und es nicht kompatibel mit PhpMyaddmin ist!? Angeblich müsste noch --hex-blob dabeistehen…war es aber nicht. Es ist nur die Frage wie ich diese Datei jetzt ändern muss damit es einspielbar ist.

Also ich hätte hier jetzt mal einen Stand wiederhergestellt in dem der Shop zumindest mal wieder angezeigt wird. Derzeit steht er im DEV Modus. Beim Abschluss einer Bestellung (Testbestellung per Vorkasse) kommt ein Fehler. Die Bestellung wird aber im Backend als offen - offen - offen angelegt.

Stacktrace

Return value of Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity::getUnitPrice() must be of the type float, null returned

Das kommt vermutlich da die Datenform der Tabellen druch den fehlenden virtual Befehl jetzt anders ist.

 

Einzelne Felder per SQL Befehlt ändern mag er nicht.

ALTER TABLE order
ALTER COLUMN `order_date` date GENERATED ALWAYS AS (cast(`order_date_time` as date)) STORED;

 

Hier noch ein Auszug aus dem prod Log wenn ich wieder auf PROD umschalte und eine Bestellung abschließe.

 

[2020-08-07 11:14:43] php.CRITICAL: Uncaught Error: Return value of Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity::getUnitPrice() must be of the type float, null returned {"exception":"[object] (TypeError(code: 0): Return value of Shopware\\Core\\Checkout\\Order\\Aggregate\\OrderLineItem\\OrderLineItemEntity::getUnitPrice() must be of the type float, null returned at /homepages/46/d346729057/htdocs/shopware-6/vendor/shopware/core/Checkout/Order/Aggregate/OrderLineItem/OrderLineItemEntity.php:187)"} []
[2020-08-07 11:14:43] request.CRITICAL: Uncaught PHP Exception TypeError: "Return value of Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity::getUnitPrice() must be of the type float, null returned" at /homepages/46/d346729057/htdocs/shopware-6/vendor/shopware/core/Checkout/Order/Aggregate/OrderLineItem/OrderLineItemEntity.php line 187 {"exception":"[object] (TypeError(code: 0): Return value of Shopware\\Core\\Checkout\\Order\\Aggregate\\OrderLineItem\\OrderLineItemEntity::getUnitPrice() must be of the type float, null returned at /homepages/46/d346729057/htdocs/shopware-6/vendor/shopware/core/Checkout/Order/Aggregate/OrderLineItem/OrderLineItemEntity.php:187)"} []

 

Ich habe jetzt mal eine frische Installation erstellt und dort eine Bestellung angelegt. 

Export aus PhPMyAdmin

INSERT INTO order (id, version_id, state_id, auto_increment, order_number, currency_id, language_id, currency_factor, sales_channel_id, billing_address_id, billing_address_version_id, price, order_date_time, shipping_costs, deep_link_code, custom_fields, affiliate_code, campaign_code, customer_comment, created_at, updated_at) VALUES
(0x8c54c8c358854fbcbfa15bfdf35d273d, 0x0fa91ce3e96a4bc2be4bd9ce752c3425, 0x16138f11783945a79df1bc32c92dbd51, 1, ‚10000‘, 0xb7d2554b0ce847cd82f3ac9bd1c0dfca, 0x2fbb5fe2e29a4d70aa5854ce7ce3e20b, 1, 0xadcc0c102c7244139f802ff2b2b5a724, 0xadcc49566bad442e99bf8186e663c45f, 0x0fa91ce3e96a4bc2be4bd9ce752c3425, ‚{"netPrice": 16.81, "taxRules": [{"taxRate": 19, "extensions": , "percentage": 100}], "taxStatus": "gross", "totalPrice": 20, "positionPrice": 20, "calculatedTaxes": [{"tax": 3.19, "price": 20, "taxRate": 19, "extensions": }]}‘, ‚2020-08-07 13:21:11.082‘, ‚{"quantity": 1, "taxRules": [{"taxRate": 19, "extensions": , "percentage": 100}], "listPrice": null, "unitPrice": 0, "totalPrice": 0, "referencePrice": null, "calculatedTaxes": [{"tax": 0, "price": 0, "taxRate": 19, "extensions": }]}‘, ‚KPKsFoidu9jgpbhlYJDz17aoBPPLr9iP‘, NULL, NULL, NULL, NULL, ‚2020-08-07 13:21:11.181‘, NULL);

 

Und ein Datensatz aus dem Live Backup

 INSERT INTO order VALUES (‚\0ƒ’≥@DL¨V⁄flfl‘,‚©„ÈjK¬æKŸŒu,4%‘,'Y‰Ÿ≤

»¢’,215,‚10134‘,‚∑“UK ËGÕÇÛ¨õ—¿fl ‚,‘/ª_‚‚öMp™XTŒ|„‚ ‚,1,‘‰G\we H\r∫‚9b”JJ≠‘,‚∫≠È} I4©¬è$yL‘,‚©„ÈjK¬æKŸŒu,4%‘,‚{"netPrice": 14.16, "taxRules": [{"taxRate": 19, "extensions": , "percentage": 100}], "taxStatus": "gross", "totalPrice": 16.849999999999998, "positionPrice": 14.95, "calculatedTaxes": [{"tax": 2.69, "price": 16.849999999999998, "taxRate": 19, "extensions": }]}‘,‚2020-04-20 06:38:13.993‘,‚2020-04-20‘,16.849999999999998,14.16,14.95,‚gross‘,‚{"quantity": 1, "taxRules": [{"taxRate": 19, "extensions": , "percentage": 100}], "listPrice": null, "unitPrice": 1.9, "totalPrice": 1.9, "referencePrice": null, "calculatedTaxes": [{"tax": 0.3, "price": 1.9, "taxRate": 19, "extensions": }]}‘,1.9,‚tKRiYM9KkQWm0C-yivSXnwCaKHJqXOOl‘,NULL,NULL,NULL,NULL,‚2020-04-20 06:38:14.054‘,‚2020-04-20 08:55:10.103‘)

 

Es ist ganz klar die Zeichencodierung bzw. die Art des Dumps würde ich sagen…wie bekomme ich das jetzt umgewandelt? 

Also ich konnte jetzt doch ein Restore vom Provider fahren und der Shop ist wieder aktiv.

Aber was mache ich jetzt für die Zukunft? Ich sichere ja per Cron. Aber auch ein Backup mit der Zusatzoption für hex blob lässt sich in einer Test DB nicht einspielen. Gleicher Fehler.

 

Skript

$mysqlDatabaseName ='xxx';
$mysqlUserName ='xxx';
$mysqlPassword ='xxx';
$mysqlHostName ='dbxxx.hosting-data.io';
$mysqlExportPath ='archiv/'.$mysqlDatabaseName.'_'.$mysqlBackupDate.'.sql.gz';

//Bei den folgenden Punkten bitte keine Änderung durchführen
//Export der Datenbank und Ausgabe des Status
$command='mysqldump --opt --hex-blob -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' | gzip > ' .$mysqlExportPath;
exec($command,$output=array(),$worked);