关于数据库备份二三事

198 阅读3分钟

关于数据库备份二三事

最近由于工作需求,需要做数据库的备份工作,其中包含mysql,mongodb;

一.首先先从mysql的定时备份说起:

1.mysql定时备份主要就是一个脚本文件编写,内容基本大同小异

这里说下我操作时遇到的坑,liunx脚本通常是.sh结尾的文件,脚本创建的时候一定要在liunx中创建!!!(由于习惯性问题,老是喜欢win创建文本文件,写完脚本,然后修改后缀,再上传到liunx服务器中,导致脚本执行各种报错,而且无法排查问题,具体原因是win默认文本编码和liunx编码不一致!!!)

2.mysql定时备份脚本内容大致如下:

#!/bin/sh(这一行加上,避免脚本不执行)
#mysql备份脚本
# 数据库信息参数
DB_USER="root"
DB_PASS="root"
DB_HOST="192.168.2.133"
# 数据库名称
DB_NAME="asoimonny"
# Mysql的bin目录
BIN_DIR="/usr/local/mysql/bin"  
#备份文件存放路径及系统当前时间
BCK_DIR="/data/bak/mysql-backups"
DATE=`date +%F`
# 创建文件
mkdir $BCK_DIR/$DATE
#DAYS=7代表删除7天前的备份,即只保留近7天的备份  
DAYS=7
#备份sql并压缩
$BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME | gzip > $BCK_DIR/$DATE/db_$DB_NAME.sql.gz
#删除7天前的备份文件  
find $BCK_DIR/ -mtime +$DAYS -exec rm -rf {} \;
exit 

3.关于定时任务,利用的是crond,在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件,内容如下:

[root@localhost ~]# vi /etc/crontab 

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

#每天23点30执行备份,mysqlbak.txt 脚本执行日志
30 23 * * * root /data/expect/mysqlbak.sh >> /data/expect/mysqlbak.txt
#每分钟执行一次
*/1 * * * *root /data/expect/mysqlbak.sh >> /data/expect/mysqlbak.txt

参数说明:30 23 * * * 表示每天23点30执行备份, 关于需要修改crontab的定时任务时间的,可以参考: www.cnblogs.com/Sungeek/p/9… root 表示执行用户(root超级管理员) /data/expect/mysqlbak.sh 脚本存放位置 /data/expect/mysqlbak.txt mysql备份脚本执行日志文件输出路径 mysqlbak.txt需要自行创建 *脚本赋权:一般都是chmod +x mysqlbak.sh

4.关于crontab服务启动,重启,停止,查看状态命令

[root@localhost ~]# service crond start [root@localhost ~]# service crond restart [root@localhost ~]# service crond stop [root@localhost ~]# service crond status

二,其次是mongodb的定时备份,其实和mysql基本一致,只是备份命令不一样而已

1.编写备份脚本文件,内容如下

#!/bin/bash  
#backup MongoDB    
#mongodump命令路径  
DUMP='/usr/local/mongodb/bin'
#临时备份目录  
OUT_DIR='/data/bak/now'
#备份存放路径  
TAR_DIR='/data/bak/list'
#获取当前系统时间
DATE=`date +%F`
#数据库账号  
DB_USER='root'
#数据库密码  
DB_PASS='root'
#DAYS=7代表删除7天前的备份,即只保留近15天的备份  
DAYS=7
#最终保存的数据库备份文件  
TAR_BAK="mongodb_bak_${DATE}.tar.gz"
mkdir -p ${OUT_DIR}
mkdir -p ${TAR_DIR}
cd ${OUT_DIR}
#rm -rf ${OUT_DIR}/*
mkdir -p $OUT_DIR/${DATE}
#备份全部数据库  
${DUMP}/mongodump -h 127.0.0.1:27017 -u${DB_USER} -p${DB_PASS} --authenticationDatabase "admin" -o ${OUT_DIR}/${DATE}
#压缩为.tar.gz格式  
tar -zcvPf ${TAR_DIR}/${TAR_BAK} ${OUT_DIR}/${DATE}
#删除7天前的备份文件  
find ${TAR_DIR}/ -mtime +$DAYS -name '*.gz' -exec rm -rf {} \;
exit 

2.脚本赋权

[root@localhost ~]# chmod +x /mongobak.sh

3.添加定时任务

[root@localhost ~]# vi /etc/crontab 添加执行计划

#表示每天2330执行备份,mongobak.txt 脚本执行日志
30 23 * * * root /data/expect/mongobak.sh >> /data/expect/mongobak.txt

4.定时任务服务重启

[root@localhost ~]# service crond restart