当前位置: 首页 > news >正文

MySQL命令--备份和恢复数据库的Shell脚本

原文网址:MySQL命令--备份和恢复数据库的Shell脚本_IT利刃出鞘的博客-CSDN博客

简介

备份mysql数据库是很必要的,这里写一个可以备份数据库的shell脚本,可以将数据库进行备份,并自动添加日期。

Shell脚本

下边的文件我放到mysql docker容器的/bak/文件夹下。

备份

新建一个backup_db.sh,内容如下:

#/bin/bash​# 用法1:用默认的备份路径
# ./backup_db.sh dbName
# 
# 用法2:用指定的备份路径
# ./backup_db.sh dbName /bak/perm/dbName=$1
dateStr=`date +%Y%m%d_%H%M%S`backupPath=/bak/
if [ $# -eq 2 ]
thenbackupPath=$2
fiif [ ! -e ${backupPath} ]
thenmkdir -p ${backupPath}
fifileName=${backupPath}${dbName}'_'${dateStr}'.sql'mysqldump -uadmin -pcode9510. ${dbName} > ${fileName}
echo ${dbName}'已备份到'${fileName}

用法1:用默认的备份路径

./backup_db.sh dbName

用法2:用指定的备份路径

./backup_db.sh dbName /bak/perm/

恢复

新建一个recover_db.sh,内容如下:

#/bin/bash# ​用法:./recover_db.sh dbName dbName_xxx.sqldbName=$1
dbBackupFileName=$2
dateStr=`date +%Y%m%d_%H%M%S`
fileName='/bak/'${dbBackupFileName}
mysql -uadmin -pxxx ${dbName} < ${fileName}
echo ${dbName}'已从此文件恢复:'${fileName}

 用法

./recover_db.sh dbName dbName_xxx.sql

快捷调用

上边的脚本是直接执行的mysql命令,如果它在docker,不好执行,再写一个脚本去调用它。

下边的文件我放在:/work/quick/文件夹。

备份

db_backup.sh

#/bin/bash# 没有参数,或者参数为 --help 或 -h
if [[ $# -lt 1 || $1 == "--help" || $1 == "-h" ]]; then# 如果是,则打印用法echo "Usage: db_backup.sh [dbName] <containerInnerPath>"echo "  eg1: ./db_backup.sh dbName"echo "  eg2: ./db_backup.sh dbName /bak/perm/"exit 0
fidbName=$1backupPath=/bak/
if [ $# -eq 2 ]
thenbackupPath=$2
fidocker exec mysql8 bash -c '/bak/backup_db.sh '${dbName}' '${backupPath}

用法1:使用默认路径

./db_backup.sh dbName

用法2:指定路径

./db_backup.sh dbName /bak/perm/

恢复

db_recover.sh

#!/bin/bash# 没有参数,或者参数为 --help 或 -h
if [[ $# -lt 1 || $1 == "--help" || $1 == "-h" ]]; then# 如果是,则打印用法echo "Usage: db_recover.sh [dbName] [dbFileName]"echo "  eg: ./db_recover.sh dbName dbFile1.sql"exit 0
fidbName=$1
dbBackupFileName=$2
docker exec mysql8 bash -c "/bak/recover_db.sh ${dbName} ${dbBackupFileName}"

用法

./db_recover.sh dbName dbFile1.sql

删除

db_delete_backup.sh

#!/bin/bash# 没有参数,或者参数为 --help 或 -h
if [[ $# -lt 1 || $1 == "--help" || $1 == "-h" ]]; then# 如果是,则打印用法echo "Usage: db_delete_backup.sh [dbFileName]"echo "  eg:./db_delete_backup.sh dbFile1.sql"exit 0
fidbBackupFileName=$1
dbBackupFolder='/work/db/mysql/bak/'
dbBackupFileFullName=${dbBackupFolder}${dbBackupFileName}
sudo rm ${dbBackupFileFullName}
echo ${dbBackupFileFullName}'已删除'
ls ${dbBackupFolder}

用法

./db_delete_backup.sh dbFile1.sql

定时备份数据库

可以将上边的内容写到一个脚本中,然后定时地去备份数据库。

每小时备份一次

本处我的脚本是backup-mysql_sh,内容如下:

#!/bin/bash# 备份对应的宿主机的位置
backupPathOfHost=/work/db/mysql/bak/
# 文件存活分钟数(这些分钟之前的文件会被删掉)
oldFileTtl=300# 如果最近latestBackupTime分钟内,文件数量少于minBackupCount,则不要删除)
# 最近的备份时间
latestBackupTime=500
# 最少的备份个数
minBackupCount=5# 需要备份的数据库名字
dbNameArray=(learn monitor)
# 当前时间
nowTime=$(date +"%Y%m%d %H")
# 备份的脚本
backupShell=/work/quick/db_backup.shif [ ! -d "$backupPathOfHost" ];
thenmkdir -p "$backupPathOfHost"
ficd $backupPathOfHostfor dbName in ${dbNameArray[@]}
do${backupShell} ${dbName}# 统计以数据库名开头的文件数量count=$(find ${backupPathOfHost} -maxdepth 1 -name ${dbName}'*' -mmin -$latestBackupTime | wc -l)if [ ${count} -gt ${minBackupCount} ]; then# 删除指定时间之前的日志find ${backupPathOfHost} -maxdepth 1 -name ${dbName}'*' -mmin +$oldFileTtl | xargs rm -rffi
done

然后结合Linux自带的定时任务即可:Linux命令--crontab定时任务的用法_IT利刃出鞘的博客-CSDN博客

每天备份一次

有上边的可能还不够,比如,我想备份时间长一些,几天之前的数据我也想备份。

可以再新建一个每天执行一次的任务,备份到另一个路径下边,比如:/bak/perm/。

本处我的脚本是backup-mysql_sh,内容如下:

#!/bin/bash# 备份对应的宿主机的位置
backupPathOfHost=/work/db/mysql/bak/perm/
# 备份对应的容器的位置
backupPathOfContainer=/bak/perm/
# 文件存活天数(这些天之前的文件会被删掉)
oldFileTtl=10# 如果最近latestBackupTime天内,文件数量少于minBackupCount,则不要删除)
# 最近的备份时间
latestBackupTime=15
# 最少的备份个数
minBackupCount=10# 需要备份的数据库名字
dbNameArray=(learn monitor)
# 当前时间
nowTime=$(date +"%Y%m%d %H")
# 备份的脚本
backupShell=/work/quick/db_backup.shif [ ! -d "$backupPathOfHost" ];
thenmkdir -p "$backupPathOfHost"
fifor dbName in ${dbNameArray[@]}
do${backupShell} ${dbName} ${backupPathOfContainer}# 统计以数据库名开头的文件数量count=$(find ${backupPathOfHost} -maxdepth 1 -name ${dbName}'*' -mtime -$latestBackupTime | wc -l)if [ ${count} -gt ${minBackupCount} ]; then# 删除指定时间之前的日志find ${backupPathOfHost} -maxdepth 1 -name ${dbName}'*' -mtime +$oldFileTtl | xargs rm -rffi
done

然后结合Linux自带的定时任务即可:Linux命令--crontab定时任务的用法_IT利刃出鞘的博客-CSDN博客

-----------------------------------------------------------------------------------------------------------------

分享Java真实高频面试题,吊打面试官: Java后端真实面试题大全 - 自学精灵

分享靠谱的Java高级开发实战,包含:高并发、架构、全局处理、链路追踪等:JavaWeb高级实战 - 自学精灵


文章转载自:

http://4xsETD49.rbgqn.cn
http://0UAENtyi.rbgqn.cn
http://nBHNY39q.rbgqn.cn
http://INQImpfL.rbgqn.cn
http://TQK1tPV7.rbgqn.cn
http://CvlZpU17.rbgqn.cn
http://2BweOHA2.rbgqn.cn
http://W1Pvj839.rbgqn.cn
http://KdEI5SK4.rbgqn.cn
http://471wbXn4.rbgqn.cn
http://9KIfd3UE.rbgqn.cn
http://OW1DPgMx.rbgqn.cn
http://0xWWadeB.rbgqn.cn
http://UPwZWyec.rbgqn.cn
http://OeAnLGZu.rbgqn.cn
http://pax7WrKB.rbgqn.cn
http://6j11v1YO.rbgqn.cn
http://3jocY3Kh.rbgqn.cn
http://s9g0PkSy.rbgqn.cn
http://0hNPgpCC.rbgqn.cn
http://G0xYfLmS.rbgqn.cn
http://UEbKFqKC.rbgqn.cn
http://DkNS1Oup.rbgqn.cn
http://61cbqVba.rbgqn.cn
http://iguLmEyG.rbgqn.cn
http://M29MD0Os.rbgqn.cn
http://pNHrdF61.rbgqn.cn
http://6uz0rDrs.rbgqn.cn
http://0BgeWGOG.rbgqn.cn
http://EaKC2Egl.rbgqn.cn
http://www.dtcms.com/a/367674.html

相关文章:

  • 因为对象装箱拆箱导致的空指针异常
  • 济南矩阵跃动完成千万融资!国产GEO工具能否挑战国际巨头?
  • 【Linux基础】Linux文件系统深度解析:EXT4与XFS技术详解与应用
  • Opencv: cv::LUT()深入解析图像块快速查表变换
  • 【FPGA】单总线——DS18B20
  • 安装VScode和nodeJS
  • 【SuperSocket 】SuperSocket 中自定义 Session
  • 【涂鸦T5】6. lvgl显示光感数值
  • 【CS32L015C8T6】配置单片机PWM输出(内附完整代码及注释)
  • 华为校招实习留学生机试全攻略:真题目录+算法分类+在线OJ+备考策略
  • 【机器学习】HanLP+Weka+Java=Random Forest算法模型
  • Photoshop - Photoshop 触摸功能
  • Java Web :技术根基与产业实践的多维耦合
  • 在树莓派集群上部署 Distributed Llama (Qwen 3 14B) 详细指南
  • 解析PE文件的导入表和导出表
  • Flutter 3.35.2 以上版本中 数字转字符串的方法指南
  • 跨平台RTSP|RTMP|GB28181推拉流端智能录像模块技术探究
  • “人工智能+”的新范式:应用赋能与风险应对
  • 聚焦GISBox矢量服务:数据管理、数据库连接与框架预览全攻略
  • 如何避免 “空的 Windows 宿主机目录” 挂载时覆盖容器内的重要目录文件(导致容器关键文件丢失、无法启动)
  • wins中怎么用一个bat文件启动jar包和tomcat等多个服务
  • 深入理解awk
  • Leetcode 206. 反转链表 迭代/递归
  • RFID+工业互联网:汽车全景天幕全生命周期智能检测体系构建
  • javaweb基础第一天总结(HTML-CSS)
  • Django全局异常处理全攻略
  • 阵列信号处理之均匀面阵波束合成方向图的绘制与特点解读
  • 钉钉 AI 深度赋能制造业 LTC 全流程:以钉钉宜搭、Teambition 为例
  • JS对象进阶
  • 【109】基于51单片机自动感应迎宾门【Proteus仿真+Keil程序+报告+原理图】