MySQL定时备份脚本

0
(0)

环境是linux的,使用的是mysqldump命令。

创建一个脚本dbbackup.sh然后内容如下:


#! /bin/bash
# 执行此文件将会备份数据库到/opt/backup/data目录中
cd /opt/backup/data

date=`date -I`;  #取出当前的日期
/opt/lampp/bin/mysqldump -u用户名 -p密码 数据库> 备份文件名前缀_$date.sql; #导出数据库为sql脚本
/bin/tar zcvhf 备份文件名前缀_$date.tar.gz 备份文件名前缀_$date.sql; #压缩sql脚本
rm 备份文件名前缀_$date.sql #删除sql文件

现在我们将这个脚本添加到定时任务中去,让每天都执行一次

使用crontab -l命令查看当前定时任务

使用crontab -e 命令编辑用户的定时任务,会使用vi编辑一个文本文件。文本文件的格式是这样的:

分钟 小时 天 月 天每星期 命令,例子:

58 23 * * * /home/yangyan/bin/dbbackup.sh

一行一个任务,保存后就可以了。

具体的cron可以查看这个blog说的比较清楚一些:

http://www.cnblogs.com/lhj588/archive/2012/02/20/2359172.html

如果是从docker中备份数据库出来可以:

–hex-blob 是确保一些blob的字段类型的内容正确无误的导出来。

docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  --hex-blob $DB | gzip > /root/data_backup/database_name_$DATE.sql.gz

下面是来自CSDN博客分享的脚本:

#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=root
# 密码
PASSWORD=123456
# 要备份的数据库
DB=favorites

# Docker容器ID
DOCKERID=********

#DB1=xxxx
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录。
DIR=/root/data_backup   
echo 'Get system date: ' $DATE

if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR

echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")

# 备份 docker 容器中的数据库
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称

# docker exec -it c7f1b671c57f mysqldump -u$USERNAME -p$PASSWORD $DB > /root/data_backup/database_name_$DATE.sql
# docker exec -it c7f1b671c57f mysqldump -uroot -proot favorites | gzip > /root/data_backup/database_name_2021_05_07.sql.gz

# 最关键的备份语句
docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  $DB | gzip > /root/data_backup/database_name_$DATE.sql.gz

# 备份 直接安装在 linux 系统中的数据库
# /usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB2 | gzip > xxx_$DATE.sql.gz
# just backup the latest 7 days

# find ${DIR} -name "database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

# find ${DIR} -name "database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1


#保留最近文件数5,删除其它多余的文件。
ReservedNum=5
date=$(date "+%Y%m%d-%H%M%S")

FileNum=$(ls -l $DIR|grep ^- |wc -l)

while(( $FileNum > $ReservedNum))
do
    OldFile=$(ls -rt $DIR| head -1)
    echo  $date "Delete File:"$OldFile
    rm -rf $DIR/$OldFile
    let "FileNum--"
done 

echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

这篇文章有用吗?

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据