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