脚本:
#!/bin/bash
# mysql备份脚本
#备份目录
backup_dir='/data/backup/'
#备份库名列表,括号内多个数据库空格隔开
db_name_array="all"
#备份时间
current_time=$(date +%Y%m%d_%H%M%S)
#备份文件名(没用上)
filepath=$backup_dir$db_name'_'$current_time'.sql'
#备份多个数据库循环,利用管道命令连接gzip命令直接备份为gz压缩文件(这里是多个数据库循环备份)
for db_name in ${db_name_array[*]}
do
#备份核心语句(单个数据库备份,可以直接这一个语句)
mysqldump -u root -p yourpassword --all-databases | gzip > $backup_dir$db_name'_'$current_time'.sql.gz'
done
# 删除7天前备份的文件(防止数据多了太占内存)
#看其最后访问时间是否在7天以前(-atime +7)
find $backup_dir -name "*.sql.gz" -atime +7 -exec rm -rf {} \;
(补充:细说一下最后一行的-atime)
Linux里面文件状态的三个时间了,它们分别是 -atime, -ctime 和 -mtime
- 最近访问时间 access time (-atime)
它代表着最近一次访问文件的时间,显示一个文件的内容或者运行一个shell脚本会更新文件的atime。可用ls -lu命令查看。
- 最近更改时间 modify time (-mtime)
它代表着最近一次文件内容被修改的时间。可用ls -l 命令查看。
- 最近状态改动时间 change time(-ctime)
它代表着最近一次文件状态改变的时间 ,是status change time,是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。可用ls -lc 命令查看。
如需要定时备份可以使用crontab
参数
crontab [-u username] [-l|-e|-r]
-u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
-e: 编辑crontab 的工作内容;
-l: 查阅crontab的工作内容;
-r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。
安装crontab
1. 检测系统是否安装crond服务
service crond status
2. 安装
yum -y install vixie-cron yum -y install crontabs
vixie-cron 软件包是 cron 的主程序;
crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
3. 启动服务
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 service crond status //查看crontab服务状态
4. 设置开机自动启动
chkconfig --level 345 crond on
定时任务设置
1. 直接输入命令crontab -e 或者编辑文件/etc/crontab 就可以直接设置定时任务。
crontab -e 或者 vi /etc/crontab
1. 输入 crontab -e
2. 按下 a 键进入到编辑模式
3. 输入 0 */1 * * * /xxx/xxx/mysql_backup.sh
4. 同时按下 ctrl+c 退出编辑模式
5. 按下 shift+: 输入 wq 退出 crontab
vi编辑文件步骤一样
2. 定时任务格式如下:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。