MySQL万能备份脚本

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

bash 复制代码
#!/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 {} \;

脚本说明:

  1. 账号和密码输入

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

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

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

    • 使用 mysql -e 命令获取当前的 binlog 文件列表。
    • 遍历 binlog 文件列表,使用 mysqlbinlog 命令将每个 binlog 文件备份到指定的备份目录。
  5. 删除旧备份

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

使用方法:

  1. 将上述脚本保存为 mybackup.sh
  2. 给脚本添加执行权限:
bash 复制代码
chmod +x mybackup.sh
  1. 运行脚本:
bash 复制代码
./mybackup.sh

注意事项:

  • 确保用户输入的账号和密码具有足够的权限来执行备份操作。
相关推荐
哈__2 分钟前
KES-Operator正式发布:基于Kubernetes的数据库集群云原生全生命周期管理方案
数据库·云原生·kubernetes
鸽芷咕3 分钟前
金仓KES向量数据库实战:一条SQL干掉ETL,机器人不再把停产货当现货卖
数据库·sql·etl
倍利福猎头公司官方账号11 分钟前
2026机器人猎头公司怎么选?收费标准与合作注意事项【HR版】
大数据·数据库·机器人·求职招聘·业界资讯
行业研究员12 分钟前
云原生数据库推荐排行与选型
数据库·云原生·云原生库
Maynor99613 分钟前
「原子弹爆炸」级别:Astra 复刻游戏合集(含实机截图)
java·linux·运维·数据库·gpt·游戏
蓝速科技21 分钟前
蓝速科技丨多网点涉外窗口翻译机批量部署实战指南
服务器·数据库·人工智能·缓存·语音识别
2601_9670195129 分钟前
免费SSL与商业SSL证书对比:企业生产环境适用性评估
数据库
小诗懂技术40 分钟前
【sqlite3数据库】一站式学会 增删改查 以及数据库c接口编程
数据库·sqlite
风123456789~1 小时前
【架构专栏】第6章 数据库设计基础知识 4/4
数据库·架构
IvorySQL1 小时前
代价比较的变革——PostgreSQL执行计划干预增强深度解析
数据库·postgresql·ffmpeg