linux下shell脚本定时备份mysql数据库

发布时间:2020-06-21编辑:脚本学堂
分享一例定时备份mysql数据库的shell脚本,在linux系统中用好shell脚本,可以完成一些自动化工作,比如mysql数据库定时备份,需要的朋友参考下。

linux系统中,维护mysql/ target=_blank class=infotextkey>mysql数据库,尤其是mysql的日常备份,纯手工的备份是不可取的,费时费力,因此需要采用一种非人工的定时备份机制。
在linux下,shell/ target=_blank class=infotextkey>shell脚本可用来完成mysql数据库的定时备份,如何实现这一功能呢?

本节脚本学堂 小编为大家分享一例mysql自动备份的shell脚本,抛砖引玉,有此需求的朋友,一起来看看吧。

完整代码:
 

复制代码 代码示例:

#!/bin/bash
#shell command for backup mysql database everyday automatically by crontab
#Author : Carlos Wong www.jb200.com
#Date : 2010-08-24
#配置参数
USER=root #数据库用户名
PASSWORD=××××× #数据库用户密码
DATABASE=TIENIUZAI #数据库名称
WEBMASTER=tieniuzai@qq.com #管理员邮箱地址,用以发送备份失败消息提醒
BACKUP_DIR=/var/www/Data_Backup/topons/ #备份文件存储路径
LOGFILE=/var/www/Data_Backup/topons/data_backup.log #日记文件路径
DATE=`date ‘+%Y%m%d-%H%M’` #日期格式(作为文件名)
DUMPFILE=$DATE.sql #备份文件名
ARCHIVE=$DATE.sql.tgz #压缩文件名
OPTIONS=”-u$USER -p$PASSWORD –opt –extended-insert=false –triggers=false -R –hex-blob –flush-logs –delete-master-logs -B $DATABASE” #mysqldump 参数 详情见帮助 mysqldump -help

#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
mkdir -p “$BACKUP_DIR”
fi

#开始备份之前,将备份信息头写入日记文件
echo ” ” >> $LOGFILE
echo ” ” >> $LOGFILE
echo “———————————————–” >> $LOGFILE
echo “BACKUP DATE:” $(date +”%y-%m-%d %H:%M:%S”) >> $LOGFILE
echo “———————————————– ” >> $LOGFILE

#切换至备份目录
cd $BACKUP_DIR
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件
mysqldump $OPTIONS > $DUMPFILE
#判断数据库备份是否成功
if [[ $? == 0 ]]; then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo “[$ARCHIVE] Backup Successful!” >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo “Database Backup Fail!” >> $LOGFILE

#备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持
#mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER
fi
#输出备份过程结束的提醒消息
echo “Backup Process Done”

使用方法:
将以上代码保存到: /usr/sbin/DataBackup (文件名随意,只要不跟系统原有的命令同名即可;代码可以放到任何地方,放在sbin目录下只是为了方便执行,sbin目录下的文件/目录可在终端直接调用,类似于windows下PATH变量指定的目录)

为脚本添加可执行权限:
sudo chmod +x /usr/sbin/DataBackup

执行脚本:
sudo DataBackup
如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件(sudo vim /etc/crontab)中去就可以了:
01 3 * * * root /usr/sbin/DataBackup #它代表着将于每天3点执行DataBackup脚本

有关crontab命令的用法,请参考文章:

注意:
linux 下的shell脚本定义变量的格式为: key=value ,注意他们两者之间的” = “前后不能出现空格,否则系统无法确认该变量。
用红色标注的那行,第一个类似单引号的字符”`”其实不是单引号,它的输入键在键盘ESC键下方。(www.jb200.com 脚本学堂)
这个脚本只适合用于一些小站点的备份,因为它是对数据库进行全部备份而不是增量备份,不适合大容量的数据库备份。
Update:
2010-08-24 :由于服务器上的MySQL配置文件里 的socket项值为 “/tmp/mysql.sock”, 而mysqldump在链接mysql server的时候会去查找位于/var/lib/mysql/目录下的mysql.sock文件。如果没有则会报错:
mysqldump: Got error: 2002: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
解决方法:
一是,修改mysql配置文件里的socket项的值为 ’/var/lib/mysql/mysql.sock’,不过这种方法需要重启mysql服务,很不厚道。
二是,为/tmp/mysql.sock创建一个软链接到/var/lib/mysql/mysql.sock:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

下面再为大家分享一例centos中mysql备份数据库的shell脚本,一起来学习下。

centos中mysql备份数据库脚本,可以做成mysql自动备份工具,用于mysql数据库的定时备份。
完事代码:
 

复制代码 代码示例:

#!/bin/bash
#backup mysql data
#备份mysql数据库
# www.jb200.com

DBDIR=/data/mysql
BACKDIR=/data/bak/mysql
TIME=`date -d "today" +%F`
DB=$(ls -p $DBDIR | grep / |tr -d / | grep -Ev 'information_schema|performance_schema|mysql|test')
/etc/init.d/mysqld stop
if [ -d $BACKDIR ]
then
  echo "OK!"
else
  mkdir -p $BACKDIR
fi
cd $DBDIR
for i in $DB
do
tar czf $BACKDIR/$i_db_$TIME.tar.gz $i
done
/etc/init.d/mysqld start
find $BACKDIR -name "*.tar.gz" -type f -mtime +15 -exec rm {} ;  >/dev/null 2>&1