shell定时crontab备份数据库mysqldump

本文介绍了一种使用Shell脚本实现MySQL数据库定时备份的方法。通过定义备份路径、时间戳、数据库连接信息等,脚本能够自动执行数据库备份,并压缩归档。此外,还介绍了如何设置crontab定时任务,确保每天凌晨1点自动执行备份。

shell定时备份mysql数据库中mysqldump文件

在这里插入图片描述

#!/bin/bash
#完成定时备份,定义路径
BACKUP=/data/backup/db
#当前时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#调试时间
#echo "${DATETIME}"
echo "----------开始备份------------"
echo "----------备份的路径是 $BACKUP/$DATETIME.tar.gz"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=123456

#创建备份路径,如果路径存在就是有,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#准备备份
#备份数据库名称
DATABASE=mydemo
#执行备份指令,存放在临时目录$DATETIME文件夹中
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
cd $BACKUP
tar -zcvf  $DATETIME.tar.gz $DATETIME
#删除临时文件
rm -rf $DATETIME

#删除10天前备份的内容
fing $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "----------备份成功------------"

然后启动定时任务crontab -e

在这里插入图片描述
输入下面的语句,表示每天凌晨1点备份一次。
在这里插入图片描述
wq保存退出就ok了(就开始执行了)!

可以看到下面的任务已经开启了

[root@hadoop1 sbin]# crontab -l
0 1 * * * /usr/sbin/mysql_db_backup.sh

扩展内容:

crontab[选项]

-e	编辑

-l	查询

-r	删除当前用户的所有crontab任务

service crond restart 重启任务调度

如果只是简单的任务,可以不写脚本,直接在crontab中写入任务即可

crontab -e

输入如下:
*/1 * * * * ls -l /etc >> /tmp/to.txt

五个*号的意思如下:
几分,几点,几号,哪月,哪天

  • 5个占位符参数说明

    • 第一个* 一小时当中的第几分钟 0-59

    • 第二个* 一天中的第几小时 0-23

    • 第三个* 一月中的第几天 1-31

    • 第4个* 一年中的第几月 1-12

    • 第5个* 一周当中的星期几 0-7(0和7都代表星期日)

  • 特殊字符

    • *代表任何时间,比如一个*就代表一个小时中的每分钟都执行

    • , 代表不连续的时间,比如0 8,12,16 * * * *表示每天的8点0分,12点0分,16点0分都执行一次

    • - 代表连续的时间范围。比如0 5 * * 1-6代表周一到周六的凌晨5点0分执行一次

    • /n 代表每隔多久一次。比如*/10 * * * *命令,代表每隔10分钟执行一次命令

  • 任务调度案例

    • 每隔1分钟,就将日期信息,追加到/tmp/mydate中
      1. 编写/home/mytask1.sh
      
      date >> /tmp/mydate
      
      2. 给mytask1.sh一个可执行权限
      3. crontab -e
      4. */1 * * * * /home/mytask1.sh 
      
