由于公司数据安全考量需对相关数据进行备份。
机器配置:
Dell R410
CPU:1颗
内存:8G
磁盘:320G系统盘,2T 软raid数据盘,1TB备份盘
应用:SCM、CI、BUG
本文将参考其他网络文献,进行配置部署。没什么特别的,记录以备忘。
准备
- 建立根目录
mkdir /data_sync - 建立备份路径目录
cd data_sync
mkdir svn teamcity zentao
cd svn
mkdir bin logs conf data
cd mysql
mkdir bin logs conf data
cd postgresql
mkdir bin logs conf data
SVN备份
在bin路径下生成如下文件
vi backup.sh
#!/bin/bash
SRCPATH=/opt/svnroot/ #定义仓库路径
DISTBASE=/data_sync/svn
DISTPATH=$DISTBASE/data #定义存放路径;
LOGPATH=$DISTBASE/logs
CONFPATH=$DISTBASE/conf
BINPATH=$DISTBASE/bin
CURRENTDAY=`date +\%m%d`
BAKPATH=$DISTPATH/$CURRENTDAY
timecmd='date +%R:%S'
function backup() {
echo `$timecmd` backup start
if [ ! -d "$BAKPATH" ]; then
mkdir -p $BAKPATH
mkdir -p $BAKPATH/Repositories
chmod g+s $BAKPATH
fi
echo `$timecmd` backup path: $BAKPATH
for repo in $(<$CONFPATH/repos.txt);
do
echo `$timecmd` $repo
svnadmin hotcopy $SRCPATH/Repositories/$repo $BAKPATH/Repositories/$repo >$LOGPATH/cpreport-$CURRENTDAY.log 2>&1;
done
echo `$timecmd` copying security
cp -r $SRCPATH/security $BAKPATH #备份security文件
check_dir
echo `$timecmd` compress backup
tar zcf $BAKPATH.tar.gz $BAKPATH
echo `$timecmd` remove tempdir
rm -rf $BAKPATH
echo `$timecmd` 'backup finished'
}
function check_dir() {
if [ ! -d "$BAKPATH" ]; then
echo "Should backup first"
exit -1
fi
echo `$timecmd` check start: $BAKPATH
for repo in $(<$CONFPATH/repos.txt);
do
youngest=`svnlook youngest $BAKPATH/Repositories/$repo`;
echo `$timecmd` $repo "$youngest"
if [[ "svnlook" =~ "$youngest" ]]; then
echo $repo backup failed.
exit -2
fi
done
echo `$timecmd` 'check end'
}
function del_old_dir() {
echo `$timecmd` 'del old backup start'
find $DISTPATH -mtime +10 -type f -name "*.gz" -exec rm -rf {} \;
echo `$timecmd` 'del old backup finished'
}
del_old_dir;
backup;
check_dir;
在conf目录下生conf.txt,使用如下命令生成。 ls -l --time-style=full-iso /opt/svnroot/Repositories|cut -f 9 -d ' ' >conf.txt
postgresql备份
在bin路径下生成如下文件
vi backup.sh
#!/bin/bash
DISTBASE=/data_sync/postgre
DISTPATH=$DISTBASE/data #定义存放路径;
LOGPATH=$DISTBASE/logs
CONFPATH=$DISTBASE/conf
BINPATH=$DISTBASE/bin
CURRENTDAY=`date +\%m%d`
#BAKPATH=$DISTPATH/$CURRENTDAY
timecmd='date +%R:%S'
function backup() {
echo `$timecmd` backup start
if [ ! -d "$DISTPATH" ]; then
mkdir -p $DISTPATH
chmod g+s $DISTPATH
fi
echo `$timecmd` backup path: $DISTPATH
cd $DISTPATH
su - postgres -c pg_dumpall > $CURRENTDAY.dmp
tar zcf $CURRENTDAY.tar.gz $CURRENTDAY.dmp
rm -f $CURRENTDAY.dmp
echo `$timecmd` 'backup finished'
}
function del_old_dir() {
echo `$timecmd` 'del old backup start'
find $DISTPATH -mtime +10 -type f -name "*.gz" -exec rm -rf {} \;
echo `$timecmd` 'del old backup finished'
}
del_old_dir;
backup;
postgreql备份的是整个实例的数据,不区分数据库,比mysql省事。
mysql备份
vi backup.sh
#!/bin/bash
DISTBASE=/data_sync/mysql
DISTPATH=$DISTBASE/data #定义存放路径;
LOGPATH=$DISTBASE/logs
CONFPATH=$DISTBASE/conf
BINPATH=$DISTBASE/bin
CURRENTDAY=`date +\%m%d`
#BAKPATH=$DISTPATH/$CURRENTDAY
timecmd='date +%R:%S'
function backup() {
echo `$timecmd` backup start
if [ ! -d "$DISTPATH" ]; then
mkdir -p $DISTPATH
chmod g+s $DISTPATH
fi
echo `$timecmd` backup path: $DISTPATH
cd $DISTPATH
mysqldump -uroot -proot dbname > $CURRENTDAY.dmp
tar zcf $CURRENTDAY.tar.gz $CURRENTDAY.dmp
rm -f $CURRENTDAY.dmp
echo `$timecmd` 'backup finished'
}
function del_old_dir() {
echo `$timecmd` 'del old backup start'
find $DISTPATH -mtime +10 -type f -name "*.gz" -exec rm -rf {} \;
echo `$timecmd` 'del old backup finished'
}
del_old_dir;
backup;
有多个数据库者参考svn备份脚本,将数据名称放在文件中,循环备份即可。
定时自动备份
使用crontab进行,注意退出时要用vi的保存命令:w
crontab -e
00 21 * * * /data_sync/svn/bin/backup.sh
00 21 * * * /data_sync/teamcity/bin/backup.sh
00 21 * * * /data_sync/zentao/bin/backup.sh
以上内容直白,不解释。
参考文献
- [SCM]源码管理 - SVN的备份和还原