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

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

再次执行命令,备份成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值