diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index d8f5e2f..d5b411e 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -321,6 +321,7 @@ function install_begin_request(&$install_state) {
   drupal_language_initialize();
 
   require_once DRUPAL_ROOT . '/core/includes/ajax.inc';
+  require_once DRUPAL_ROOT . '/core/includes/cache.inc';
   // Override the module list with a minimal set of modules.
   $module_list['system']['filename'] = 'core/modules/system/system.module';
   $module_list['user']['filename']   = 'core/modules/user/user.module';
@@ -328,18 +329,6 @@ function install_begin_request(&$install_state) {
   drupal_load('module', 'system');
   drupal_load('module', 'user');
 
-  // Load the cache infrastructure using a "fake" cache implementation that
-  // does not attempt to write to the database. We need this during the initial
-  // part of the installer because the database is not available yet. We
-  // continue to use it even when the database does become available, in order
-  // to preserve consistency between interactive and command-line installations
-  // (the latter complete in one page request and therefore are forced to
-  // continue using the cache implementation they started with) and also
-  // because any data put in the cache during the installer is inherently
-  // suspect, due to the fact that Drupal is not fully set up yet.
-  require_once DRUPAL_ROOT . '/core/includes/cache.inc';
-  $conf['cache_classes'] = array('cache' => 'Drupal\Core\Cache\InstallBackend');
-
   // The install process cannot use the database lock backend since the database
   // is not fully up, so we use a null backend implementation during the
   // installation process. This will also speed up the installation process.
diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
index d4de8bf..c7bd4b2 100644
--- a/core/lib/Drupal/Core/Cache/DatabaseBackend.php
+++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php
@@ -188,10 +188,15 @@ class DatabaseBackend implements CacheBackendInterface {
    * Implements Drupal\Core\Cache\CacheBackendInterface::expire().
    */
   function expire() {
-    Database::getConnection()->delete($this->bin)
-      ->condition('expire', CacheBackendInterface::CACHE_PERMANENT, '<>')
-      ->condition('expire', REQUEST_TIME, '<')
-      ->execute();
+    try {
+      Database::getConnection()->delete($this->bin)
+        ->condition('expire', CacheBackendInterface::CACHE_PERMANENT, '<>')
+        ->condition('expire', REQUEST_TIME, '<')
+        ->execute();
+    }
+    catch (Exception $e) {
+      // The database may not be available, so we'll ignore expire requests.
+    }
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Cache/InstallBackend.php b/core/lib/Drupal/Core/Cache/InstallBackend.php
deleted file mode 100644
index b507684..0000000
--- a/core/lib/Drupal/Core/Cache/InstallBackend.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\Core\Cache\InstallBackend.
- */
-
-namespace Drupal\Core\Cache;
-
-use Exception;
-
-/**
- * Defines a stub cache implementation to be used during installation.
- *
- * The stub implementation is needed when database access is not yet available.
- * Because Drupal's caching system never requires that cached data be present,
- * these stub functions can short-circuit the process and sidestep the need for
- * any persistent storage. Obviously, using this cache implementation during
- * normal operations would have a negative impact on performance.
- *
- * If there is a database cache, this backend will attempt to clear it whenever
- * possible. The reason for doing this is that the database cache can accumulate
- * data during installation due to any full bootstraps that may occur at the
- * same time (for example, Ajax requests triggered by the installer). If we
- * didn't try to clear it whenever one of the delete function are called, the
- * data in the cache would become stale; for example, the installer sometimes
- * calls variable_set(), which updates the {variable} table and then clears the
- * cache to make sure that the next page request picks up the new value.
- * Not actually clearing the cache here therefore leads old variables to be
- * loaded on the first page requests after installation, which can cause
- * subtle bugs, some of which would not be fixed unless the site
- * administrator cleared the cache manually.
- */
-class InstallBackend extends DatabaseBackend {
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::get().
-   */
-  function get($cid) {
-    return FALSE;
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::getMultiple().
-   */
-  function getMultiple(&$cids) {
-    return array();
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::set().
-   */
-  function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANENT, array $tags = array()) {}
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::delete().
-   */
-  function delete($cid) {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::delete($cid);
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::deleteMultiple().
-   */
-  function deleteMultiple(array $cids) {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::deleteMultiple($cids);
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::deletePrefix().
-   */
-  function deletePrefix($prefix) {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::deletePrefix($prefix);
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::invalidateTags().
-   */
-  function invalidateTags(array $tags) {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::invalidateTags($tags);
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::flush().
-   */
-  function flush() {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::flush();
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::expire().
-   */
-  function expire() {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::expire();
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::garbageCollection().
-   */
-  function garbageCollection() {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        parent::garbageCollection();
-      }
-    }
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Overrides Drupal\Core\Cache\DatabaseBackend::isEmpty().
-   */
-  function isEmpty() {
-    try {
-      if (class_exists('Drupal\Core\Database\Database')) {
-        return parent::isEmpty();
-      }
-    }
-    catch (Exception $e) {}
-    return TRUE;
-  }
-}
