简单的数据库备份脚本
常用数据库备份脚本
数据库备份脚本是一种用于定期将数据库中的数据导出到一个文件中的程序,通常用于数据恢复或迁移的目的。数据库备份脚本可以根据不同的数据库类型和需求,采用不同的语言和工具编写,例如Shell、Python、MySQLdump等。本文将介绍如何编写一个简单的数据库备份脚本,并给出一个示例。
编写数据库备份脚本的一般步骤如下:
- 确定备份的数据库类型,例如MySQL、Oracle、MongoDB等,以及备份的方式,例如全量备份、增量备份、差异备份等。
- 确定备份的目标文件的格式,例如SQL、CSV、JSON等,以及存储的位置,例如本地磁盘、网络共享、云存储等。
- 确定备份的时间和频率,例如每天、每周、每月等,以及是否需要压缩或加密备份文件。
- 选择合适的语言和工具编写备份脚本,根据数据库类型和需求调用相应的命令或接口,实现数据导出和文件存储的功能。
- 测试和调试备份脚本,确保能够正确地执行并生成预期的结果。
- 部署和运行备份脚本,可以使用定时任务或其他方式自动触发备份脚本的执行,也可以手动执行。
下面给出一个使用Shell和MySQLdump编写的MySQL数据库全量备份脚本的示例:
#!/bin/bash
# 定义变量
DB_HOST="localhost" # 数据库主机名
DB_USER="root" # 数据库用户名
DB_PASS="123456" # 数据库密码
DB_NAME="test" # 数据库名称
BACKUP_DIR="/home/backup" # 备份文件存储目录
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$(date +%Y%m%d).sql" # 备份文件名称
# 创建备份目录
mkdir -p $BACKUP_DIR
# 导出数据库数据到文件
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILE
# 压缩备份文件
gzip $BACKUP_FILE
# 删除过期的备份文件(保留最近7天)
find $BACKUP_DIR -mtime +7 -name "*.sql.gz" -exec rm -f {} \;
# 输出提示信息
echo "Backup completed successfully."
达梦数据库
Windows
echo on
echo 开始备份数据库
setlocal
rem 获取小时
set h=%time:~0,2%
rem 获取时间
set Ymd=%date:~0,4%-%date:~5,2%-%date:~8,2%-%h: =0%-%time:~3,2%-%time:~6,2%
rem 设置备份路径
set bakdir=G:\DM8\Backup\
rem 设置IP地址
set host=127.0.0.1
rem 设置端口号
set port=5236
rem 设置账号
set username=SYSDBA
rem 设置密码
set password=123456
rem 设置备份数据库
set dbname=ABC
rem 拼接连接信息
set connect=%username%/%password%@%host%:%port%
rem 设置备份文件名和日志文件名
set backupfile=%dbname%_backup_%Ymd%.dmp
set logfile=%dbname%_backup_%Ymd%.log
D:\DM8\bin\dexp userid=%connect% file=%backupfile% log=%logfile% directory=%bakdir% owner=%dbname%
bz c %bakdir%%backupfile%.7z %bakdir%%backupfile% %bakdir%%logfile%
rem D:\DM8\bin\DIsql %username%/%password% -E "INSERT INTO %dbname%.PRD_DB_BACKUP (FILE_PATH, BACKUP_TIME, FILE_SIZE, DB_NAME, FILE_NAME, BACKUP_DESCRIBE) VALUES ('%bakdir%', '%Ymd%', '0', '%dbname%', '%backupfile%.7z', '自动备份')"
del /f %bakdir%%backupfile% %bakdir%%logfile%
endlocal
echo 数据库备份成功
exit
Linux
#!/bin/bash
# 设置数据库账号密码
username=SYSDBA
password=123456
# 设置备份数据
dbname=ABC
# 设置IP地址
host=127.0.0.1
# 设置端口
port=5236
# 设置时间
Ymd=`date +%Y%m%d%H%M%S`
# 设置备份路径
bakdir=/opt/dmdbms/data/backup/
# 设置连接信息
connect=$username/$password@$host:$port
# 设置备份文件名
backupfile=$dbname$Ymd'_backup.dmp'
# 设置日志文件名
logfile=$dbname$Ymd'_backup.log'
/opt/dmdbms/bin/dexp userid=$connect file=$backupfile log=$logfile directory=$bakdir owner=$dbname
7za a $bakdir$dbname$Ymd'_backup'.7z $bakdir$backupfile $bakdir$logfile
/opt/dmdbms/bin/disql $username/$password -E "INSERT INTO $dbname.PRD_DB_BACKUP (FILE_PATH, BACKUP_TIME, FILE_SIZE, DB_NAME, FILE_NAME, BACKUP_DESCRIBE) VALUES ('$bakdir', '$Ymd', '0', '$dbname', '$dbname$Ymd"_backup".7z', '自动备份')"
rm -rf $bakdir$backupfile $bakdir$logfile
echo 数据库备份到 $bakdir$dbname$Ymd'_backup'.7z
MySQL数据库
Windows
echo on
echo 开始备份数据库
setlocal
rem 获取小时
set h=%time:~0,2%
rem 获取时间
set Ymd=%date:~0,4%-%date:~5,2%-%date:~8,2%-%h: =0%-%time:~3,2%-%time:~6,2%
rem 设置IP地址
set host=192.168.1.211
rem 设置端口号
set port=3306
rem 设置账号
set username=root
rem 设置密码
set password=123456
rem 设置备份数据库
set dbname=abc
rem 设置备份路径
set bakdir=E:\MySQLdump
set backupfile=%bakdir%\%dbname%_backup_%Ymd%
rem 执行备份命令
mysqldump -h%host% -P%port% -u%username% -p%password% %dbname% > %backupfile%.sql
rem 压缩备份文件
bz c %backupfile%.7z %backupfile%.sql
rem 删除备份文件保留压缩后的文件
del /f %backupfile%.sql
rem 往备份表插入备份成功记录
rem mysql -h%host% -P%port% -u%username% -p%password% -D%dbname% -e "INSERT INTO `prd_db_backup` (`FILE_PATH`, `BACKUP_TIME`, `FILE_SIZE`, `DB_NAME`, `FILE_NAME`, `BACKUP_DESCRIBE`) VALUES ('%bakdir%', '%Ymd%', 0, '%dbname%', '%backupfile%.7z', '自动备份');"
endlocal
echo 数据库备份成功
exit
Linux
#!/bin/bash
#设置mysql备份目录
bakdir=/usr/yjh/
Ymd=`date +%Y-%m-%d-%H-%M-%S`
#数据库服务器,一般为localhost
host=localhost
port=3306
#用户名
username=root
#密码
password=123456
#要备份的数据库
dbname=abc
backupfile=$bakdir$dbname'_backup_'$Ymd
# mysqldump使用全路径,不然生成的备份文件为1kb,或者配置软连接,执行下面命令
# ln -s /usr/local/mysql/bin/mysql /usr/bin
# ln -s /usr/local/mysql/bin/mysqldump /usr/bin(你安装的MySQL路径根据实际情况填写)
mysqldump -h$host -u$username -p$password $dbname > $backupfile.sql
7za a $backupfile.7z $backupfile.sql
# mysql -h$host -P$port -u$username -p$password -D$dbname -e "INSERT INTO prd_db_backup (FILE_PATH, BACKUP_TIME, FILE_SIZE, DB_NAME, FILE_NAME, BACKUP_DESCRIBE) VALUES ('$bakdir', '$Ymd', 0, '$dbname', '$dbname"_backup_"$Ymd.7z', '自动备份');"
rm -rf $backupfile.sql
echo 备份完成,备份文件在$backupfile.7z
SQL server数据库
Windows
echo on
echo 开始备份数据库
setlocal
rem 设置IP地址
set host=127.0.0.1
rem 设置账号和密码
set username=sa
set password=123456
rem 设置备份路径
set bakdir=E:\BackupTest
rem 获取小时
set h=%time:~0,2%
rem 获取时间
set Ymd=%date:~0,4%-%date:~5,2%-%date:~8,2%-%h: =0%-%time:~3,2%-%time:~6,2%
rem 设置备份数据库
set dbname=abc
rem 备份前收缩数据库日志
sqlcmd -S %host% -U %username% -P %password% -i E:\mssqlbackup\ShrinkLog.sql
rem 执行备份命令
sqlcmd -S %host% -U %username% -P %password% -Q "BACKUP DATABASE [%dbname%] TO DISK = N'%bakdir%\%dbname%_backup_%Ymd%.bak' WITH NOFORMAT, NOINIT,COMPRESSION, NAME = N'%dbname%_backup_%Ymd%', SKIP, REWIND, NOUNLOAD, STATS = 10"
rem 压缩备份文件
bz c %bakdir%\%dbname%_backup_%Ymd%.7z %bakdir%\%dbname%_backup_%Ymd%.bak
rem 删除备份文件保留压缩后的文件
del /f %bakdir%\%dbname%_backup_%Ymd%.bak
rem 往备份表插入备份成功记录
rem sqlcmd -S . -E -Q "INSERT INTO [%dbname%].[dbo].[PRD_DB_BACKUP] ( [FILE_PATH], [BACKUP_TIME], [FILE_SIZE], [DB_NAME], [FILE_NAME], [BACKUP_DESCRIBE]) VALUES ( '%bakdir%', '%Ymd%', 0, '%dbname%', '%dbname%_backup_%Ymd%.7z', '自动备份');"
endlocal
echo 数据库备份成功
exit
Linux
#!/bin/bash
# 设置账号密码
username=sa
password=123456
# 设置备份数据库
dbname=abc
# 设置IP地址
host=127.0.0.1
# 设置时间
Ymd=`date +%Y%m%d%H%M%S`
# 设置备份路径
bakdir=/usr/yjh
# 备份前收缩数据库
sqlcmd -S $host -U $username -P $password -i /usr/yjh/ShrinkLog.sql
# 备份命令
sqlcmd -S $host -U $username -P $password -Q "BACKUP DATABASE [$dbname] TO DISK = N'$bakdir"/"$dbname"_backup_"$Ymd.bak' WITH NOFORMAT, NOINIT, NAME = N'$dbname"_backup_"$Ymd', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10"
7za a $bakdir'/'$dbname'_backup_'$Ymd.7z $bakdir'/'$dbname'_backup_'$Ymd.bak
# sqlcmd -S $host -U $username -P $password -Q "INSERT INTO [$dbname].[dbo].[PRD_DB_BACKUP] ( [FILE_PATH], [BACKUP_TIME], [FILE_SIZE], [DB_NAME], [FILE_NAME], [BACKUP_DESCRIBE]) VALUES ( '$bakdir', '$Ymd', 0, '$dbname', '$dbname"_backup_"$Ymd.7z', '自动备份');"
rm -rf $bakdir'/'$dbname'_backup_'$Ymd.bak
echo 备份完成,备份文件在$bakdir'/'$dbname'_backup_'$Ymd.7z
Oracle数据库
Windows
echo on
echo 开始备份数据库
setlocal
rem 获取小时
set h=%time:~0,2%
rem 获取时间
set Ymd=%date:~0,4%-%date:~5,2%-%date:~8,2%-%h: =0%-%time:~3,2%-%time:~6,2%
rem 设置备份路径
set bakdir=G:\OracleDB\Backup
rem 设置连接信息
set sid=192.168.1.211/abc
rem 设置账号
set username=system
rem 设置密码
set password=123456
rem 设置备份数据库
set dbname=abc
set connect=%username%/%password%@%sid%
set backupfile=%dbname%_backup_%Ymd%
exp %connect% file=%bakdir%\%backupfile%.dmp owner=%dbname%
bz c %bakdir%\%backupfile%.7z %bakdir%\%backupfile%.dmp
del /f %bakdir%\%backupfile%.dmp
rem sqlplus %connect% @E:\insertbackuprecord.sql %bakdir% %Ymd% %dbname% %backupfile%.7z 自动备份
endlocal
echo 数据库备份成功
exit
Linux
#!/bin/bash
# 设置数据库账号密码
username=system
password=oracle
# 设置备份数据
dbname=text
# 设置连接信息
sid=127.0.0.1/orcl
# 设置时间
Ymd=`date +%Y%m%d%H%M%S`
# 设置备份路径
backupdir=/data/oracle/backup/
connect=$username/$password@$sid
# 设置备份文件名
backupfile=$backupdir$dbname'_backup_'$Ymd
su - oracle -c "/data/oracle/product/11.2.0/db_1/bin/exp $connect file=$backupfile.dmp owner=$dbname"
su - oracle -c "7za a $backupfile.7z $backupfile.dmp"
# su - oracle -c "sqlplus $connect @/data/oracle/backup/insertbackuprecord.sql $bakdir $Ymd $dbname $dbname'_backup_'$Ymd.7z" 自动备份
su - oracle -c "rm -rf $backupfile.dmp"
echo 备份完成,备份文件在$backupfile.7z
浙公网安备 33010602011771号