diff --git a/core/core.services.yml b/core/core.services.yml
index 30fbcc2..9c8787b 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -167,7 +167,7 @@ services:
 
   cache_factory:
     class: Drupal\Core\Cache\CacheFactory
-    arguments: ['@settings', '%cache_default_bin_backends%']
+    arguments: ['@settings', '%cache_default_bin_backends%', '@core.installation_attempted']
     calls:
       - [setContainer, ['@service_container']]
   cache_contexts_manager:
@@ -685,6 +685,15 @@ services:
     class: Drupal\Core\AppRootFactory
     arguments: ['@kernel']
     public: false
+  core.installation_attempted:
+    class: SplBool
+    factory: core.installation_attempted.factory:get
+    public: false
+    tags:
+      - { name: parameter_service }
+  core.installation_attempted.factory:
+    class: Drupal\Core\Installer\InstallationAttemptedFactory
+    public: false
   site.path:
     class: SplString
     factory: site.path.factory:get
diff --git a/core/lib/Drupal/Core/Cache/CacheFactory.php b/core/lib/Drupal/Core/Cache/CacheFactory.php
index d029cc1..d955018 100644
--- a/core/lib/Drupal/Core/Cache/CacheFactory.php
+++ b/core/lib/Drupal/Core/Cache/CacheFactory.php
@@ -34,6 +34,12 @@ class CacheFactory implements CacheFactoryInterface, ContainerAwareInterface {
   protected $defaultBinBackends;
 
   /**
+   * @see drupal_installation_attempted()
+   * @var bool
+   */
+  protected $installationAttempted;
+
+  /**
    * Constructs CacheFactory object.
    *
    * @param \Drupal\Core\Site\Settings $settings
@@ -41,10 +47,13 @@ class CacheFactory implements CacheFactoryInterface, ContainerAwareInterface {
    * @param array $default_bin_backends
    *   (optional) A mapping of bin to backend service name. Mappings in
    *   $settings take precedence over this.
+   * @param bool $installation_attempted
+   *   (optional) Indicates if Drupal is being installed. Defaults to FALSE.
    */
-  public function __construct(Settings $settings, array $default_bin_backends = []) {
+  public function __construct(Settings $settings, array $default_bin_backends = [], $installation_attempted = FALSE) {
     $this->settings = $settings;
     $this->defaultBinBackends = $default_bin_backends;
+    $this->installationAttempted = $installation_attempted;
   }
 
   /**
@@ -63,6 +72,10 @@ public function __construct(Settings $settings, array $default_bin_backends = []
    *   The cache backend object associated with the specified bin.
    */
   public function get($bin) {
+    // Disable caching during Drupal installation.
+    if ($this->installationAttempted) {
+      return new NullBackend($bin);
+    }
     $cache_settings = $this->settings->get('cache');
     // First, look for a cache bin specific setting.
     if (isset($cache_settings['bins'][$bin])) {
diff --git a/core/lib/Drupal/Core/Installer/InstallationAttemptedFactory.php b/core/lib/Drupal/Core/Installer/InstallationAttemptedFactory.php
new file mode 100644
index 0000000..5c2cef2
--- /dev/null
+++ b/core/lib/Drupal/Core/Installer/InstallationAttemptedFactory.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Drupal\Core\Installer;
+
+/**
+ * Gets whether or not Drupal is currently installing from global state.
+ *
+ * @internal
+ */
+class InstallationAttemptedFactory {
+
+  /**
+   * Returns TRUE if a Drupal installation is currently being attempted.
+   *
+   * @return bool
+   *   TRUE if a Drupal installation is currently being attempted, FALSE if not.
+   */
+  public function get() {
+    return drupal_installation_attempted();
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php b/core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php
index 0c43bb2..ab0d1b0 100644
--- a/core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php
+++ b/core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\Core\Cache;
 
+use Drupal\Core\Cache\CacheFactoryInterface;
+use Drupal\Core\Cache\NullBackend;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\Cache\CacheFactory;
 use Drupal\Core\Site\Settings;
@@ -145,4 +147,24 @@ public function testCacheFactoryWithSpecifiedPerBinBackend() {
     $this->assertSame($render_bin, $actual_bin);
   }
 
+  /**
+   * Test that the cache factory creates a NullBackend during installation.
+   *
+   * @covers ::__construct
+   * @covers ::get
+   */
+  public function testCacheFactoryDuringInstaller() {
+    $settings = new Settings([]);
+    $cache_factory = new CacheFactory($settings, [], TRUE);
+
+    $container = new ContainerBuilder();
+    $cache_factory->setContainer($container);
+
+    $builtin_default_backend_factory = $this->prophesize(CacheFactoryInterface::class);
+    $builtin_default_backend_factory->get()->shouldNotBeCalled();
+    $container->set('cache.backend.database', $builtin_default_backend_factory->reveal());
+    $actual_bin = $cache_factory->get('render');
+    $this->assertInstanceOf(NullBackend::class, $actual_bin);
+  }
+
 }
