Статьи

Резервное копирование базы данных Derby

Аннотация

Я уже опубликовал ряд блогов о Дерби:

Это не было предназначено для серии. Но с годами я использую Дерби все больше и больше. Недавно я начал использовать Derby в качестве базы данных для своей микросервисной архитектуры. Это приложения для личного использования, поэтому Derby более чем достаточно. Несмотря на то, что это приложения для личного пользования, мне требуется несколько серверов с ограниченными правами пользователя и, что самое важное, резервное копирование. Я бы не хотел потерять свои данные! Цель этого поста — показать, как сделать резервную копию базы данных Derby.

отказ

Этот пост является исключительно информативным. Критически подумайте, прежде чем использовать любую представленную информацию. Учитесь на этом, но в конечном итоге принимайте свои собственные решения на свой страх и риск.

Требования

Я сделал всю работу для этого поста, используя следующие основные технологии. Вы можете сделать то же самое с разными технологиями или версиями, но без гарантий.

  • Apache Derby 10.14.2.0
  • OpenJDK 64-битный сервер ВМ Zulu 11.1 + 23 (сборка 11-еа + 22, смешанный режим)

Скачать

Там нет загрузки с этим сообщением в блоге. Сценарии показаны полностью.

Утилита Derby System

Резервное копирование базы данных Derby действительно довольно просто. Derby имеет встроенную системную утилиту для выполнения резервного копирования. Утилита SYSCS_UTIL.SYSCS_BACKUP_DATABASE('/location/of/the/backup/') . При вызове Derby заблокирует базу данных и выполнит операцию копирования в расположение файловой системы, указанное в качестве параметра для SYSCS_BACKUP_DATABASE . Теперь, когда мы знаем системную утилиту для резервного копирования, давайте рассмотрим скрипт bash для его автоматизации.

Резервный скрипт

В листинге 1 приведен скрипт bash, который можно легко изменить для резервного копирования любой базы данных Derby на любом сетевом сервере.

Листинг 1 — derby-mydatabase-backup.sh

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
 
# Define a bunch of variables which will be used within this script.
# The names of the variables should be self-explanatory.
DERBY_HOME=/opt/db-derby-10.14.2.0-bin/
NETWORK_SERVER_HOST=localhost
NETWORK_SERVER_PORT=1527
DATABASE_NAME=mydatabase
DATABASE_USER=sa
DATABASE_PASSWORD=abc123
JDBC_URL="jdbc:derby://$NETWORK_SERVER_HOST:$NETWORK_SERVER_PORT/$DATABASE_NAME"
BACKUP_DIRECTORY="/tmp/$DATABASE_NAME-backup/$NETWORK_SERVER_PORT"
BACKUP_SCRIPT="$BACKUP_DIRECTORY/backup.sql"
 
# Remove old backup if it exists. It is not a good idea to
# perform a backup on top of an existing backup.
rm -rf $BACKUP_DIRECTORY
mkdir -p $BACKUP_DIRECTORY
cd $BACKUP_DIRECTORY
 
# Use the `echo` command to dynamically create an SQL file.
# This SQL file will be used by Derby `ij` to connect to
# the database and perform the backup.
echo "connect '$JDBC_URL' user '$DATABASE_USER' password '$DATABASE_PASSWORD';" >> $BACKUP_SCRIPT
echo "CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('$BACKUP_DIRECTORY');" >> $BACKUP_SCRIPT
echo "exit;" >> $BACKUP_SCRIPT
 
# Run the Derby `ij` application, passing it the SQL file
# that was just dynamically created. `ij` will read the
# SQL file, executing its commands. This will then
# cause `ij` to connect to the database and call the
# system utility to perform the backup.
$DERBY_HOME/bin/ij $BACKUP_SCRIPT

Давайте посмотрим на этот скрипт более подробно.

Строки 5–15 определяют количество переменных, используемых в скрипте. Некоторые переменные используются для установки значений других переменных. Здесь нет ничего слишком сложного. Имена переменных говорят сами за себя.

Строки 17–19 — обслуживание файловой системы. Не рекомендуется создавать резервную копию поверх существующей резервной копии. Таким образом, эти строки удаляют существующую резервную копию (если она существует) и создают новый пустой каталог для резервных копий.

Строки 24–26 отвечают за создание backup.sql сценария backup.sql . Этот файл сценария содержит команды SQL для выполнения резервного копирования. Строка 24 — это команда connect поэтому Derby ij может подключиться к базе данных, которую вы хотите сделать резервную копию. В строке 25 происходит волшебство при вызове системной утилиты SYSCS_BACKUP_DATABASE . Местоположение каталога резервного копирования передается в качестве параметра утилите. Когда эта команда SQL будет выполнена, Derby заблокирует базу данных и выполнит резервное копирование. Строка 26 — команда exit для выхода из ij .

Строка 33, наконец, где все происходит. Команда Derby ij вызывается с расположением динамически созданного файла backup.sql переданного ij в качестве параметра командной строки. Когда bash выполняет строку 33, и если все идет хорошо, резервная копия базы данных Derby.

ПРИМЕЧАНИЕ. Если вы используете сетевой сервер Derby с политикой безопасности Java, у вас могут возникнуть некоторые проблемы с этим сценарием. Java SecurityManager может препятствовать сетевому соединению с базой данных, или проблемы с разрешением SecurityManager my Встреча при записи в каталог резервных копий.

Резюме

Резервное копирование базы данных Derby довольно легко. Просто вызовите SYSCS_UTIL.SYSCS_BACKUP_DATABASE('/location/of/the/backup/') .

Рекомендации

Резервное копирование базы данных. (2013, 24 января). db.apache.org. Получено с https://db.apache.org/derby/docs/10.0/manuals/admin/hubprnt43.html .

Опубликовано на Java Code Geeks с разрешения Майкла Ремиджана, партнера нашей программы JCG. Смотрите оригинальную статью здесь: Резервное копирование базы данных Derby

Мнения, высказанные участниками Java Code Geeks, являются их собственными.