Аннотация
Я уже опубликовал ряд блогов о Дерби:
- Несколько сетевых серверов 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=localhostNETWORK_SERVER_PORT=1527DATABASE_NAME=mydatabaseDATABASE_USER=saDATABASE_PASSWORD=abc123JDBC_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_DIRECTORYmkdir -p $BACKUP_DIRECTORYcd $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_SCRIPTecho "CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('$BACKUP_DIRECTORY');" >> $BACKUP_SCRIPTecho "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, являются их собственными. |