mysql 定时备份数据
标签(空格分隔): MySQL mysqldump
- 编写shell脚本
#!/bin/bash
# description: MySQL buckup shell script
USER="username" // 连接数据库的 用户名
PASSWORD="password" //连接数据库的 密码
DATABASE="your_database" //需要备份的数据库
#MAIL="your_email@qq.com"
BACKUP_DIR=/data/data_backup/database/ #备份文件存储路径
LOGFILE=/data/data_backup/database/backup.log #日志文件路径
current=`date +"%Y%m%d_%H%M"`
DUMPFILE=backup.$current.sql
ARCHIVE=backup.$current.sql.tar.gz
OPTIONS="-u$USER -p$PASSWORD $DATABASE"
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ]
then
mkdir -p "$BACKUP_DIR"
fi
#开始备份之前,将备份信息头写入日记文件
echo " ">> $LOGFILE
echo "--------------------" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%Y-%m-%d %H:%M:%S") >> $LOGFILE
echo "-------------------" >> $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 #删除原始备份文件,只需保留备份压缩包
# 把压缩包文件备份到其他机器上。
#scp -P 1110 $BACKUP_DIR$ARCHIVE ubuntu@*.*.*.*:/home/user/data_backup/ >> $LOGFILE 2>&1
#mail -s "database:$DATABASE Daily Backup Successful!" $MAIL
else
echo "Database Backup Fail!" >> $LOGFILE
#备份失败后向管理者发送邮件提醒
#mail -s "database:$DATABASE Daily Backup Fail!" $MAIL
fi
echo "Backup Process Done"
#删除3天以上的备份文件
#Cleaning
find $BACKUP_DIR -type f -mtime +2 -name "*.tar.gz" -exec rm -f {} \;
配置定时任务
2.1.进入 编辑定时任务的命令:crontab -e
2.2. 添加一个任务
0 3 * * * sh /data/data_backup/script/dump_timely.sh
2.3. 重启crond
service crond restart
其他
当数据存储目录不是MySQL的默认目录时,需要主要建立一个软连接。
比如在my.cnf中,数据目录长这样:datadir=/data/mysql_data/mysql socket=/data/mysql_data/mysql/mysql.sock
然后我们必须建立一个软连接
ln -s /data/mysql_data/mysql/mysql.sock /var/lib/mysql/mysql.sock
否则MySQLdump启动不了, 并报类似下面的错误:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
参考:
http://www.centoscn.com/CentOS/help/2013/0817/1348.html
http://www.ha97.com/910.html
http://blog.youkuaiyun.com/daniel_ustc/article/details/9395971