diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0ca45f04e923d378e385ab475139c2764d0fd616..8deb439d4bf900a59cad947de19d07c362f98b93 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -193,36 +193,12 @@ default:
 # Main listing of jobs.
 # All of these are available on Merge Requests and also work as base jobs for
 # on-commit and daily jobs to extend from.
-'PHP 8.3 MySQL 5.7':
-  <<: [ *default-stage, *run-on-mr ]
-  variables:
-    _TARGET_PHP: "8.3"
-    _TARGET_DB: "mysql-5.7"
-
-'PHP 8.3 MariaDB 10.3.22':
-  <<: [ *default-stage, *run-on-mr ]
-  variables:
-    _TARGET_PHP: "8.3"
-    _TARGET_DB: "mariadb-10.3.22"
-
 'PHP 8.3 MariaDB 10.6':
   <<: [ *default-stage, *run-on-mr ]
   variables:
     _TARGET_PHP: "8.3"
     _TARGET_DB: "mariadb-10.6"
 
-'PHP 8.3 PostgreSQL 14.1':
-  <<: [ *default-stage, *run-on-mr ]
-  variables:
-    _TARGET_PHP: "8.3"
-    _TARGET_DB: "pgsql-14.1"
-
-'PHP 8.3 PostgreSQL 15':
-  <<: [ *default-stage, *run-on-mr ]
-  variables:
-    _TARGET_PHP: "8.3"
-    _TARGET_DB: "pgsql-15"
-
 'PHP 8.3 PostgreSQL 16':
   <<: [ *default-stage, *run-on-mr ]
   variables:
@@ -237,14 +213,9 @@ default:
 
 # Jobs running on commits.
 # The value set in the "needs" property will determine the order in the sequence.
-'[Commit] PHP 8.3 MySQL 5.7':
-  extends: 'PHP 8.3 MySQL 5.7'
-  needs: [ 'DEFAULT: PHP 8.3 MySQL 8' ]
-  <<: [ *run-on-commit ]
-
 '[Commit] PHP 8.3 PostgreSQL 16':
   extends: 'PHP 8.3 PostgreSQL 16'
-  needs: [ '[Commit] PHP 8.3 MySQL 5.7' ]
+  needs: [ 'DEFAULT: PHP 8.3 MySQL 8' ]
   <<: [ *run-on-commit ]
 
 '[Commit] PHP 8.3 SQLite 3.45':
@@ -264,8 +235,8 @@ default:
   needs: [ '[Daily] PHP 8.3 PostgreSQL 16' ]
   <<: [ *run-daily ]
 
-'[Daily] PHP 8.3 MariaDB 10.3.22':
-  extends: 'PHP 8.3 MariaDB 10.3.22'
+'[Daily] PHP 8.3 MariaDB 10.6':
+  extends: 'PHP 8.3 MariaDB 10.6'
   needs: [ '[Daily] PHP 8.3 SQLite 3.45' ]
   <<: [ *run-daily ]
 
