linux下mysql定时全量备份

本文介绍了一个用于MySQL数据库定时备份的Shell脚本实现方案。该脚本通过crontab计划任务每天凌晨3点01分执行,实现对指定数据库(如demo1和demo2)的全量备份,并将备份文件压缩归档后保存到指定目录,同时执行旧备份的清理工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#!/bin/bash  
# fileName:mysqlFullBackup.sh  
# create: 2017/05/26  
# 每天的3点零1分执行该脚本(加 & 为后台执行)  
# crontab -e  
# 1 3 * * * /bin/bash /opt/mysql/mysqlFullBackup.sh &  
#mysql安装路径  
mysql_dir=/usr/local/mysql/bin  
#设置用户名和密码  
mysql_user=root  
mysql_passwd=XXX  
#备份路径  
backup_base_dir=/opt/software/mysqlbak/  
backup_dir=/opt/software/mysqlbak/$(date +%Y%m%d)  
#存放路径  
save_dir=/data/software/mysqlbak  
#备份数据库(多数据库,用逗号隔开,未采用这种)  
demo1_db=demo1  
demo2_db=demo2  
#备份文件夹  
current_day=$(date +%Y%m%d)  
#备份的时间  
current_time=$(date +%Y%m%d-%H:%M:%S)  
if [ ! -d "$backup_dir" ]; then    
    mkdir -p  "$backup_dir"  
fi  
$mysql_dir/mysqldump -u$mysql_user -p$mysql_passwd $demo1_db > $backup_dir/demo1_$current_time.sql  
$mysql_dir/mysqldump -u$mysql_user -p$mysql_passwd $demo2_db > $backup_dir/demo2_$current_time.sql  
cd $backup_base_dir  
if [ ! -d "$save_dir" ]; then    
    mkdir -p "$save_dir"  
fi  
tar -zcvf $current_day.tar.gz $current_day/  
#移动文件到nfs  也可采用scp,但是需要服务器互相信任    也可用lftp  
mv $current_day.tar.gz $save_dir  
rm -rf $backup_base_dir  
#删除10天前的备份  
find $save_dir -mtime +10 -name "*.*" -exec rm -rf {} \;  
bye  
EOF  

 

### MySQL 全量备份方法 MySQL全量备份是指将整个数据库或指定的数据库内容完整地备份一次,以便在数据丢失或损坏时可以恢复。常用的全量备份工具是 `mysqldump`,它支持导出数据库的结构和数据,并可配合压缩工具(如 `gzip`)进行压缩存储,节省磁盘空间。 全量备份的基本命令如下: ```bash mysqldump -u [username] -p[password] --databases [database_name] --triggers --routines --events --single-transaction --set-gtid-purged=OFF --default-character-set=utf8mb4 | gzip > /backup/mysql/[database_name]_$(date +%Y%m%d%H%M%S).sql.gz ``` 上述命令中包含多个关键参数,如 `--triggers` 用于备份触发器,`--routines` 用于备份存储过程和函数,`--events` 用于备份事件调度器,`--single-transaction` 确保备份期间数据库的一致性,`--set-gtid-purged=OFF` 表示不清理 GTID 信息,适用于非 GTID 环境[^3]。 ### 定时备份配置 为了实现自动化的定时备份,可以将备份命令封装到一个脚本中,并通过操作系统的定时任务机制(如 Linux 的 `cron` 或 Windows 的任务计划程序)定期执行该脚本。 在 Linux 环境中,可以创建一个备份脚本文件,例如 `/root/mysqlbackup.sh`,并设置可执行权限: ```bash #!/bin/bash # 设置环境变量 PATH=$PATH:/opt/mysql-8.0.32/bin backupPath=/backup/mysql time=$(date +%Y%m%d%H%M%S) user=root password=password123 db_name=dbname # 执行备份 mysqldump -h127.0.0.1 -u$user -p$password --databases $db_name --triggers --routines --events --single-transaction --set-gtid-purged=OFF --default-character-set=utf8mb4 | gzip > $backupPath/${db_name}_$time.sql.gz # 清理旧的备份文件(保留7天内的备份) find $backupPath -name "${db_name}_*.sql.gz" -type f -mtime +6 -exec rm -rf {} \; ``` 然后,编辑 `crontab` 文件以设置定时任务,例如每天凌晨 2 点执行备份: ```bash 0 2 * * * /root/mysqlbackup.sh ``` 在 Windows 环境中,可以使用 `.bat` 批处理脚本来实现增量备份,但全量备份通常涉及 `mysqldump` 命令的调用。以下是一个简单的 Windows 批处理脚本示例: ```bat @echo off set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%" mysqldump -u root -p mysql.com --all-databases --flush-logs --delete-master-logs --single-transaction > D:\backup\mysql\full_backup_%Ymd%.sql ``` 同样,可以通过任务计划程序设置定时执行该脚本。 ### 增量备份与日志管理 增量备份依赖于 MySQL 的二进制日志(Binary Log),它记录了所有对数据库的更改操作。启用二进制日志后,可以通过 `mysqlbinlog` 工具提取特定时间段内的日志文件,并将其保存为增量备份。 在 Linux 中,可以通过以下命令手动刷新日志并生成新的二进制日志文件: ```bash mysqladmin -u root -p flush-logs ``` 在 Windows 中,同样可以使用类似的命令: ```bat mysqladmin -u root -p mysql.com flush-logs ``` 增量备份通常作为全量备份的补充,用于在两次全量备份之间捕获数据的变化。恢复时,先恢复最近的全量备份,再依次应用增量备份(即二进制日志),以达到最新的数据状态。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值