linux下实现mysql每日自动备份和自动删除备份文件(附Nginx日志切割)

Mysql每日自动备份

  1. 先查看一下磁盘空间使用情况,选一个剩余空间充足的磁盘 df -h
  2. 创建一个存放日志文件的文件夹 mkdir /home/backup/mysql
  3. 创建一个脚本文件 mysqlback.sh 放在 /home/backup 目录下,脚本文件内容如下:
#data/backup/mysql
#!/bin/bash
db_user="用户名"
db_password="密码"
db_name="数据库名称"
# date format for backup file (yyyyMMdd_hhmmss)
time="$(date +"%Y%m%d_%H%M%S")"
backup_dir="/home/backup/mysql"
#注意:mysqldump 要为绝对路径,例如 /root/mysql/bin/mysqldump
mysqldump -u$db_user -p$db_password $db_name > $backup_dir/$db_name_$time.sql
#!/bin/bash (对备份进行压缩)
mysqldump -u$db_user -p$db_password $db_name | gzip > $backup_dir/$db_name_$time.sql.gz
#下面两条指令根据需求添加即可
#删除七天之前的备份
find $backup_dir -name $db_name"*.sql.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
#删除一分钟之前的备份
find $backup_dir -name $db_name"*.sql.gz" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1

(有可能遇到的问题就是直接执行mysql_bak.sh时可以正常备份数据库,但是crontab定时执行生成的备份文件就为空了,原因就是可执行文件mysql_bak.sh中mysqldump的命令没有写绝对路径导致的,因为直接执行时是在mysql的bin目录下执行的,所以没有问题,但是crontab就不是在mysql的bin下了,所以找不到mysqldump的命令了。)

  1. 添加可执行权限:chmod u+x mysqlback.sh
    u 代表用户.
    g 代表用户组.
    o 代表其他.
    a 代表所有.
    chmod是权限管理命令change the permissions mode of a file的缩写
    chmod u+x file.sh 表示对当前目录下的file.sh文件的所有者增加可执行权限
    chmod +x 和 chmod a+x 一样,表示为所有用户增加可执行权限
  2. 添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用 ./mysqlback.sh
  3. 添加计划任务,检测或安装 crontab,执行 crontab 命令如果报 command not found,就表明没有安装。
    安装命令如下:
yum -y install vixie-cron
yum -y install crontabs
  1. 启动服务 : service crond start
    在CentOS系统中加入开机自动启动: chkconfig --level 345 crond on
    检测cron定时服务是否自启用: systemctl is-enabled crond.service
    enable表示已启用自启动
    disable标识未启用自启动
    如果未启用,则开启cron自启用: systemctl enable crond.service
    如果已经启用,想要cron关闭自启动:systemctl disable crond.service
  2. 添加计划任务(linux编辑器必知必会(:wq)
    crontab -e
    每天凌晨3点运行此文件,对数据库进行备份
    00 03 * * * /home/backup/mysqlback.sh
    前面是分钟后面是小时,控制台回显“crontab:installing new crontab” 表示添加调度任务成功。
    重启定时器
    service crond restart
  3. 查看crond状态是否开启 service crond status
    查看定时任务列表:crontab -l
    (可以设置一分钟执行一次,查看效果 */1 * * * * /home/backup/mysqlback.sh,用crontab -e 编辑的任务在crontab: installing new crontab后三分钟之内是不会执行的,所以你在测试的时候,至少时间后推三分钟!)

附:mysql导入sql文件指令:

mysql -hlocalhost -uroot -p123456;
use databasename;
#文件路径中的 \ 替换为 /
source ***.sql;

Nginx日志切割

(原文链接:https://blog.csdn.net/LittleLittleKnight/article/details/105359863)

#标名这个脚本是使用bin目录下bash去执行
    #!/bin/bash
    #安装目录下日志文件
    base_log_path='/xxx/xxxlogs/xxx.access.log'
    base_error_path='/xxx/xxxlogs/xxx.error.log'
    
    #需要保存的目录位置
    log_path='/xxx/xxxlogs/xxx/'
    
    #获取月份
    log_month=$(date -d yesterday +"%Y%m")
    
    #获取前一天日期 (第二天凌晨备份,即保存的日志就是当天时间的日志)
    log_day=$(date -d yesterday +"%d")

    #在指定位置创建文件夹
    mkdir -p $log_path/$log_month

    #将安装目录下的日志文件,移动到指定存储位置
    mv $base_log_path $log_path/$log_month/access_$log_day.log
    mv $base_error_path $log_path/$log_month/error_$log_day.log


    #再使用信号控制切割日志
    #USR1 表示nginx信号控制,切割日志 详见[nginx信号控制](https://blog.csdn.net/weixin_38111957/article/details/81023124)
    kill -USR1 `cat /www/server/nginx/logs/nginx.pid`

脚本放于Nginx原logs文件夹下并给脚本文件增加权限,后续定时任务等相关操作同上。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值