1.数据库备份 ,支持多数据库,清理过期备份数据
执行以下脚本文件进行数据库备份,会当前目录下创建mysql文件夹进行备份操作
(PS:不要使用xftp等工具创建sh脚本,会有字符无法识别的异常,正确做法是使用vim命令创建sh脚本)
#!/bin/bash
#功能说明:本功能用于备份
#编写日期:2020/09/05PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbUser='root'#数据库密码
dbPasswd='password'#数据库IP
dbIp='192.168.0.1'#需要备份的数据库,多个数据库用空格分开
dbName='test1 test2'#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份到当前路径mysql文件夹下
logpath=$(pwd)/mysql/log
#数据备份到当前路径mysql文件夹下
datapath=$(pwd)/mysql/data
#自动创建目录if [ ! -d ${logpath} ];then
mkdir-pv ${logpath}
fi
#自动创建目录if [ ! -d ${datapath} ];then
mkdir-pv ${datapath}
fi
#日志记录头部
echo"备份时间为${backtime},备份数据库: ${dbName} 开始" >> ${logpath}/mysqllog.log
echo"备份时间为${backtime},备份数据库: ${dbName} 开始"#正式备份数据库for table in $dbName; doecho"备份时间为${backtime},备份数据库: ${table} 备份开始!!" >> ${logpath}/mysqllog.log
echo"备份时间为${backtime},备份数据库: ${table} 备份开始!!"source=`/usr/local/mysql/bin/mysqldump -u ${dbUser} -h ${dbIp} -p${dbPasswd} ${table} > ${datapath}/${backtime}-${table}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作if [ "$?" == 0];then
cd $datapath
#为节约硬盘空间,将数据库文件压缩,压缩需要时间,视sql文件大小决定,耐心等待即可
tar zcvf ${backtime}-${table}.tar.gz ${backtime}-${table}.sql > /dev/null#删除原始文件,只留压缩后文件
rm-f ${datapath}/${backtime}-${table}.sql
echo"备份时间为${backtime},备份数据库: ${table} 备份成功!!" >> ${logpath}/mysqllog.log
echo"备份时间为${backtime},备份数据库: ${table} 备份成功!!"
else#备份失败则进行以下操作
echo"备份时间为${backtime},备份数据库: ${table} 备份失败!!" >> ${logpath}/mysqllog.log
echo"备份时间为${backtime},备份数据库: ${table} 备份失败!!"fi
done
#删除30天前备份,也就是只保存30天内的备份
find $datapath-name "*.tar.gz" -type f -print -mtime +30 -exec rm -rf {} \; > /dev/null 2>&1
执行成功后在当前路径下/mysql/data即可查看到备份的数据库压缩文件
2.单数据库单表备份 ,支持多表备份,清理过期备份数据
#!/bin/bash
#功能说明:本功能用于备份
#编写日期:2020/09/05PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbUser='root'#数据库密码
dbPasswd='password'#数据库IP
dbIp='192.168.0.1'#需要备份的数据库
dbName='test1'#需要备份的数据库表,多个数据表用空格分开
dbTableName='table1 table2'#备份时间
DATA=`date +%Y-%m-%d`
backTime=`date +%Y%m%d%H%M%S`
#日志备份到当前路径mysql文件夹下
logpath=$(pwd)/mysql/log
#数据备份到当前路径mysql文件夹下
datapath=$(pwd)/mysql/data/${DATA}-${dbName}-backfils
#自动创建目录if [ ! -d ${logpath} ];then
mkdir-pv ${logpath}
fi
#自动创建目录if [ ! -d ${datapath} ];then
mkdir-pv ${datapath}
fi
#日志记录头部
echo"备份时间为${backTime},备份数据库表: ${dbName}->${dbTableName} 开始" >> ${logpath}/mysqllog.log
echo"备份时间为${backTime},备份数据库表: ${dbName}->${dbTableName} 开始"#正式备份数据库for table in $dbTableName; dosource=`/usr/local/mysql/bin/mysqldump -u ${dbUser} -h ${dbIp} -p${dbPasswd} ${dbName} ${table} > ${datapath}/${backTime}-${dbName}-${table}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作if [ "$?" == 0];then
cd $datapath
#为节约硬盘空间,将数据库文件压缩,压缩需要时间,视sql文件大小决定,耐心等待即可
tar zcvf ${backTime}-${table}.tar.gz ${backTime}-${dbName}-${table}.sql > /dev/null#删除原始文件,只留压缩后文件
rm-f ${datapath}/${backTime}-${dbName}-${table}.sql
echo"备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份成功!!" >> ${logpath}/mysqllog.log
echo"备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份成功!!"
else#备份失败则进行以下操作
echo"备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份失败!!" >> ${logpath}/mysqllog.log
echo"备份时间为${backTime},备份数据库表: ${dbName}->${table} 备份失败!!"fi
done
#删除30天前备份,也就是只保存30天内的备份
find $datapath-name "*backfils" -type d -print -mtime +30 -exec rm -rf {} \; > /dev/null 2>&1
执行成功后在当前路径下/mysql/data即可查看到备份的数据库压缩文件
3.定时运行备份
查看当前服务器的定时任务
crontab -e
添加定时任务执行脚本,每天0点运行一次,根据业务需要调整时间
0 0 0 1/1 * cd /home/mysqlback;./mysqlback.sh
测试运行一下定时任务命令,查看是否运行正常
cd /home/mysqlback;./mysqlback.sh
运行后出现以下异常
-bash: ./mysqlback.sh: Permission denied
执行权限分配命令
chmod u+x *.sh
再次执行命令,备份成功