关于mysql:MySQL备份脚本应该这么写

1次阅读

共计 2569 个字符,预计需要花费 7 分钟才能阅读完成。

前言:

数据库备份的重要性显而易见,特地是在生产环境,任何数据的失落都可能产生重大的结果。所以,无论什么环境,咱们都应该有相应的备份策略来定时备份数据库。在 MySQL 中,比拟罕用的逻辑备份工具是 mysqldump,本篇文章将介绍 MySQL 定时备份的办法。

1. 制订适合的备份策略

对于不同的数据库环境,咱们应该思考不同的备份策略。制订备份策略时,应思考以下几点因素:

  • 物理备份还是逻辑备份 。这个能够由数据库大小决定,比如说小于 100G 用逻辑备份,大于 100G 用物理备份。
  • 备份文件保留工夫 。这个能够由磁盘大小决定,个别至多保留 7 天。
  • 备份执行工夫 。个别放在业务低峰期,比方凌晨执行备份操作。
  • 备份间隔时间 。个别举荐一天一备,如果零碎不太重要,备份距离也能够缩短。
  • 是否有从库 。有从库的话,举荐放在从库上备份,减小对主库的压力。

2.Linux 零碎备份脚本

Linux 零碎下,咱们能够利用 crontab 定时工作来执行备份脚本,如果你你对 crontab 还不理解,能够参考以下介绍疾速学习下。

crontab 是一个命令,常见于 Unix 和类 Unix 的操作系统之中,用于设置周期性被执行的指令。格局:*  *  *  *  * command
分 时 日 月 周  命令

第 1 列示意分钟 1~59 每分钟用 * 或者 */ 1 示意
第 2 列示意小时 1~23(0 示意 0 点)第 3 列示意日期 1~31
第 4 列示意月份 1~12
第 5 列标识号星期 0~6(0 示意星期天)第 6 列要运行的命令

crontab -e 编辑该用户下的定时工作设置
crontab -l 列出该用户下的所有定时工作 

上面咱们来正式书写备份脚本,废话不多说,先给出脚本模板:

#!/bin/bash
# -------------------------------------------------------------------------------
# FileName:    mysql_backup.sh 
# Describe:    Used for database backup
# Revision:    1.0
# Date:        2020/08/11
# Author:      wang

# 设置 mysql 的登录用户名和明码 (依据理论状况填写)
mysql_user = "root"
mysql_password = "yourpassword"
mysql_host = "localhost"
mysql_port = "3306"
backup_dir = /data/mysql_backup

dt=date +'%Y%m%d_%H%M'
echo "Backup Begin Date:" $(date +"%Y-%m-%d %H:%M:%S")

# 备份全副数据库
mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -R -E --all-databases --single-transaction > $backup_dir/mysql_backup_$dt.sql

find $backup_dir -mtime +7 -type f -name '*.sql' -exec rm -rf {} \;
echo "Backup Succeed Date:" $(date +"%Y-%m-%d %H:%M:%S")

以上脚本可依据理论状况批改,比方备份某一个库、保留工夫变更等等。脚本写完后要留神调试,调试实现后就能够部署了,比方咱们打算每天凌晨 2 点进行备份,则能够这样设置定时工作。

# 留神脚本执行权限及批改脚本门路
00 02 * * * sh /root/scripts/mysql_backup.sh > /root/scripts/mysql_backup.log 2>&1

3.Windows 零碎备份脚本

Windows 零碎备份脚本也是相似的,只不过变成了 bat 脚本,须要设置打算工作来定时执行。比方咱们能够在 E 盘下创立一个 MySQLdata_Bak 目录,此目录下创立 mysql_backup 目录寄存备份文件,mysql_bak.bat 是备份脚本,脚本内容如下(主动删除 7 天前的备份文件):

rem auther:wang
rem date:20200811
rem ******MySQL backup start********
@echo off
forfiles /p "E:\MySQLdata_Bak\mysql_backup" /m backup_*.sql -d -7 /c "cmd /c del /f @path"
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
"E:\mysql5.7.23\bin\mysqldump" -uroot -p123456 -P3306 --default-character-set=utf8 -R -E --single-transaction  --all-databases > "E:\MySQLdata_Bak\mysql_backup\backup_%Ymd%.sql"
@echo on
rem ******MySQL backup end********

以上脚本仅供参考,能够依据本人的环境稍加改变。同样的,脚本调试实现后就能够退出打算工作了,如果你对 Windows 打算工作还不理解,能够百度下,也是比拟不便简略的。

4. 备份可用性校验

除了备份,十分重要的一件事件就是验证备份数据的可用性。设想一下,当你须要进行数据恢复的时候,突然发现过来的备份数据都是有效的,那得有多好受。很多敌人在写好备份脚本加到定时工作后,只是查看下定时工作有执行,备份目录有文件就不再关注了,往往到了须要应用备份文件的时候才发现备份数据有问题。

目前对于备份文件的数据校验没有十分不便的方法,用的比拟多的还是定时把备份文件拉进去做备份复原演练,例如一个月做一次备份复原演练就能够无效进步备份文件可用性,心里也虚浮。

所以,千万不要认为有了备份就十拿九稳了,平时也要多查看备份脚本执行是否正确,生产的备份脚本内容是否可用,最好能够定期做复原演练。

总结:

本篇文章次要分享了 Linux 零碎及 Windows 零碎下的 MySQL 定时备份脚本,脚本内容比拟简单明了,性能并不简单,如果你有其余备份需要,能够在此基础上批改欠缺。如果这篇文章对你有所帮忙的话,请多多分享转发。

正文完
 0