一、编写sh脚本
常见备份命令介绍
我选用的是mysqldump命令,命令使用简介
[root@]> mysqldump -helpUsage: mysqldump [OPTIONS] database_name [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
1.登录选项:-u user:指定用户-h host:指定主机-p:表示要使用密码-E, --events: 备份事件调度器-R, --routines: 备份存储过程和存储函数
2.备份选项:--all-databases:备份所有数据库--databases db1 db2:备份指定的数据库--single-transaction:对事务引擎执行热备--flush-logs:更新二进制日志文件--master-data=21:每备份一个库就生成一个新的二进制文件(默认)2:只生成一个新的二进制文件--quick:在备份大表时指定该选项
备份脚本示例
#!/bin/bash
#NAME:数据库备份
#DATE:20240927
#USER:QC班长# 备份选项:
# --all-databases:备份所有数据库
# --databases db1 db2:备份指定的数据库
# --single-transaction:对事务引擎执行热备
# --flush-logs:更新二进制日志文件
# --master-data=2
# 1:每备份一个库就生成一个新的二进制文件(默认)
# 2:只生成一个新的二进制文件
# --quick:在备份大表时指定该选项echo "==========MySQL数据库开始备份==========="# MySQL数据库服务器地址
HOST="192.168.140.3"# MySQL用户名
USER="root"# MySQL密码
PASSWORD="QC20240927"# 备份目录路径
BACKUP_DIR="/mnt/sdc/data/backup/mysql_database"# 当前日期
DATE=$(date +%Y-%m-%d-%H-%M)# 备份文件名
BACKUP_FILE="$BACKUP_DIR/all_databases_$DATE.sql"#创建备份的路径
#如果备份的路径文件夹存在就使用,否则创建
[ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR" # 使用mysqldump命令备份所有数据库SQL文件并指定目录
mysqldump --all-databases --single-transaction -h$HOST -u$USER -p$PASSWORD > $BACKUP_FILE# 如果需要压缩备份文件,可以取消下面的注释
# gzip $BACKUP_FILE# 删除30天前的备份文件,取消注释以下行以启用
find $BACKUP_DIR -name "all_databases_*.sql*" -type f -mtime +30 -delete
[ $? -eq 0 ] && echo "-----------------数据备份成功 $DATE-----------------" || echo "-----------------数据备份失败-----------------"
二、赋予脚本执行权限
把编写好的脚本上传到服务器,目录自己定,修改成你的就行,然后赋予刻执行权限
chmod +x /mnt/sdc/shell/mysql_backup.sh
三、设置cron任务
修改系统自带的定时任务文件,编辑crontab文件来安排定时任务
#-e是执行创建定时任务命令
crontab -e
在打开的crontab文件中添加以下行来安排每天24点(即午夜)执行备份脚本:
0 0 * * * /mnt/sdc/shell/backup_database.sh
* * * * *
- - - - -
| | | | |
| | | | +----------星期中星期几 (0 - 6) (星期天 为0)
| | | +---------------月份 (1 - 12)
| | +--------------------一个月中的第几天 (1 - 31)
| +-------------------------小时 (0 - 23)
+------------------------------分钟 (0 - 59)
保存并关闭文件。
现在,cron
将每天在指定的时间自动执行备份脚本,所有MySQL数据库都会被备份到指定的目录。
注意:
- 确保MySQL服务器允许远程访问,如果脚本在远程服务器上运行。
- 如果备份文件很大,考虑使用
mysqldump
的--single-transaction
选项来备份InnoDB表,以获得一致的备份而不锁定表。 - 考虑使用
mysqldump
的--master-data
选项来记录二进制日志位置,这对于点时间恢复很有用。 - 定期检查备份文件的可恢复性,并确保有足够的磁盘空间来存储备份。
四、参考文献
MYSQL数据备份之mysqldump命令详解(附脚本定时备份)-CSDN博客
使用Shell脚本,实现备份MySQL数据库_sh mysql.sh-CSDN博客