Как создать новую базу данных, используя другую базу данных в качестве шаблона?

Добрый день! <br/> <br/> У меня есть задача: необходимо создать новую базу данных (БД-2) на основе данных из существующей базы данных (БД-1), доступной через SSH туннель. <br/> <br/> В БД-2 требуется создать таблицу things, используя несколько колонок из таблиц items и actions, находящихся в БД-1. <br/> <br/> То есть, мне нужно извлечь определенные данные из БД-1 и создать на их основе БД-2. <br/> <br/> Как правильно осуществить этот процесс? Какие инструменты или методы стоит использовать?
  • 7 ноября 2024 г. 5:23
Ответы на вопрос 4
Для создания новой базы данных (БД-2) на основе существующей базы данных (БД-1) с необходимыми данными, вам нужно выполнить несколько шагов. Вот общая последовательность действий:

### Шаг 1: Установить SSH-туннель
Если ваша БД-1 доступна только через SSH-туннель, первым делом установите SSH-туннель для подключения к вашей базе данных. Это можно сделать с помощью команды `ssh` в терминале. Например:

```bash
ssh -L локальный_порт:localhost:удаленный_порт username@remote_host
```

Здесь `локальный_порт` - это порт на вашем локальном компьютере, `удаленный_порт` - порт базы данных на удаленном сервере, `username` - ваше имя пользователя на удаленном сервере, и `remote_host` - адрес удаленного сервера.

### Шаг 2: Подключение к БД-1
После установления SSH-туннеля подключитесь к БД-1 с помощью клиента баз данных (например, MySQL Workbench, pgAdmin для PostgreSQL, или даже командной строки).

### Шаг 3: Извлечение необходимых данных
Вам нужно извлечь данные из таблиц `items` и `actions`, которые вам нужны для создания новой таблицы `things` в БД-2.

Вот пример SQL-запроса для извлечения данных (например, в MySQL):

```sql
SELECT i.column1, i.column2, a.column3
FROM items i
JOIN actions a ON i.id = a.item_id; -- Пример соединения по общему полю
```

### Шаг 4: Создание БД-2
Создайте новую базу данных (БД-2):

```sql
CREATE DATABASE db2;
```

Затем выберите ее:

```sql
USE db2;
```

### Шаг 5: Создание таблицы `things`
Создайте новую таблицу `things` в вашей новой базе данных с необходимыми колонками:

```sql
CREATE TABLE things (
    column1 datatype,
    column2 datatype,
    column3 datatype
);
```

### Шаг 6: Вставка данных в новую таблицу
Теперь вставьте попеременные данные из БД-1 в новую таблицу `things` в БД-2. Это можно сделать, используя оператор `INSERT INTO ... SELECT`. Например:

```sql
INSERT INTO things (column1, column2, column3)
SELECT i.column1, i.column2, a.column3
FROM items i
JOIN actions a ON i.id = a.item_id;
```

### Шаг 7: Проверка данных
Убедитесь, что данные были правильно скопированы:

```sql
SELECT * FROM things;
```

### Шаг 8: Завершение работы
Если вы использовали SSH-туннель, не забудьте закрыть его после завершения работы.

### Альтернативные инструменты
Вы также можете использовать другие инструменты для встроенной миграции данных, такие как:

- **ETL-инструменты** (Extract, Transform, Load), как Talend или Apache Nifi.
- **Скрипты на Python** с использованием библиотек, таких как SQLAlchemy или pandas для работы с базами данных.

Это общий план действий. Конкретные команды могут варьироваться в зависимости от используемой СУБД (MySQL, PostgreSQL и т. д.).
Используйте mysqldump с ключом --no-data.
Хоть бы указали какая база, предположим MySQL тогда в локальной базе делаем MySQL Federated и работаем далее запросами так если бы это было на одном компе 
CREATE TABLE federated_table (... структура...) ENGINE=FEDERATED DEFAULT CHARSET=latin1 
      CONNECTION='mysql://root@remote_host:9306/federated/test_table';

INSERT INTO table1 (Column1, Column2)
SELECT column1, column2 FROM federated_table;
1.   Создание клона БД из template0/template1, имеет ряд ограничений ( подключенные сеансы,  данные БД):  Template Databases  
2. Размер БД <->доступный размер диска
3. Нагрузка в момент копирования
3. Как мне кажется, самый безопасный вариант, разделить задачу на две:
- сделать бэкап на другой сервер dump bd for large database
- и уже на новой БД, update данных: где, так же, присутствуют свои практики, как быстро - это сделать
- переиндексация данных ( возможно )
Похожие вопросы