Аннотация
Я уже опубликовал ряд блогов о Дерби:
- Несколько сетевых серверов Derby на одном хосте
- Пользователи и разрешения базы данных Apache Derby
- Интеграционное тестирование с Maven и базой данных 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, являются их собственными. |