抽象
我已经发布了许多有关Derby的博客:
- 同一主机上的多个Derby网络服务器
- Apache Derby数据库用户和权限
- 与Maven和内存中Derby数据库的集成测试
这本不打算是一个系列。 但是多年来,我越来越多地使用Derby。 最近,我开始将Derby用作微服务体系结构的首选数据库。 这些是个人使用的应用程序,因此Derby绰绰有余。 即使这些是个人使用的应用程序,我仍需要具有受限用户权限的 多台服务器 ,并且最重要的是要备份。 我不想丢失我的数据! 这篇文章的目的是演示如何备份Derby数据库。
免责声明
这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。
要求
我使用以下主要技术完成了本文的所有工作。 您可能可以使用不同的技术或版本来做相同的事情,但不能保证。
- Apache Derby 10.14.2.0
- OpenJDK 64位服务器VM Zulu 11.1 + 23(内部版本11-ea + 22,混合模式)
下载
此博客文章没有下载。 脚本完整显示。
Derby系统实用程序
备份Derby数据库确实非常简单。 Derby具有用于执行备份的内置系统实用程序。 该实用程序是SYSCS_UTIL.SYSCS_BACKUP_DATABASE('/location/of/the/backup/')
。 调用时,Derby将锁定数据库并执行对您指定为SYSCS_BACKUP_DATABASE
参数的文件系统位置的复制操作。 现在我们知道执行备份的系统实用程序,让我们看一下bash脚本来自动执行备份。
备份脚本
清单1是一个bash脚本,可以轻松对其进行修改以备份任何网络服务器上的任何Derby数据库。
清单1 – derby-mydatabase-backup.sh
#!/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
脚本文件。 该脚本文件包含执行备份的SQL命令。 第24行是connect
命令,因此Derby ij
可以连接到要备份的数据库。 第25行是调用SYSCS_BACKUP_DATABASE
系统实用程序的SYSCS_BACKUP_DATABASE
。 备份目录的位置作为参数传递给实用程序。 执行此SQL命令后,Derby将锁定数据库并执行备份。 第26行是退出ij
的exit
命令。
然后,第33行终于发生了一切。 使用作为命令行参数传递给ij
的动态创建的backup.sql
文件的位置来调用Derby ij
命令。 当bash执行第33行时,如果一切顺利,则将备份Derby数据库。
注意如果使用Java安全策略运行Derby网络服务器,则此脚本可能会遇到一些问题。 Java SecurityManager可能会阻止与数据库或SecurityManager的网络连接,我在写入备份目录时遇到权限问题。
摘要
备份Derby数据库非常容易。 只需调用SYSCS_UTIL.SYSCS_BACKUP_DATABASE('/location/of/the/backup/')
。
参考文献
备份数据库。 (2013年1月24日)。 db.apache.org。 从https://db.apache.org/derby/docs/10.0/manuals/admin/hubprnt43.html检索。
翻译自: https://www.javacodegeeks.com/2018/11/derby-database-backup.html