项目开发完毕正常运行以后,需要数据库定时备份,以备不时之需,需求有几点
1.系统有windows server 和 linux centOS
2.数据库有mysql和oracle
3.数据库密码不要暴露
4.备份后的数据库文件不要暴露
5.可按天或者小时进行备份,能自动删除时间>的备份文件
1 备份的两种方案
1.1数据库客户端实现的备份
数据库客户端主要是用的navicat
- 新建navicat计划(定时任务);
- 将数据库备份任务放入计划;
- 需要时可在navicat备份工具中恢复
ps:备份后的数据是psc格式的,mysql、oracle都可以使用;
经过考虑没采用这个方案,原因如下:
- 需要navicat,并不是所有地方有合适有navicat的;
- 不能实现密码加密,不能实现密码加密,
1.2 命令行实现数据加密
mysql有mysqldump命令,可备份出.sql格式的文件;
oracle有exp命令,可导出.dmp格式的文件,可以实现数据备份;
windows,linux均有计划任务选项可以把备份任务添加到计划里,实现定时备份,我们具体研究这一种;
2 linux + oracle
3 windows服务器下oracle定时备份
三个步骤
通过oracle的exp命令导出.dmp文件
编写dbBak.bat,
将dbBak.bat敏感信息隐藏
将dbBak.bat加入计划任务
通过oracle的exp命令导出.dmp文件
exp dbUserName/dbUserPassword@orcl file= D:/test/db_bak.dmp log=D:/test/db_bak/.log
其中dbUserName/dbUserPassword为数据库的账号密码,file= D:/test/db_bak.dmp,指定dmp文件路径,log=D:/test/db_bak/.log指定日志的路径,
如果不想导出全部表,还可以通过table参数指定需要导出的表;
打开cmd测试
控制台出现Export terminated successfully without warnings.
指定路径出现指定文件即可
通过后即可
编写dbBak.bat
这个我们主要实现备份文件名规则,定时删除过期文件
echo 初始化时间日期字符串,作为文件名
set THISDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set THISDATE=%THISDATE: =0%
set THISTIME=%TIME:~0,2%%TIME:~3,2%
set THISTIME=%THISTIME: =0%
exp userName/password@orcl file= D:/Java/db_bak_lyb2/lyb2_%THISDATE%_%THISTIME%.dmp log=D:/Java/db_bak_lyb2/lyb2_%THISDATE%_%THISTIME%.log
echo 删除15天前的记录
forfiles /p D:\Java\db_bak_lyb2\ /m lyb2_*.* /d -15 /c "cmd /c del @path\"
将dbBak.bat敏感信息隐藏
隐藏可以有两个方案,将dbBak.bat中的内容通过密钥加密,执行时在解密;
另一个简单点就是直接打包成exe,我们就直接打包了
下载bat2exe,可以将bat转换为exe
下载地址
双击运行后,先选择bat所在文件夹(文件夹中可以有.ico文件,作为生成exe的图标),再选择exe输出的文件夹,即可
将dbBak.exe加入计划任务
依次打开
计算机管理>系统工具>任务计划程序>任务计划程序库>Microsoft>windows
然后点击创建基本任务,如图(win server 12)
然后基本就是傻瓜式操作了,选择自己合适的时间间隔执行,就可以啦