Reject MySQL 8 < 8.0.14 due to a serious bug
authorAlexander Ebert <ebert@woltlab.com>
Mon, 6 Jan 2020 17:48:40 +0000 (18:48 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Mon, 6 Jan 2020 17:48:40 +0000 (18:48 +0100)
See #3133

wcfsetup/install/files/acp/update_com.woltlab.wcf_5.2_preUpdate.php
wcfsetup/install/files/lib/acp/page/SystemCheckPage.class.php
wcfsetup/install/files/lib/system/WCFSetup.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml
wcfsetup/test.php

index 6c3a29fbebe9391822e347f5116a05c129945347..5e99bf77306df03b00cc6fa312e1221445677704 100644 (file)
@@ -28,3 +28,22 @@ if (version_compare($comparePhpVersion, $requiredPHPVersion) === -1) {
                throw new SystemException("The update requires PHP in version {$requiredPHPVersion} or newer.");
        }
 }
+
+// check sql version
+$sqlVersion = WCF::getDB()->getVersion();
+$compareSQLVersion = preg_replace('/^(\d+\.\d+\.\d+).*$/', '\\1', $sqlVersion);
+if (stripos($sqlVersion, 'MariaDB') === false) {
+       // For MySQL 8.0, MySQL 8.0.14+ is required
+       // https://bugs.mysql.com/bug.php?id=88718
+       if ($compareSQLVersion[0] === '8') {
+               // MySQL 8.0.14+
+               if (!(version_compare($compareSQLVersion, '8.0.14') >= 0)) {
+                       if (WCF::getLanguage()->getFixedLanguageCode() == 'de') {
+                               throw new SystemException("Ihre eingesetzte Version von MySQL 8 enth&auml;lt einen bekannten Fehler und verhindert eine Aktualisierung, es wird mindestens MySQL 8.0.14 oder h&ouml;her ben&ouml;tigt.");
+                       }
+                       else {
+                               throw new SystemException("The version of MySQL 8 that you are using contains a known bug that prevents an upgrade, MySQL 8.0.14 or newer is required.");
+                       }
+               }
+       }
+}
index b9d7ae37ddec7e5b0d4adfeb982cbce772246cd8..1b1b5a465d570a5afc808aea9680ab9464b9523f 100644 (file)
@@ -51,7 +51,12 @@ class SystemCheckPage extends AbstractPage {
        ];
        
        public $mysqlVersions = [
-               'mysql' => '5.5.35',
+               'mysql' => [
+                       // MySQL 8.0 < 8.0.14 contains a nasty bug
+                       // https://bugs.mysql.com/bug.php?id=88718
+                       '5' => '5.5.35',
+                       '8' => '8.0.14',
+               ],
                'mariadb' => [
                        // MariaDB 5.5.47+ or 10.0.22+ are required
                        // https://jira.mariadb.org/browse/MDEV-8756
index f7fde95befea4d0c7208c42853f292f9c03c050d..55c54901781cafa9cc2d26f8b73994edb60f5481 100644 (file)
@@ -722,9 +722,17 @@ class WCFSetup extends WCF {
                                        }
                                }
                                else {
-                                       // MySQL 5.5.35+
-                                       if (!(version_compare($compareSQLVersion, '5.5.35') >= 0)) {
-                                               throw new SystemException("Insufficient MySQL version '".$compareSQLVersion."'. Version '5.5.35' or greater is needed.");
+                                       // MySQL 5.5.35+ or MySQL 8.0.14+ are required
+                                       // https://bugs.mysql.com/bug.php?id=88718
+                                       if ($compareSQLVersion[0] === '8') {
+                                               // MySQL 8.0.14+
+                                               if (!(version_compare($compareSQLVersion, '8.0.14') >= 0)) {
+                                                       throw new SystemException("Insufficient MySQL version '".$compareSQLVersion."'. Version '5.5.35' or greater, or version '8.0.14' or greater is needed.");
+                                               }
+                                       }
+                                       else if (!(version_compare($compareSQLVersion, '5.5.35') >= 0)) {
+                                               // MySQL 5.5.35+
+                                               throw new SystemException("Insufficient MySQL version '".$compareSQLVersion."'. Version '5.5.35' or greater, or version '8.0.14' or greater is needed.");
                                        }
                                }
                                
index e7ff58430d574d7ba8be1464ec635b6ce6216c51..bc371ab181e5d8841ea2eee9bc872dc5f05da4c4 100644 (file)
@@ -2733,7 +2733,7 @@ Kein Abschnitt darf leer sein und alle Abschnitten dürfen nur folgende Zeichen
                <item name="wcf.acp.systemCheck.php.version"><![CDATA[Version]]></item>
                <item name="wcf.acp.systemCheck.php.version.description"><![CDATA[Es wird mindestens PHP {$phpVersions[minimum]} benötigt, empfohlen werden die folgenden Versionsreihen von PHP: {implode from=$phpVersions[recommended] item=$recommended}{$recommended}{/implode}.]]></item>
                <item name="wcf.acp.systemCheck.mysql.version"><![CDATA[MySQL]]></item>
-               <item name="wcf.acp.systemCheck.mysql.version.description"><![CDATA[Es wird mindestens MySQL {$mysqlVersions[mysql]} bzw. MariaDB {$mysqlVersions[mariadb][5]} oder MariaDB {$mysqlVersions[mariadb][10]} benötigt, grundsätzlich wird der Einsatz neuerer Version ausdrücklich empfohlen.]]></item>
+               <item name="wcf.acp.systemCheck.mysql.version.description"><![CDATA[Es wird mindestens MySQL {$mysqlVersions[mysql][5]} oder MySQL {$mysqlVersions[mysql][8]} bzw. MariaDB {$mysqlVersions[mariadb][5]} oder MariaDB {$mysqlVersions[mariadb][10]} benötigt, grundsätzlich wird der Einsatz neuerer Version ausdrücklich empfohlen.]]></item>
                <item name="wcf.acp.systemCheck.mysql.foreignKeys"><![CDATA[Fremdschlüssel]]></item>
                <item name="wcf.acp.systemCheck.mysql.foreignKeys.description"><![CDATA[Fremdschlüssel werden mit der Installation in der Datenbank angelegt und werden für einen einwandfreien Betrieb benötigt.]]></item>
                <item name="wcf.acp.systemCheck.mysql.searchEngine"><![CDATA[Suche]]></item>
index c9c935f619a355d1f26fc6ace2c43d632998712d..8b6cc3c1ab17386151e221cdc5eb268b0a972b92 100644 (file)
@@ -2661,7 +2661,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.systemCheck.php.version"><![CDATA[Version]]></item>
                <item name="wcf.acp.systemCheck.php.version.description"><![CDATA[PHP {$phpVersions[minimum]} or newer is required, the following PHP series are strongly recommended: {implode from=$phpVersions[recommended] item=$recommended}{$recommended}{/implode}.]]></item>
                <item name="wcf.acp.systemCheck.mysql.version"><![CDATA[MySQL]]></item>
-               <item name="wcf.acp.systemCheck.mysql.version.description"><![CDATA[MySQL {$mysqlVersions[mysql]} or MariaDB {$mysqlVersions[mariadb][5]} or MariaDB {$mysqlVersions[mariadb][10]} are required at minimum, but it’s strongly recommended to always use the latest available version.]]></item>
+               <item name="wcf.acp.systemCheck.mysql.version.description"><![CDATA[MySQL {$mysqlVersions[mysql][5]} or MySQL {$mysqlVersions[mysql][8]} or MariaDB {$mysqlVersions[mariadb][5]} or MariaDB {$mysqlVersions[mariadb][10]} are required at minimum, but it’s strongly recommended to always use the latest available version.]]></item>
                <item name="wcf.acp.systemCheck.mysql.foreignKeys"><![CDATA[Foreign Keys]]></item>
                <item name="wcf.acp.systemCheck.mysql.foreignKeys.description"><![CDATA[Foreign Keys are created with the installation and are required for the software to work.]]></item>
                <item name="wcf.acp.systemCheck.mysql.searchEngine"><![CDATA[Search]]></item>
index 7714702e6b5c597afd6fdc10d571cbcf4f2c8301..53b75450bb8f7d445f38de4c76167e24c83370a6 100644 (file)
@@ -260,8 +260,8 @@ $phrases = [
                'en' => 'MySQL Requirements'
        ],
        'mysql_version' => [
-               'de' => 'Bitte stellen Sie sicher, dass MySQL 5.5.35+ oder MariaDB 10.0.22+ mit InnoDB-Unterstützung vorhanden ist.',
-               'en' => 'Please make sure that MySQL 5.5.35+ or MariaDB 10.0.22+, with InnoDB support is available.'
+               'de' => 'Bitte stellen Sie sicher, dass MySQL 5.5.35+/MySQL 8.0.14+  oder MariaDB 10.0.22+ mit InnoDB-Unterstützung vorhanden ist.',
+               'en' => 'Please make sure that MySQL 5.5.35+/MySQL 8.0.14+ or MariaDB 10.0.22+, with InnoDB support is available.'
        ],
        'result' => [
                'de' => 'Ergebnis',