---
url: 'https://metadrop.net/es/articulos/multiples-bases-de-datos-en-una-sola-instancia-en-drupal-9'
title: 'Múltiples bases de datos en una sola instancia en Drupal 9'
author: 'Eduardo Morales'
date: '2021-10-27T11:12:58+00:00'
updated: '2026-06-10T08:26:18+00:00'
type: article
summary: 'Cómo alojar múltiples bases de datos en la misma instancia en Drupal 9 utilizando un prefijo para las bases de datos secundarias y cómo definir la conexión de la base de datos utilizando la API de la base de datos.'
tags:
  - 'Drupal Planet'
published: true
og:
  determiner: Automatic
  site_name: Metadrop
  'image:alt': 'Múltiples bases de datos en una sola instancia en Drupal 9'
  street_address: 'Calle Manuel Luna, 12, 3 Dcha'
  locality: Madrid
  region: Madrid
  postal_code: '28020'
  country_name: España
  email: hola@metadrop.net
  phone_number: '910053180'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      '@type': Article
      '@id': 'https://metadrop.net/es/articulos/multiples-bases-de-datos-en-una-sola-instancia-en-drupal-9#article'
      name: 'Múltiples bases de datos en una sola instancia en Drupal 9'
      headline: 'Múltiples bases de datos en una sola instancia en Drupal 9'
      description: 'Cómo alojar múltiples bases de datos en la misma instancia en Drupal 9 utilizando un prefijo para las bases de datos secundarias y cómo definir la conexión de la base de datos utilizando la API de la base de datos.'
      datePublished: '2021-10-27T13:12:58+0200'
      dateModified: '2026-06-10T10:26:18+0200'
      author:
        '@type': Person
        name: 'Eduardo Morales'
      publisher:
        '@type': Organization
        '@id': 'https://metadrop.net/#organization'
      mainEntityOfPage: 'https://metadrop.net/es/articulos/multiples-bases-de-datos-en-una-sola-instancia-en-drupal-9'
    -
      '@type': Organization
      '@id': 'https://metadrop.net/#organization'
      url: 'https://metadrop.net/'
      name: Metadrop
      sameAs:
        - 'https://www.drupal.org/metadrop'
        - 'https://twitter.com/metadrop'
        - 'https://asociaciondrupal.es/partner/metadrop'
        - 'https://www.linkedin.com/company/metadrop'
      logo:
        '@type': ImageObject
        url: 'https://metadrop.net/themes/custom/mdrop_radix/logo-metadrop-500-500.jpg'
        width: '500'
        height: '500'
    -
      '@type': ItemPage
      '@id': 'https://metadrop.net/es/articulos/multiples-bases-de-datos-en-una-sola-instancia-en-drupal-9'
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Inicio
            item: 'https://metadrop.net/es'
          -
            '@type': ListItem
            position: 2
            name: 'Artículos expertos sobre Drupal y tecnología'
            item: 'https://metadrop.net/es/articulos'
      publisher:
        '@type': Organization
        '@id': 'https://metadrop.net/#organization'
