linux下mysql数据库进行备份脚本

1.数据库备份 ,支持多数据库,清理过期备份数据

执行以下脚本文件进行数据库备份,会当前目录下创建mysql文件夹进行备份操作

(PS:不要使用xftp等工具创建sh脚本,会有字符无法识别的异常,正确做法是使用vim命令创建sh脚本)

#!/bin/bash
#功能说明:本功能用于备份
#编写日期:2020/09/05

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbUser='root'
#数据库密码
dbPasswd='password'
#数据库IP
dbIp='192.168.10.90'
#需要备份的数据库,多个数据库用空格分开
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; do
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/05

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbUser='root'
#数据库密码
dbPasswd='password'
#数据库IP
dbIp='192.168.10.90'
#需要备份的数据库
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; do
source=`/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

再次执行命令,备份成功

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章