每天定时本地备份mysql数据库,并且保存最新30天的备份内容。 本脚本采用全量逻辑备份,因此备份的数据,需要定期删除用于减少服务器空间占用
/root/mysql_bak/bin
/root/mysql_bak/mysql_full
/root/mysql_bak/log
mkdir -p /root/mysql_bak/bin
mkdir -p /root/mysql_bak/mysql_full
mkdir -p /root/mysql_bak/log
vim /root/mysql_bak/bin/mysql_bakcup.sh
#!/bin/bash
#环境变量防止脚本因为环境变量问题不执行
source /etc/profile
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#远程地址
dbhost='localhost'
#端口
dbport='3306'
#需要备份的数据库,多个数据库用空格分开
dbname='test'
#用户名
username='test'
#密码
password='test2021'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/root/mysql_bak/log'
#数据备份路径
datapath='/root/mysql_bak/mysql_full'
#日志记录头部
echo "[${backtime}]-[${dbhost}]-[${dbport}]-备份数据库表${dbname}开始" >> ${logpath}/mysqllog.log
#正式备份数据库
for table in $dbname; do
source=`/usr/bin/mysqldump --single-transaction -u${username} -p${password} -h${dbhost} -P${dbport} ${table}> ${datapath}/${dbname}_${backtime}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#删除30天前备份,也就是只保存30天内的备份
find $datapath -name "*.sql" -type f -mtime +30 -exec rm -rf {} \;
echo "[${backtime}]-[${dbhost}]-[${dbport}]-备份数据库表${dbname}成功" >> ${logpath}/mysql_bak_succ_log.log
else
#备份失败则进行以下操作
echo "[${backtime}]-[${dbhost}]-[${dbport}]-备份数据库表${dbname}失败" >> ${logpath}/mysql_bak_fail_log.log
fi
done
使用 :wq
保存脚本
使用 ./root/mysql_bak/bin/mysql_bakcup.sh
手动执行一次脚本 查看是否按照预期生成文件
添加脚本到定时任务crontab
执行 crontab -e
00 01 * * * bash /root/mysql_bak/bin/mysql_bakcup.sh
本文由 xingqi 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。
source=/usr/bin/mysqldump --single-transaction -u${username} -p${password} -h${dbhost} -P${dbport} ${table}> ${datapath}/${dbname}_${backtime}.sql
2>> ${logpath}/mysqllog.log;在多数据库备份时候有问题,需要修改成这样:source=/usr/bin/mysqldump --single-transaction -u${username} -p${password} -h${dbhost} -P${dbport} ${table}> ${datapath}/${table}_${backtime}.sql
2>> ${logpath}/mysqllog.log;