> 数据库 > MySQL >

shell脚本备份mysql数据库实例精讲

写了个shell脚本,用于每天凌晨2点30分备份项目中的一个库。
1、先确定软件包和crond服务运行情况:
查看是否安装vixie-crom-4.1-44.EL4软件包
 

复制代码代码示例:
#rpm -qa |grep vixie-cron 
vixie-crom-4.1-44.EL4

查看crond服务的运行状态:
 

复制代码代码示例:
#service crond status 
crond (pid 3065) is running...

2、编写shell脚本:
 

复制代码代码示例:

#!/bin/sh    
USER="root" #DB用户名 
PASSWORD="pwd" #DB密码 
DATABASE="test"    #DB数据库名 
WEBMASTER=yangfei_luck@163.com    #错误发送邮箱 
BACKUP_DIR="/export/home/wwwroot/webapps/testScripting/Data_backup" #备份文件存放目录 
LOGFILE="/export/home/wwwroot/webapps/testScripting/Data_backup/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 --routines --hex-blob $DATABASE" #备份操作

#判断备份目录是否存在,如果不存在则创建一个 
if [ ! -d $BACKUP_DIR ] ; 
then 
mkdir -p "$BACKUP_DIR" 
fi

echo ----------------------------------------- >> $LOGFILE 
echo BACKUP DATE: `date +%Y-%m-%d-%H:%M:%S` >> $LOGFILE 
echo Backup Process    Begin >> $LOGFILE

#更换目录 
cd $BACKUP_DIR

#执行备份操作 
mysqldump $OPTIONS > $DUMPFILE

#判断备份是否成功 
if [[ $? == 0 ]]; then

#创建备份文件压缩包 
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1 
echo [$ARCHIVE] Backup Successful! >> $LOGFILE

#删除原备份文件,只留压缩包 
rm -f $DUMPFILE

#备份失败,发送错误消息到邮箱(需要mailutils或者类似终端下发送邮件工具的支持) 
else 
echo “Database Backup Fail!” >> $LOGFILE

#mail -s “Database:$DATABASE Daily Backup Fail” $WEBMASTER 
fi 
echo Backup Process    End >> $LOGFILE 
echo “Backup Process Done” 
echo ----------------------------------------- >> $LOGFILE
 

3、配置定时器:
crontab中每一行代表一个任务,格式如下:
minute    hour    day    month    dayofweek    command

一个备份MySQL数据库的简单Shell脚本

Shell脚本是写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行。(www.jbxue.com 脚本学堂)
也可以逐一敲入命令手动执行。如果要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反复运行这些命令了。

这里假定你已知道shell scripting、 mysqldump和crontab。
不明白的同学,看这里:

适用操作系统:任何Linux或UNIX。

主脚本(用于备份mysql数据库):

该Shell脚本可以自动备份数据库。只要复制粘贴本脚本到文本编辑器中,输入数据库用户名、密码以及数据库名即可。我备份数据库使用的是mysqlump 命令。后面会对每行脚本命令进行说明。

1. 分别建立目录“backup”和“oldbackup”
 

#mkdir /backup
#mkdir /oldbackup
 

2. 现在使用你喜欢的编辑软件创建并编辑“backup.sh”
这里我用的是 vi
# vi /backup/backup.sh
现在把以下几行命令输入到 backup.sh 文件中:
 

#!bin/bash
cd /backup
echo “You are In Backup Directory”
mv backup* /oldbackup
echo “Old Databases are Moved to oldbackup folder”
Now=$(date +”%d-%m-%Y--%H:%M:%S”)
File=backup-$Now.sql
mysqldump –u user-name  –p ‘password’ database-name > $File
echo “Your Database Backup Successfully Completed”
 

脚本说明:
在第8行命令中,在mysqldump命令后要输入自己的数据库用户名、密码及数据库名。

执行该脚本,首先会进入 /backup 目录,然后该脚本会把原有的旧数据库备份移动到 /oldbackup 文件夹中,接着根据系统的日期及时间生成一个文件名,在最后 mysqldump 命令会生成一个“.sql”格式的数据库备份文件。

3. 设置 backup.sh 脚本文件的可执行许可
 

# chmod +x /backup/backup.sh

4、执行脚本
#./backup.sh
脚本运行结束后会得到以下输入。
 

root@Server1:/download#./backup.sh
You areinDownload Directory
Old Backup DatabaseisMoved to oldbackup folder
database backup successful completed
root@Server1:/download#
 

注:首次执行该脚本会有一个“no such file”的提示信息,这是由于旧备份文件还不存在。只要再次执行该脚本就没有问题了,这个问题已经不存在了。

5、使用cron制订备份计划
使用Cron可以定时执行该脚本,备份会自动完成。使用 crontab 命令编辑cron 执行的计划任务。
#crontab –e
只要在编辑器上加入下面这一行代码保存即可。
0 13 * * * * /backup/backup.sh
本任务表示的是在每天下午1点钟把数据库备份到指定的文件夹。有关cron任务设置的详细内容可以查阅crontab手册。

 
(责任编辑:IT)