创建脚本
vim dbName.sh
#!/bin/bash
#备份目录
BACKUP=/home/mysqlBackup/db_name
#获取当前时间
DATATIME=$(date +'%Y-%m-%d_%H%M%S')
#打印时间
echo $DATATIME
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#备份数据库名
DATABASE=db_name
#创建备份目录,如果不存在就创建
[ ! -d "${BACKUP}/${DATATIME}/${DATATIME}" ] && mkdir -p "${BACKUP}/${DATATIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATABASE.sql.gz
# 备份表结构
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -d -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATABASE.sql.gz
#将文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATABASE.tar.gz ${DATATIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATATIME}
#删除10天前的备份文件
find ${BACKUP} -atime +30 -name "+.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE} 成功~"
导出内容(表结构等)
内容 | 含义 |
---|
- - databases | 在备份的时候先是会创建表的,也就是说备份了整个db_name的 如果不加–databses的话,表明只是备份db_name中的数据表,而在还原的时候不会在创建db_name这个数据库,只是还原hellodb中的数据表而已 |
-q | 不缓冲查询,直接导出至标准输出 |
-d | 只导出表结构,不含数据 |
–add-locks | 导出过程中锁定表,完成后回解锁。-q:不缓冲查询,直接导出至标准输出 |
设置定时
1.用数值表示 时间信息
00 02 * * * 备份文件
2.利用特殊符号表示时间信息
* * * * * 备份文件
/分钟 /小时 /天 /月 /周
=========================================
PS:定时任务最短执行的周期为 每分钟
*/5 */ 6 */3 */1 */2
每隔5分钟 每隔6小时 每隔3日 每隔1月 每隔2周
=========================================
其它 写法:
01-05 02 * * * 每2日的01、02、03、04、05 执行一遍
指定不连续的时间范围:
00 14,20 * * * * 每天14点,20点执行一次