用shell定时备份数据库

本文介绍了一个简单的Shell脚本,用于自动备份MySQL数据库,并将备份文件名设置为包含日期和时间戳的形式。此外,还展示了如何通过Cron定时任务来定期执行此备份脚本。

备份数据库的shell脚本,以日期+时间的格式保存:

#!/bin/sh
file='officeks'`date  '+%y%m%d%H%M%S'`'.sql.gz'
/usr/local/webserver/mysql/bin/mysqldump -uofficeks -pkl45kj89ksd  officeks --skip-lock-tables | gzip > /data1/backup/mysite/$file

 

在crontab里加计划任务:

00 00 * * * /bin/bash /data1/backup/mysite/backdb.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、付费专栏及课程。

余额充值