Derby数据库备份
抽象
我已經(jīng)發(fā)布了許多有關(guān)Derby的博客:
- 同一主機(jī)上的多個(gè)Derby網(wǎng)絡(luò)服務(wù)器
- Apache Derby數(shù)據(jù)庫(kù)用戶(hù)和權(quán)限
- 與Maven和內(nèi)存中Derby數(shù)據(jù)庫(kù)的集成測(cè)試
這本不打算是一個(gè)系列。 但是多年來(lái),我越來(lái)越多地使用Derby。 最近,我開(kāi)始將Derby用作微服務(wù)體系結(jié)構(gòu)的首選數(shù)據(jù)庫(kù)。 這些是個(gè)人使用的應(yīng)用程序,因此Derby綽綽有余。 即使這些是個(gè)人使用的應(yīng)用程序,我仍需要具有受限用戶(hù)權(quán)限的 多臺(tái)服務(wù)器 ,并且最重要的是要備份。 我不想丟失我的數(shù)據(jù)! 這篇文章的目的是演示如何備份Derby數(shù)據(jù)庫(kù)。
免責(zé)聲明
這篇文章僅供參考。 在使用所提供的任何信息之前,請(qǐng)認(rèn)真思考。 從中學(xué)到東西,但最終自己做出決定,風(fēng)險(xiǎn)自負(fù)。
要求
我使用以下主要技術(shù)完成了本文的所有工作。 您可能可以使用不同的技術(shù)或版本來(lái)做相同的事情,但不能保證。
- Apache Derby 10.14.2.0
- OpenJDK 64位服務(wù)器VM Zulu 11.1 + 23(內(nèi)部版本11-ea + 22,混合模式)
下載
此博客文章沒(méi)有下載。 腳本完整顯示。
Derby系統(tǒng)實(shí)用程序
備份Derby數(shù)據(jù)庫(kù)確實(shí)非常簡(jiǎn)單。 Derby具有用于執(zhí)行備份的內(nèi)置系統(tǒng)實(shí)用程序。 該實(shí)用程序是SYSCS_UTIL.SYSCS_BACKUP_DATABASE('/location/of/the/backup/') 。 調(diào)用時(shí),Derby將鎖定數(shù)據(jù)庫(kù)并執(zhí)行對(duì)您指定為SYSCS_BACKUP_DATABASE參數(shù)的文件系統(tǒng)位置的復(fù)制操作。 現(xiàn)在我們知道執(zhí)行備份的系統(tǒng)實(shí)用程序,讓我們看一下bash腳本來(lái)自動(dòng)執(zhí)行備份。
備份腳本
清單1是一個(gè)bash腳本,可以輕松對(duì)其進(jìn)行修改以備份任何網(wǎng)絡(luò)服務(wù)器上的任何Derby數(shù)據(jù)庫(kù)。
清單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讓我們更詳細(xì)地看一下這個(gè)腳本。
第5-15行設(shè)置了腳本中使用的許多變量。 一些變量用于設(shè)置其他變量的值。 這里沒(méi)有什么太復(fù)雜的。 變量的名稱(chēng)是不言自明的。
第17-19行是文件系統(tǒng)維護(hù)。 在現(xiàn)有備份之上執(zhí)行備份不是一個(gè)好主意。 因此,這些行將刪除現(xiàn)有備份(如果存在),并創(chuàng)建一個(gè)新的空備份目錄。
然后,第24–26行負(fù)責(zé)創(chuàng)建backup.sql腳本文件。 該腳本文件包含執(zhí)行備份的SQL命令。 第24行是connect命令,因此Derby ij可以連接到要備份的數(shù)據(jù)庫(kù)。 第25行是調(diào)用SYSCS_BACKUP_DATABASE系統(tǒng)實(shí)用程序的SYSCS_BACKUP_DATABASE 。 備份目錄的位置作為參數(shù)傳遞給實(shí)用程序。 執(zhí)行此SQL命令后,Derby將鎖定數(shù)據(jù)庫(kù)并執(zhí)行備份。 第26行是退出ij的exit命令。
然后,第33行終于發(fā)生了一切。 使用作為命令行參數(shù)傳遞給ij的動(dòng)態(tài)創(chuàng)建的backup.sql文件的位置來(lái)調(diào)用Derby ij命令。 當(dāng)bash執(zhí)行第33行時(shí),如果一切順利,則將備份Derby數(shù)據(jù)庫(kù)。
注意如果使用Java安全策略運(yùn)行Derby網(wǎng)絡(luò)服務(wù)器,則此腳本可能會(huì)遇到一些問(wèn)題。 Java SecurityManager可能會(huì)阻止與數(shù)據(jù)庫(kù)或SecurityManager的網(wǎng)絡(luò)連接,我在寫(xiě)入備份目錄時(shí)遇到權(quán)限問(wèn)題。
摘要
備份Derby數(shù)據(jù)庫(kù)非常容易。 只需調(diào)用SYSCS_UTIL.SYSCS_BACKUP_DATABASE('/location/of/the/backup/') 。
參考文獻(xiàn)
備份數(shù)據(jù)庫(kù)。 (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
總結(jié)
以上是生活随笔為你收集整理的Derby数据库备份的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 撤回上一步的快捷键(撤回下一步快捷键)
- 下一篇: Hibernate事实:如何“断言” S