找回密码
 立即注册
首页 业界区 业界 分享一个MySQL万能备份脚本

分享一个MySQL万能备份脚本

阙忆然 2025-11-13 10:05:02
此脚本适用于 MySQL 各个生命周期的版本
  1. #!/bin/bash
  2. # mybackup.sh
  3. # 备份保留天数,建议保留三天
  4. days=7
  5. # 备份时间
  6. time=$(date +%Y%m%d%H%M%S)
  7. # 备份保存路径
  8. backup_dir=/opt/backup
  9. # 备份工具
  10. tool=mysqldump
  11. # 端口
  12. port="3306"
  13. # 是否采用 --all-databases 备份所有数据库,是填写 Y,否填其他
  14. read -p "是否备份所有数据库?(Y/N): " bak_all
  15. # 将要备份的数据库,填写将要备份的数据库名
  16. if [ "$bak_all" != "Y" ]; then
  17.     read -p "请输入要备份的数据库名,多个数据库用空格分隔: " database_input
  18.     IFS=' ' read -r -a database_arr <<< "$database_input"
  19. fi
  20. # 输入账号和密码
  21. read -p "请输入 MySQL 用户名: " username
  22. read -s -p "请输入 MySQL 密码: " password
  23. echo
  24. # 检查文件夹是否存在,不存在则创建
  25. if [ ! -d "$backup_dir/mysqlbak_$time" ]; then
  26.     mkdir -p "$backup_dir/mysqlbak_$time"
  27. fi
  28. # 备份数据库
  29. if [ "$bak_all" == "Y" ]; then
  30.     $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"
  31. else
  32.     for database in "${database_arr[@]}"; do
  33.         $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"
  34.     done
  35. fi
  36. # 备份 binlog 日志
  37. # 获取当前的 binlog 文件列表
  38. binlog_files=$(mysql -u"$username" -p"$password" -P"$port" -e "SHOW BINARY LOGS;" | awk 'NR>1 {print $1}')
  39. for binlog_file in $binlog_files; do
  40.     mysqlbinlog -u"$username" -p"$password" -P"$port" "$binlog_file" > "$backup_dir/mysqlbak_$time/${binlog_file}_${time}.log"
  41. done
  42. # 删除指定天数前的备份
  43. 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。
  • 给脚本添加执行权限:
  1. chmod +x mybackup.sh
复制代码

  • 运行脚本:
  1. ./mybackup.sh
复制代码
注意事项:


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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

2025-11-21 18:57:00

举报

4 天前

举报

您需要登录后才可以回帖 登录 | 立即注册