2024-01-04
数据库
crontab、mysql5.7
316

一、shell 脚本

1.创建脚本
vim /www/shell/mysql_dump.sh

#!/bin/sh

# mysql 用户名密码 不用设置端口
MYSQL_USER=root
MYSQL_PASS=xxx
BACKUP_DIR=/www/shell/backup
DATA_DIR=/www/shell/data

# 查询 mysql 中需要备份数据库名字
SQL_STRING="SELECT SCHEMA_NAME AS db FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema', 'performance_schema','sys');"
DBS=$(echo $SQL_STRING | mysql -u$MYSQL_USER -p$MYSQL_PASS -Bs)

# 当前日期
DATE=$(date -d '+0 days' +%Y%m%d%H%M)

# 打包名称
ZIP_NAME="mysql_"$DATE".tar.gz"

# 循环备份数据库
for DBNAME in $DBS
do
    if [ ! -d ${DATA_DIR} ]; then
        mkdir -p ${DATA_DIR}
    fi
    SQL_FILE=$DBNAME-$DATE".sql"
    /usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS $DBNAME > $DATA_DIR/$SQL_FILE
done

# 检测目录是否存在,如果不存在自动创建目录
if [ ! -x $BACKUP_DIR ];then
    cd "/www/shell"
    mkdir $BACKUP_DIR
    chmod 755 $BACKUP_DIR
fi

# tar 打包所有 sql 文件
tar -czvf $BACKUP_DIR/$ZIP_NAME $DATA_DIR

# 打包成功后删除 sql 文件
if [ $? = 0 ]; then
    rm -r $DATA_DIR
fi

# 删除30 天以前的数据库备份 -type f 选项来限制只删除文件(排除目录)
find $BACKUP_DIR -mtime +30 -name "mysql_*.tar.gz" -type f -print0 | xargs -0 rm -f;
2.解压文件
tar -xzvf mysql_202012041500.tar.gz

二、定时任务

1.开启 crontab
service crond start
service crond stop 
service crond restart
2.加入定时任务
crontab -l # 查看定时任务
crontab -e # 写入定时任务

# 每天凌晨 00:01 执行一次
1 0 * * * sh /www/shell/mysql_dump.sh