<think>嗯,用户让我介绍如何写一个定时备份数据库Shell脚本。首先,我需要确认用户对Shell脚本和定时任务的熟悉程度。可能用户是一位开发人员或者系统管理员,需要定期备份数据库,避免数据丢失。用户可能使用MySQL或者PostgreSQL这类常见数据库,但脚本需要有一定的通用性。 首先,我得考虑备份脚本的基本结构。通常需要设置数据库的连接信息,比如用户名、密码、主机和数据库名。不过直接写在脚本里可能不太安全,特别是密码,所以可能需要提醒用户注意权限设置,或者建议使用配置文件,并在脚本中引用。但为了简单起见,可能用户希望直接写在脚本里,但需要提示安全风险。 接下来是备份命令。对于MySQL,常用的工具是mysqldump,而PostgreSQL可能是pg_dump。不确定用户具体用哪个,所以可能需要分别说明,或者让脚本根据参数判断。不过用户可能只需要一种数据库备份,所以可能需要先明确。或者提供一个示例,假设是MySQL,因为更常见,然后提到如果是其他数据库可以调整命令。 然后要考虑备份文件的命名,通常包含日期时间,方便区分。比如使用date命令生成时间戳,格式可能是YYYYMMDD_HHMMSS,这样每次备份文件名唯一。 存储备份的目录需要存在,所以脚本中应该检查目录是否存在,不存在则创建。比如创建/backup/db目录,并赋予适当权限。 另外,保留备份的数量,避免磁盘被占满。可以设置保留最近N天的备份,比如30天。在脚本中添加删除旧备份的逻辑,使用find命令根据时间戳删除超过天数的文件。 最后是定时任务,使用crontab来定期执行脚本。需要告诉用户如何编辑crontab,添加每天执行的任务,比如凌晨2点运行。 可能还需要考虑日志记录,记录备份成功或失败的信息,方便排查问题。可以在脚本中添加日志输出,或者发送邮件通知管理员,但这可能增加复杂度,用户可能需要更简单的版本。 综合这些因素,我需要给出一个示例脚本,包含数据库连接、备份命令、文件名处理、旧备份清理,以及设置定时任务的步骤。同时提醒用户修改变量,注意密码安全,比如建议使用配置文件或环境变量,而不是明文写在脚本里。可能还需要考虑备份文件的压缩,比如用gzip减少空间占用。 另外,用户可能是在Linux环境下,所以需要确保脚本有执行权限,使用chmod +x。还要测试脚本是否实际运行成功,避免定时任务执行时因为路径等问题出错,可能需要使用绝对路径或者设置环境变量。 总结下来,步骤是:1. 编写备份脚本,处理数据库导出、命名、存储和清理;2. 设置脚本可执行权限;3. 配置cron定时任务。同时给出注意事项,如安全、路径、日志等。以下</think>是一个用于定时备份数据库Shell 脚本示例(以 MySQL 为例),同时包含自动清理旧备份定时任务配置说明: ```bash #!/bin/bash # 数据库配置(根据实际情况修改) DB_USER="your_username" DB_PASSWORD="your_password" DB_NAME="your_database" DB_HOST="localhost" # 备份配置 BACKUP_DIR="/path/to/backup/folder" # 备份存储目录 KEEP_DAYS=30 # 保留最近30天的备份 # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR # 生成备份文件名(含时间戳) BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$(date +%Y%m%d_%H%M%S).sql.gz" # 执行备份命令(MySQL示例) mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASSWORD $DB_NAME | gzip > $BACKUP_FILE # 检查备份是否成功 if [ $? -eq 0 ]; then echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份成功: $BACKUP_FILE" else echo "[$(date +'%Y-%m-%d %H:%M:%S')] 备份失败!" exit 1 fi # 清理旧备份(保留最近KEEP_DAYS天的) find $BACKUP_DIR -name "${DB_NAME}_backup_*.sql.gz" -type f -mtime +$KEEP_DAYS -delete ``` --- ### 配置定时任务(Crontab) 1. 保存脚本为 `db_backup.sh` 2. 赋予执行权限: ```bash chmod +x /path/to/db_backup.sh ``` 3. 编辑定时任务: ```bash crontab -e ``` 4. 添加以下内容(每天凌晨2点执行): ```bash 0 2 * * * /path/to/db_backup.sh >> /var/log/db_backup.log 2>&1 ``` --- ### 关键功能说明 1. **自动压缩**:使用 `gzip` 压缩备份文件节省空间 2. **时间戳命名**:避免文件名冲突,格式示例:`mydb_backup_20231001_023456.sql.gz` 3. **自动清理**:保留最近 N 天备份(通过 `find -mtime` 实现) 4. **日志记录**:输出执行结果到 `/var/log/db_backup.log` 5. **错误处理**:检查 `mysqldump` 执行状态,失败时退出 --- ### 注意事项 1. **安全建议**: - 将脚本放在安全目录,设置权限为 `700` - 建议使用 `mysql_config_editor` 或配置文件存储凭证(代替明文密码) 2. **测试验证**: - 首次执行后检查备份文件是否生成 - 检查日志文件是否正常记录 3. **扩展建议**: - 添加邮件通知功能(失败时提醒) - 对于大型数据库,可考虑使用 `mydumper` 替代 `mysqldump` - 重要数据建议异地备份 --- 其他数据库调整示例: - **PostgreSQL**: ```bash pg_dump -h $DB_HOST -U $DB_USER $DB_NAME | gzip > $BACKUP_FILE ``` - **MongoDB**: ```bash mongodump --host $DB_HOST --username $DB_USER --password $DB_PASSWORD --db $DB_NAME --gzip --archive=$BACKUP_FILE ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值