在中小型企业中我们经常性的需要定时要备份我们的数据库文件和系统中的一些重要文件,保证在操作系统应硬盘等问题造成不可恢复性灾难时,系统能够尽量的还原用户数据。
在当今互联网环境中系统总是主主备份、主从备份等等方式保证系统的稳定性。在这里我们就说说最原始的数据备份方式吧!
通过linux的shell脚本我们生成数据库的备份文件,让后将备份文件通过SCP远程复制命令将本地备份文件复制到远程主机中,保证数据的异地备份。
在文件复制到远程主机时需要远程的登录用户名和密码,当然也可以通过设置两台主机之间的免密登录,这样最大的保证了系统密码的安全性,在这里我就直接使用密码明文的方式来实现备份功能。
大概思路为:
1、生成备份文件、删除历史文件
2、将备份文件复制到远程主机
3、删除远程主机历史文件
#!/bin/bash
########################################################
#备份保存路径
backup_dir=/root/mysqlbackup
#mysql用户名
username=root
#mysql密码
password=TankB214
#mysql将要备份的数据库
database_name=edoctor
########################################################
#保存备份个数,备份31天数据
number=31
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
mysqldump -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
#找出需要删除的备份
find $backup_dir -mtime +$number -type f -name "*.sql" |xargs rm -rf
sleep 5s
#############################################################
#远程服务器地址
rmtip=172.16.11.202
rmtport=22
rmtuser=root
rmtpwd=XXXXXXXXXXXX
rmtpath=/home/20181025/
#############################################################
#复制文件到远程服务器
/usr/bin/expect <<EOF
#设置超时时间
#默认是10秒,如果网络不好等可以设置为-1
set timeout 10
#复制文件
spawn scp -P $rmtport $backup_dir/$database_name-$dd.sql $rmtuser@$rmtip:$rmtpath
expect "*assword:"
send "$rmtpwd\r"
send "exit\r"
expect eof
EOF
if [ $? = 0 ]; then
echo "scp $backup_dir/$database_name-$dd.sql success" >> $backup_dir/log.txt
else
echo "scp $backup_dir/$database_name-$dd.sql failed" >> $backup_dir/log.txt
fi
#远程服务器保存的天数
baknum=10
/usr/bin/expect <<EOF
#默认是10秒,如果网络不好等可以设置为-1
set timeout 10
spawn ssh -p$rmtport $rmtuser@$rmtip
expect "*assword:"
send "$rmtpwd\r"
expect "Last login*"
send "find $rmtpath -mtime +$baknum -type f -name '*.sql' |xargs rm -rf \r"
expect "#"
send "exit\r"
expect eof
EOF