---
 1. [Artículos](https://metadrop.net/es/articulos)
 
  

# Múltiples bases de datos en una sola instancia en Drupal 9

Miércoles 27 de Octubre de 2021

 

 



Cómo alojar múltiples bases de datos en la misma instancia en Drupal 9 utilizando un prefijo para las bases de datos secundarias y cómo definir la conexión de la base de datos utilizando la API de la base de datos.



   



En ocasiones queremos alojar varios sitios con su propia base de datos en un mismo servidor web. Esto puede ser útil cuando la **capacidad de almacenamiento no está aprovechada al máximo**, por lo que al usar una sola instancia podemos reducir costes. También para **aumentar la eficiencia** o simplemente por **comodidad**, como por ejemplo si tenemos una base de datos de clientes y queremos tenerla disponible desde la página web. Otra situación en la que nos puede resultar útil es en las **migraciones de Drupal**, cuando la fuente de datos proviene de otra plataforma como Wordpress, Drupal 7, Joomla etc. y necesitamos hacer la migración con la misma instancia de base de datos por limitaciones del proveedor web.

Antes de ponernos manos a la obra, es importante tener en cuenta las **limitaciones de espacio** para no alcanzar el límite contratado. Se recomienda que una vez terminadas las migraciones, eliminemos la base de datos que ha sido migrada y dejar solo la nueva para evitar un tamaño excesivo. Si se hace un **uso responsable** y los índices, la limpieza periódica de logs y el mantenimiento de la base de datos son buenos, no debería afectar al tiempo de respuesta. **La velocidad dependerá** mucho del servidor, los procesadores, la memoria contratada y el tipo de discos, por lo que es necesario contemplar todos los escenarios y los recursos disponibles.

## Cómo

- Cargamos la futura base de datos prefijada en una instancia vacía:
    
    ```plaintext
    drush sql-cli < my_database.sql
    ```
- Alteramos las tablas para que tengan un prefijo y las volcamos en un fichero:
    
    ```plaintext
    drush sql-query "SELECT Concat('ALTER TABLE \`', TABLE_NAME, '\` RENAME TO \`prefix_', TABLE_NAME, '\`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'db_name';" > /tmp/prefix_db.sql
    ```
- Borramos la instancia actual de la base de datos y cargamos la base de datos principal (sin prefijo):
    
    ```plaintext
    drush sql-drop -y
    cat main_database.sql | drush sql-cli
    ```
- Cargamos la base de datos con prefijo en la misma instancia que la base de datos "principal". Mantendrá las tablas de la base de datos principal y creará nuevas tablas con el prefijo.
    
    ```plaintext
    drush sql-cli < tmp/prefix_db.sql
    ```
- Es posible consultar la base de datos prefijada sin definir la conexión en *settings.local.php*:
    
    ```plaintext
    use Drupal\Core\Database\Database;
    
    // Connection info from default database.
    $connection_info = Database::getConnectionInfo();
    
    // Setup the prefix.
    $connection_info[$key]['prefix'][$key] = '_prefix';
    // It is necessary to define the driver.
    $connection_info[$key]['driver'] = 'mysql';
    
    // Create connection.
    Database::addConnectionInfo('migrate_d8', 'migrate_d8', $connection_info[$key]);
    $connection = Database::getConnection('migrate_d8', 'migrate_d8');
    
    // Query to the new connection.
    $query = $connection->select('node', 'nd');
    $query->addField('nd', 'nid');
    $query->range(0, 2);
    $result = $query->execute();
    
    print_r($result->fetchAll());
    
    ```
- Ejemplo de cómo configurar la conexión del prefijo en *settings.local.php*:
    
    ```plaintext
    $databases['db_with_prefix']['default'] = [
      'prefix' => 'prefix_',
      'driver' => 'mysql',
      'database' => 'db',
      'username' => 'db',
      'password' => 'db',
      'host' => 'db',
      'port' => '3306',
    ];
    
    ```
- Ejemplo de consulta a la base de datos con prefijo:
    
    ```plaintext
    
    $connection = Database::getConnection('db_with_prefix', 'default');
    $query = $connection->select('node', 'nd');
    $query->addField('nd', 'nid');
    $query->range(0, 2);
    $result = $query->execute();
    print_r($result->fetchAll());
    ```



- Eduardo Morales
    
    Senior Drupal developer
 
[Desarrollo de módulos e integraciones de terceros con Drupal](https://metadrop.net/es/servicios/drupal/integraciones " See Desarrollo de módulos e integraciones de terceros con Drupal")

Metadrop conecta Drupal con tu CRM, ERP, pasarela de pago y stack de marketing — Salesforce, Microsoft Dynamics, TPV virtual de BBVA, Workday y Keepeek — mediante módulos personalizados y APIs seguras y conformes con el RGPD.

 

 Ver más