mysql自动备份维护shell脚本 (copy)

#!/bin/bash
#Mysql 自动备份 压缩并上传到 指定ftp
#设想每天凌晨3点备份mysql
#编辑crontab配置文件
#00 03 * * * backupmysql.sh
#压缩并以“服务器名+时间 ”命名打包文件
#数据量小的情况下以mail的方式发送到指定邮箱(需要建立sendmail服务)
#数据量大的情况下以ftp的方式传送到指定的ftp服务器(远程ftp需开启)
#linzhanghui.blog.chinaunix.net
#程序部分以伪代码方式存在。
#

#1.设置mysql登陆参数
dbuser=root
dbpassword=123456
dbserver=localhost
dbname=cacti
dbopt=--opt
backupdir=/tmp/dbbackup/

#2.设置ftp具体参数
ftpserver=192.168.137.3
ftpuser=userlin
ftppassword=passwdlin

#3.设置文件备份文件名,备份文件保存天数
fileprefix=lzhserver
dumpfilename=$backupdir$fileprefix`date -d now +%Y%m%d`.sql
newfile=$fileprefix-`date -d now +%Y%m%d`.tar.gz
keepdays=7

#4.写入操作到日志文件(事先需建立)
logfile=/var/log/mysqlbackup.log
logtmp=/var/log/mybackup.tmp

#=====如果没有备份文件夹则建立之======
if [ ! -d "$backupdir" ];
then
echo "无此文件夹,建立中..."
mkdir -p $backupdir
fi
#=====事先删除7天之前的备份数据库文件=====
echo "开始执行备份...">>$logfile
echo "删除保留天数之前的备份文件...">>$logfile
find $backupdir -name $fileprefix* -mtime +$keepdays -fls $logtmp -exec rm {};
echo "删除的备份文件:">>$logfile
cat $logtmp >>$logfile
echo "删除旧备份文件成功!" >>$logfile
#=====备份+打包======
if [ -f $backupdir$newfile ]
then
echo "$newfile 备份文件存在, 备份结束 ...">>$logfile
else
if [ -z $dbpasswd ]
then
mysqldump -u$dbuser -h$dbserver $dbopt $dbname >$dumpfilename
else
mysqldump -u$dbuser -p$dbpasswd -h$dbserver $dbopt $dbname >$dumpfilename
fi
tar czvf $backupdir$newfile $dumpfilename
echo "$backupdir$newfile 备份成功!+“$压缩包容量”">>$logfile
fi
#======以ftp方式发送=====
ftp -i -n <<end_ftp
open $ftpserver
user $ftpuser $ftppassword
lcd $backupdir
hash
prompt 
put $newfile
close
bye
end_ftp

如果直接使用文件夹复制的方式备份mysql数据库
 
1、先查一下DATADIR
mysql> show variables like '%datadir%';
2、关闲数据库
# mysqladmin shutdown
3、复制数据库文件
cp -Rf  $datadir /xxx
$datadir:就是你的数据目录

另外测试过把.sql压缩成.sql.tar.gz
数据库文件可以少很多很多空间

原文地址:https://www.cnblogs.com/hebo/p/6000849.html