您的位置:首页 > 数据库 > MySQL

MYSQL/POSTGRESQL/SVN备份设置

2016-01-27 17:24 573 查看

由于公司数据安全考量需对相关数据进行备份。
机器配置:
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的备份和还原
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: