Mysql每日自动备份
- 先查看一下磁盘空间使用情况,选一个剩余空间充足的磁盘
df -h
- 创建一个存放日志文件的文件夹
mkdir /home/backup/mysql
- 创建一个脚本文件 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的命令了。)
- 添加可执行权限:
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 一样,表示为所有用户增加可执行权限 - 添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用
./mysqlback.sh
- 添加计划任务,检测或安装 crontab,执行
crontab
命令如果报 command not found,就表明没有安装。
安装命令如下:
yum -y install vixie-cron
yum -y install crontabs
- 启动服务 :
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
- 添加计划任务(linux编辑器必知必会(:wq))
crontab -e
每天凌晨3点运行此文件,对数据库进行备份
00 03 * * * /home/backup/mysqlback.sh
前面是分钟后面是小时,控制台回显“crontab:installing new crontab” 表示添加调度任务成功。
重启定时器
service crond restart
- 查看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文件夹下并给脚本文件增加权限,后续定时任务等相关操作同上。