diff --git a/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php b/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
index 3443db867c..449019d292 100644
--- a/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
@@ -4,7 +4,7 @@
 
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\Database\Connection;
+use Drupal\Core\Database\Database;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\State\StateInterface;
 use Drupal\Core\TempStore\PrivateTempStoreFactory;
@@ -112,51 +112,54 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#required' => TRUE,
     ];
 
-    $form['database'] = [
-      '#type' => 'details',
-      '#title' => $this->t('Source database'),
-      '#description' => $this->t('Provide credentials for the database of the Drupal site you want to upgrade.'),
-      '#open' => TRUE,
-    ];
-
-    $form['database']['driver'] = [
-      '#type' => 'radios',
-      '#title' => $this->t('Database type'),
-      '#required' => TRUE,
-      '#default_value' => $default_driver,
-    ];
-    if (count($drivers) == 1) {
-      $form['database']['driver']['#disabled'] = TRUE;
-    }
+    $connection_info = Database::getConnectionInfo('migrate_drupal_source');
+    if (!isset($connection_info['default'])) {
+      $form['database'] = [
+        '#type' => 'details',
+        '#title' => $this->t('Source database'),
+        '#description' => $this->t('Provide credentials for the database of the Drupal site you want to upgrade.'),
+        '#open' => TRUE,
+      ];
 
-    // Add driver-specific configuration options.
-    foreach ($drivers as $key => $driver) {
-      $form['database']['driver']['#options'][$key] = $driver->name();
-
-      $form['database']['settings'][$key] = $driver->getFormOptions($default_options);
-      // @todo https://www.drupal.org/node/2678510 Using
-      //   #limit_validation_errors in the submit does not work so it is not
-      //   possible to require the database and username for mysql and pgsql.
-      //   This is because this is a multi-step form.
-      $form['database']['settings'][$key]['database']['#required'] = FALSE;
-      $form['database']['settings'][$key]['username']['#required'] = FALSE;
-      $form['database']['settings'][$key]['#prefix'] = '<h2 class="js-hide">' . $this->t('@driver_name settings', ['@driver_name' => $driver->name()]) . '</h2>';
-      $form['database']['settings'][$key]['#type'] = 'container';
-      $form['database']['settings'][$key]['#tree'] = TRUE;
-      $form['database']['settings'][$key]['advanced_options']['#parents'] = [$key];
-      $form['database']['settings'][$key]['#states'] = [
-        'visible' => [
-          ':input[name=driver]' => ['value' => $key],
-        ],
+      $form['database']['driver'] = [
+        '#type' => 'radios',
+        '#title' => $this->t('Database type'),
+        '#required' => TRUE,
+        '#default_value' => $default_driver,
       ];
+      if (count($drivers) == 1) {
+        $form['database']['driver']['#disabled'] = TRUE;
+      }
 
-      // Move the host fields out of advanced settings.
-      if (isset($form['database']['settings'][$key]['advanced_options']['host'])) {
-        $form['database']['settings'][$key]['host'] = $form['database']['settings'][$key]['advanced_options']['host'];
-        $form['database']['settings'][$key]['host']['#title'] = 'Database host';
-        $form['database']['settings'][$key]['host']['#weight'] = -1;
-        unset($form['database']['settings'][$key]['database']['#default_value']);
-        unset($form['database']['settings'][$key]['advanced_options']['host']);
+      // Add driver-specific configuration options.
+      foreach ($drivers as $key => $driver) {
+        $form['database']['driver']['#options'][$key] = $driver->name();
+
+        $form['database']['settings'][$key] = $driver->getFormOptions($default_options);
+        // @todo https://www.drupal.org/node/2678510 Using
+        //   #limit_validation_errors in the submit does not work so it is not
+        //   possible to require the database and username for mysql and pgsql.
+        //   This is because this is a multi-step form.
+        $form['database']['settings'][$key]['database']['#required'] = FALSE;
+        $form['database']['settings'][$key]['username']['#required'] = FALSE;
+        $form['database']['settings'][$key]['#prefix'] = '<h2 class="js-hide">' . $this->t('@driver_name settings', ['@driver_name' => $driver->name()]) . '</h2>';
+        $form['database']['settings'][$key]['#type'] = 'container';
+        $form['database']['settings'][$key]['#tree'] = TRUE;
+        $form['database']['settings'][$key]['advanced_options']['#parents'] = [$key];
+        $form['database']['settings'][$key]['#states'] = [
+          'visible' => [
+            ':input[name=driver]' => ['value' => $key],
+          ],
+        ];
+
+        // Move the host fields out of advanced settings.
+        if (isset($form['database']['settings'][$key]['advanced_options']['host'])) {
+          $form['database']['settings'][$key]['host'] = $form['database']['settings'][$key]['advanced_options']['host'];
+          $form['database']['settings'][$key]['host']['#title'] = 'Database host';
+          $form['database']['settings'][$key]['host']['#weight'] = -1;
+          unset($form['database']['settings'][$key]['database']['#default_value']);
+          unset($form['database']['settings'][$key]['advanced_options']['host']);
+        }
       }
     }
 
@@ -212,32 +215,44 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
     // Retrieve the database driver from the form, use reflection to get the
     // namespace, and then construct a valid database array the same as in
     // settings.php.
-    $driver = $form_state->getValue('driver');
-    $drivers = $this->getDatabaseTypes();
-    $reflection = new \ReflectionClass($drivers[$driver]);
-    $install_namespace = $reflection->getNamespaceName();
-
-    $database = $form_state->getValue($driver);
-    // Cut the trailing \Install from namespace.
-    $database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\'));
-    $database['driver'] = $driver;
-
-    // Validate the driver settings and just end here if we have any issues.
-    $connection = NULL;
-    $error_key = $database['driver'] . '][database';
-    if ($errors = $drivers[$driver]->validateDatabaseSettings($database)) {
-      foreach ($errors as $name => $message) {
-        $this->errors[$name] = $message;
+    if ($driver = $form_state->getValue('driver')) {
+      $drivers = $this->getDatabaseTypes();
+      $reflection = new \ReflectionClass($drivers[$driver]);
+      $install_namespace = $reflection->getNamespaceName();
+
+      $database = $form_state->getValue($driver);
+      // Cut the trailing \Install from namespace.
+      $database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\'));
+      $database['driver'] = $driver;
+
+      // Validate the driver settings and just end here if we have any issues.
+      $connection = NULL;
+      $error_key = $database['driver'] . '][database';
+      if ($errors = $drivers[$driver]->validateDatabaseSettings($database)) {
+        foreach ($errors as $name => $message) {
+          $this->errors[$name] = $message;
+        }
       }
-    }
 
-    // Get the Drupal version of the source database so it can be validated.
-    if (!$this->errors) {
+      // Get the Drupal version of the source database so it can be validated.
+      if (!$this->errors) {
+        try {
+          $connection = $this->getConnection($database);
+        }
+        catch (\Exception $e) {
+          $msg = $this->t('Failed to connect to your database server. The server reports the following message: %error.<ul><li>Is the database server running?</li><li>Does the database exist, and have you entered the correct database name?</li><li>Have you entered the correct username and password?</li><li>Have you entered the correct database hostname?</li></ul>', ['%error' => $e->getMessage()]);
+          $this->errors[$error_key] = $msg;
+        }
+      }
+    }
+    else {
+      $error_key = 'version]';
       try {
-        $connection = $this->getConnection($database);
+        $connection = Database::getConnection('default', 'migrate_drupal_source');
+        $database = Database::getConnectionInfo('migrate_drupal_source')['default'];
       }
       catch (\Exception $e) {
-        $msg = $this->t('Failed to connect to your database server. The server reports the following message: %error.<ul><li>Is the database server running?</li><li>Does the database exist, and have you entered the correct database name?</li><li>Have you entered the correct username and password?</li><li>Have you entered the correct database hostname?</li></ul>', ['%error' => $e->getMessage()]);
+        $msg = $this->t('Failed to connect to your database server. The server reports the following message: %error.<ul><li>Is the database server running?</li><li>Does the database exist, and have you set up the correct database info?</li><li>Have you set up the correct username and password?</li><li>Have you set up the correct database hostname?</li></ul>', ['%error' => $e->getMessage()]);
         $this->errors[$error_key] = $msg;
       }
     }
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php
index 193620dfcd..2c2b28416d 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php
@@ -3,6 +3,7 @@
 namespace Drupal\migrate_drupal_ui\Form;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Database\Connection;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\State\StateInterface;
