news 2026/5/1 1:00:21

分享一个MySQL万能备份脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分享一个MySQL万能备份脚本

此脚本适用于 MySQL 各个生命周期的版本

#!/bin/bash

# mybackup.sh

# 备份保留天数,建议保留三天

days=7

# 备份时间

time=$(date +%Y%m%d%H%M%S)

# 备份保存路径

backup_dir=/opt/backup

# 备份工具

tool=mysqldump

# 端口

port="3306"

# 是否采用 --all-databases 备份所有数据库,是填写 Y,否填其他

read -p "是否备份所有数据库?(Y/N): " bak_all

# 将要备份的数据库,填写将要备份的数据库名

if [ "$bak_all" != "Y" ]; then

read -p "请输入要备份的数据库名,多个数据库用空格分隔: " database_input

IFS=' ' read -r -a database_arr <<< "$database_input"

fi

# 输入账号和密码

read -p "请输入 MySQL 用户名: " username

read -s -p "请输入 MySQL 密码: " password

echo

# 检查文件夹是否存在,不存在则创建

if [ ! -d "$backup_dir/mysqlbak_$time" ]; then

mkdir -p "$backup_dir/mysqlbak_$time"

fi

# 备份数据库

if [ "$bak_all" == "Y" ]; then

$tool -u"$username" -p"$password" -P"$port" --master-data=2 --single-transaction --set-gtid-purged=on --all-databases | gzip > "$backup_dir/mysqlbak_$time/mysqlbak_all_$time.sql.gz"

else

for database in "${database_arr[@]}"; do

$tool -u"$username" -p"$password" -P"$port" --master-data=2 --single-transaction --set-gtid-purged=on "$database" | gzip > "$backup_dir/mysqlbak_$time/mysqlbak_${database}_${time}.sql.gz"

done

fi

# 备份 binlog 日志

# 获取当前的 binlog 文件列表

binlog_files=$(mysql -u"$username" -p"$password" -P"$port" -e "SHOW BINARY LOGS;" | awk 'NR>1 {print $1}')

for binlog_file in $binlog_files; do

mysqlbinlog -u"$username" -p"$password" -P"$port" "$binlog_file" > "$backup_dir/mysqlbak_$time/${binlog_file}_${time}.log"

done

# 删除指定天数前的备份

find "$backup_dir" -maxdepth 1 -type d -mtime +$days -name 'mysqlbak*' -exec rm -rf {} \;

脚本说明:

账号和密码输入:

使用 read 命令在脚本运行时提示用户输入 MySQL 用户名和密码,其中 -s 选项用于隐藏密码输入。

数据库选择:

询问用户是否备份所有数据库,如果选择否,则让用户输入要备份的数据库名,多个数据库名用空格分隔。

备份数据库:

根据用户的选择,使用 mysqldump 备份所有数据库或指定的数据库,并将备份文件压缩保存。

备份 binlog 日志:

使用 mysql -e 命令获取当前的 binlog 文件列表。

遍历 binlog 文件列表,使用 mysqlbinlog 命令将每个 binlog 文件备份到指定的备份目录。

删除旧备份:

使用 find 命令删除指定天数前的备份文件夹。

使用方法:

将上述脚本保存为 mybackup.sh。

给脚本添加执行权限:

chmod +x mybackup.sh

运行脚本:

./mybackup.sh

注意事项:

确保用户输入的账号和密码具有足够的权限来执行备份操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:51:12

5个高效调试技巧:如何实现API开发效率倍增

5个高效调试技巧&#xff1a;如何实现API开发效率倍增 【免费下载链接】swagger-ui Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API. 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/5/1 1:43:34

归并排序:3步拆解,从困惑到精通的实战指南

归并排序&#xff1a;3步拆解&#xff0c;从困惑到精通的实战指南 【免费下载链接】algorithm-base 一位酷爱做饭的程序员&#xff0c;立志用动画将算法说的通俗易懂。我的面试网站 www.chengxuchu.com 项目地址: https://gitcode.com/gh_mirrors/al/algorithm-base 还在…

作者头像 李华
网站建设 2026/5/1 7:36:42

LookingGlass与OBS深度整合:打造专业级直播录屏体验的终极指南

想要实现零延迟的游戏直播效果吗&#xff1f;LookingGlass与OBS的完美结合为您提供了理想的解决方案。作为一款专为VGA PCI直通虚拟机设计的极低延迟KVMFR实现&#xff0c;LookingGlass通过共享内存技术彻底改变了传统录屏方式&#xff0c;让您的直播画面更加流畅自然。&#x…

作者头像 李华
网站建设 2026/5/1 5:01:50

Redisson与Spring Boot版本兼容性问题的完整解决方案

在Java开发领域&#xff0c;Redisson作为功能强大的Redis客户端&#xff0c;与Spring Boot的集成使用非常普遍。然而&#xff0c;版本兼容性问题常常成为开发者的绊脚石。本文将深入分析Redisson与Spring Boot版本冲突的技术原理&#xff0c;并提供切实可行的解决方案。 【免费…

作者头像 李华
网站建设 2026/5/1 4:58:27

如何快速掌握C语言编程?谭浩强第五版PPT完整资源助你轻松入门

如何快速掌握C语言编程&#xff1f;谭浩强第五版PPT完整资源助你轻松入门 【免费下载链接】C程序设计第五版谭浩强著PPT资源下载 - **标题**: C程序设计&#xff08;第五版&#xff09;谭浩强 著PPT- **内容**: 本课件共有十章&#xff0c;涵盖了C语言的基础知识和高级应用。每…

作者头像 李华