diff --git a/core/INSTALL.txt b/core/INSTALL.txt
index a484cc10793d6131f2a1fd63e963b7771352a0f9..2aec43b2c9f4749ddc777a7471cb822f5d9f74e3 100644
--- a/core/INSTALL.txt
+++ b/core/INSTALL.txt
@@ -50,13 +50,13 @@ Drupal requires:
   - Nginx 1.1 (or greater) (http://nginx.com/).
 - PHP 8.3.0 (or greater) (http://php.net/).
 - One of the following databases:
-  - MySQL 5.7.8 (or greater) (http://www.mysql.com/).
-  - MariaDB 10.3.7 (or greater) (https://mariadb.org/). MariaDB is a fully
+  - MySQL 8.0.0 (or greater) (http://www.mysql.com/).
+  - MariaDB 10.6.0 (or greater) (https://mariadb.org/). MariaDB is a fully
     compatible drop-in replacement for MySQL.
-  - Percona Server 5.7.8 (or greater) (http://www.percona.com/). Percona
+  - Percona Server 8.0.0 (or greater) (http://www.percona.com/). Percona
     Server is a backwards-compatible replacement for MySQL.
-  - PostgreSQL 10 (or greater) (http://www.postgresql.org/).
-  - SQLite 3.26 (or greater) (http://www.sqlite.org/).
+  - PostgreSQL 16 (or greater) (http://www.postgresql.org/).
+  - SQLite 3.45 (or greater) (http://www.sqlite.org/).
 
 For more detailed information about Drupal requirements, including a list of
 PHP extensions and configurations that are required, see "System requirements"
diff --git a/core/assets/scaffold/files/default.settings.php b/core/assets/scaffold/files/default.settings.php
index 960322d2dc18f918e080f47dfb2cd81a8546ef66..cd364bb00df011358baba3f44726acd6afb542a1 100644
--- a/core/assets/scaffold/files/default.settings.php
+++ b/core/assets/scaffold/files/default.settings.php
@@ -144,7 +144,7 @@
  * in deadlocks, the other two options are 'READ UNCOMMITTED' and 'SERIALIZABLE'.
  * They are available but not supported; use them at your own risk. For more
  * info:
- * https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
+ * https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html
  *
  * On your settings.php, change the isolation level:
  * @code
diff --git a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
index 022a94e37445142887a45355952fefccfd596987..867943abc6a5acba777f2ca661c9d0861088d9d8 100644
--- a/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
@@ -333,7 +333,7 @@ protected function initializeIterator() {
       }
       // If the query has a group by, our added fields need it too, to keep the
       // query valid.
-      // @see https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
+      // @see https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html
       $group_by = $this->query->getGroupBy();
       if ($group_by && $added_fields) {
         foreach ($added_fields as $added_field) {
diff --git a/core/modules/mysql/mysql.install b/core/modules/mysql/mysql.install
index e4ddf8d10b6891708901f5d16533dd3bddec0e0c..6523af0e9dff3f75860a6642dd4dc18eb3deb504 100644
--- a/core/modules/mysql/mysql.install
+++ b/core/modules/mysql/mysql.install
@@ -23,14 +23,7 @@ function mysql_requirements($phase) {
         return [];
       }
 
-      $query = 'SELECT @@SESSION.tx_isolation';
-      // The database variable "tx_isolation" has been removed in MySQL v8.0.3 and
-      // has been replaced by "transaction_isolation".
-      // @see https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_tx_isolation
-      // @see https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html
-      if (!$connection->isMariaDb() && version_compare($connection->version(), '8.0.2-AnyName', '>')) {
-        $query = 'SELECT @@SESSION.transaction_isolation';
-      }
+      $query = $connection->isMariaDb() ? 'SELECT @@SESSION.tx_isolation' : 'SELECT @@SESSION.transaction_isolation';
 
       $isolation_level = $connection->query($query)->fetchField();
 
diff --git a/core/modules/mysql/src/Driver/Database/mysql/Connection.php b/core/modules/mysql/src/Driver/Database/mysql/Connection.php
index 3a28b9f4167e936c0a546a390f90661d5800affe..09f3d4980b9ce6d784ca6b1e89a1672f2055293f 100644
--- a/core/modules/mysql/src/Driver/Database/mysql/Connection.php
+++ b/core/modules/mysql/src/Driver/Database/mysql/Connection.php
@@ -54,7 +54,7 @@ class Connection extends DatabaseConnection implements SupportsTemporaryTablesIn
    * The minimal possible value for the max_allowed_packet setting of MySQL.
    *
    * @link https://mariadb.com/kb/en/mariadb/server-system-variables/#max_allowed_packet
-   * @link https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_allowed_packet
+   * @link https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_allowed_packet
    *
    * @var int
    */
@@ -73,11 +73,8 @@ public function __construct(\PDO $connection, array $connection_options) {
     // combination mode), then MySQL doesn't interpret a double quote as an
     // identifier quote, in which case use the non-ANSI-standard backtick.
     //
-    // Because we still support MySQL 5.7, check for the deprecated combination
-    // modes as well.
-    //
-    // @see https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes
-    $ansi_quotes_modes = ['ANSI_QUOTES', 'ANSI', 'DB2', 'MAXDB', 'MSSQL', 'ORACLE', 'POSTGRESQL'];
+    // @see https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_ansi_quotes
+    $ansi_quotes_modes = ['ANSI_QUOTES', 'ANSI'];
     $is_ansi_quotes_mode = FALSE;
     if (isset($connection_options['init_commands']['sql_mode'])) {
       foreach ($ansi_quotes_modes as $mode) {
diff --git a/core/modules/mysql/src/Driver/Database/mysql/Install/Tasks.php b/core/modules/mysql/src/Driver/Database/mysql/Install/Tasks.php
index 4dbd2addf3998c299588daf22b3368fb4a096c5d..b7b7a14908c9733c3aa695aa03e95d7403c77d95 100644
--- a/core/modules/mysql/src/Driver/Database/mysql/Install/Tasks.php
+++ b/core/modules/mysql/src/Driver/Database/mysql/Install/Tasks.php
@@ -15,19 +15,13 @@ class Tasks extends InstallTasks {
 
   /**
    * Minimum required MySQL version.
-   *
-   * 5.7.8 is the minimum version that supports the JSON datatype.
-   * @see https://dev.mysql.com/doc/refman/5.7/en/json.html
    */
-  const MYSQL_MINIMUM_VERSION = '5.7.8';
+  const MYSQL_MINIMUM_VERSION = '8.0';
 
   /**
    * Minimum required MariaDB version.
-   *
-   * 10.3.7 is the first stable (GA) release in the 10.3 series.
-   * @see https://mariadb.com/kb/en/changes-improvements-in-mariadb-103/#list-of-all-mariadb-103-releases
    */
-  const MARIADB_MINIMUM_VERSION = '10.3.7';
+  const MARIADB_MINIMUM_VERSION = '10.6';
 
   /**
    * The PDO driver name for MySQL and equivalent databases.
diff --git a/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelExistingSettingsTest.php b/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelExistingSettingsTest.php
index 598449dc3e0473e227103fe5f4f59f27d9e594a4..4eae070981e7a8db04e4ecf9cf14687b99880462 100644
--- a/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelExistingSettingsTest.php
+++ b/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelExistingSettingsTest.php
@@ -52,13 +52,7 @@ public function testInstaller() {
     Database::closeConnection('default', 'default');
     $connection = Database::getConnection('default', 'default');
 
-    $query = 'SELECT @@SESSION.tx_isolation';
-    // The database variable "tx_isolation" has been removed in MySQL v8.0 and
-    // has been replaced by "transaction_isolation".
-    // @see https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_tx_isolation
-    if (!$connection->isMariaDb() && version_compare($connection->version(), '8.0.0-AnyName', '>')) {
-      $query = 'SELECT @@SESSION.transaction_isolation';
-    }
+    $query = $connection->isMariaDb() ? 'SELECT @@SESSION.tx_isolation' : 'SELECT @@SESSION.transaction_isolation';
 
     // Test that transaction level is REPEATABLE READ.
     $this->assertEquals('REPEATABLE-READ', $connection->query($query)->fetchField());
diff --git a/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelNoDatabaseSettingsTest.php b/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelNoDatabaseSettingsTest.php
index 712cac68e7bd5e59240e6cfb1c88c912b51e0250..28809d55b1efb4eeb9a8e718074874673f3b4f35 100644
--- a/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelNoDatabaseSettingsTest.php
+++ b/core/modules/mysql/tests/src/Functional/InstallerIsolationLevelNoDatabaseSettingsTest.php
@@ -56,13 +56,7 @@ public function testInstaller() {
     Database::closeConnection('default', 'default');
     $connection = Database::getConnection('default', 'default');
 
-    $query = 'SELECT @@SESSION.tx_isolation';
-    // The database variable "tx_isolation" has been removed in MySQL v8.0 and
-    // has been replaced by "transaction_isolation".
-    // @see https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_tx_isolation
-    if (!$connection->isMariaDb() && version_compare($connection->version(), '8.0.0-AnyName', '>')) {
-      $query = 'SELECT @@SESSION.transaction_isolation';
-    }
+    $query = $connection->isMariaDb() ? 'SELECT @@SESSION.tx_isolation' : 'SELECT @@SESSION.transaction_isolation';
 
     // Test that transaction level is READ-COMMITTED.
     $this->assertEquals('READ-COMMITTED', $connection->query($query)->fetchField());
diff --git a/core/modules/pgsql/src/Driver/Database/pgsql/Install/Tasks.php b/core/modules/pgsql/src/Driver/Database/pgsql/Install/Tasks.php
index 0922e47302f0af864d011dce9ffe04aff9047344..eb3a5d73b6d4f6be110d614a54233809d112fb71 100644
--- a/core/modules/pgsql/src/Driver/Database/pgsql/Install/Tasks.php
+++ b/core/modules/pgsql/src/Driver/Database/pgsql/Install/Tasks.php
@@ -18,9 +18,9 @@ class Tasks extends InstallTasks {
    *
    * The contrib extension pg_trgm is supposed to be installed.
    *
-   * @see https://www.postgresql.org/docs/12/pgtrgm.html
+   * @see https://www.postgresql.org/docs/16/pgtrgm.html
    */
-  const PGSQL_MINIMUM_VERSION = '12';
+  const PGSQL_MINIMUM_VERSION = '16';
 
   /**
    * {@inheritdoc}
diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php
index 960322d2dc18f918e080f47dfb2cd81a8546ef66..cd364bb00df011358baba3f44726acd6afb542a1 100644
--- a/sites/default/default.settings.php
+++ b/sites/default/default.settings.php
@@ -144,7 +144,7 @@
  * in deadlocks, the other two options are 'READ UNCOMMITTED' and 'SERIALIZABLE'.
  * They are available but not supported; use them at your own risk. For more
  * info:
- * https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
+ * https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html
  *
  * On your settings.php, change the isolation level:
  * @code