Linux 定时备份数据库并删除 N 天以前的数据

1、新建文件 auto_bak_data.sh 并赋予执行权限

# 创建文件
touch auto_bak_data.sh

# 给文件执行权限
chmod +x auto_bak_data.sh

2、添加备份命令

vi auto_bak_data.sh

#!/bin/sh
#注意 变量 变量值 不能与=之前有空格

rq=`date +%Y%m%d`

mysqldump -uuser_ofo -proot --single-transaction ofo>/tmp/mysql_data_backup/ofo_$rq.sql;

find /tmp/mysql_data_backup/ -mtime +7 -name "*.sql" -exec rm -rf {
    
    } \;

使用 --single-transaction 可以保证在备份过程中,整个备份集的数据一致性。

MySQL 常用备份命令

1、备份db1数据库中所有表(包括表结构和数据,不包括创建db1数据库的语句)
mysqldump -h192.168.1.10 -uroot -p db1 > xxx.sql


2、备份db1数据库中所有表(包括表结构和数据,包括创建db1数据库的语句)
mysqldump -h192.168.1.10 -uroot -p --databases db1 > xxx.sql


3、备份db1数据库中t1、t2、t3表(包括表结构和数据,不包括创建db1数据库的语句)
mysqldump -h192.168.1.10 -uroot -p db1 t1 t2 t3 > xxx.sql


4、备份多个(db1、db2)数据库(包括建库语句和所有表的结构和数据)
mysqldump -h192.168.1.10 -uroot -p --databases db1 db2 > xxx.sql


5、备份所有数据库(包括建库语句和所有表的结构和数据)
mysqldump -h192.168.1.10 -uroot -p --all-databases > xxx.sql


6、备份db1数据库中所有表结构(只包括表结构,加-d参数)
mysqldump -h192.168.1.10 -uroot -p -d db1 > xxx.sql


7、备份db1数据库中t1、t2、t3表结构(只包括表结构,加-d参数)
mysqldump -h192.168.1.10 -uroot -p -d db1 t1 t2 t3 > xxx.sql


8、备份db1数据库中所有表数据(只包括表数据,加-t参数)
mysqldump -h192.168.1.10 -uroot -p -t db1 > xxx.sql


9、备份db1数据库中t1、t2、t3表数据(只包括表数据,加-t参数)
mysqldump -h192.168.1.10 -uroot -p -t db1 t1 t2 t3 > xxx.sql

 
10、恢复命令
mysql -uroot -proot ysknowage < yskowage20190306.sql

3、添加定时任务

1、实例命令

# find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
find /data/tomcat/logs/ -mtime +30 -name "*.log" -exec rm -rf {
    
    } \;

说明:

/data/tomcat/logs/ 目录下所有 30 天前带 ”.log ”的文件删除。
如果去掉 -name "*.log" 此参数 表示将目录下所有文件都删除。

2、计划任务(升级)

若嫌每次手动执行语句太麻烦,可以将这小语句写到一个可执行 shell 脚本文件中,再设置cron 调度执行,那就可以让系统自动去清理相关文件。

2.1 创建 shell

新建一个可执行文件 auto-del-30-days-ago-log.sh 并分配可运行权限。

touch /opt/auto-del-30-days-ago-log.sh
chmod +x auto-del-30-days-ago-log.sh

2.2 编辑 shell 脚本(auto-del-30-days-ago-log.sh)

1、打开编辑器

vi auto-del-30-days-ago-log.sh

2、输入以下内容 -mtime 表示天 -mmin 表示分钟

#!/bin/sh
find /data/tomcat/logs/ -mtime +30 -name "*.log" -exec rm -rf {
    
    } \;

3、保存退出 (:wq!)

2.3 计划任务

1、将 auto-del-30-days-ago-log.sh 执行脚本加入到系统计划任务

# crontab -e

2、设置是每天凌晨 0 点 10 分执行 auto-del-30-days-ago-log.sh 文件进行数据清理:

10 0 * * * /bin/bash /opt/auto-del-30-days-ago-log.sh >/dev/null 2>&1

2.4 启动任务:重启 crond

service crond restart 
#centos7 请执行 systemctl restart crond

2.5 瞄一眼是否已经开始任务

crontab -l

PS: 如果需要查看定时任务执行日志:

cat /var/log/cron

完成以上三步,妈妈再也不用担心我的硬盘空间满了,不用手动清理日志文件了。

猜你喜欢

转载自blog.csdn.net/weiguang102/article/details/126000543