分享一个MySQL万能备份脚本

一个MySQL万能备份脚本,一个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 命令删除指定天数前的备份文件夹。

使用方法:

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

2. 给脚本添加执行权限:

chmod +x mybackup.sh

3. 运行脚本:

./mybackup.sh

注意事项:

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

【版权提示】信息来自于互联网,不代表Intoep官方立场,内容仅供网友参考学习。如发现本站内容存在版权问题,烦请提供版权疑问、联系方式等发邮件至 1359125269@qq.com ,我们将及时沟通与处理。如若转载请联系原出处
(0)
SQL Schema Compare:一款免费开源的数据库结构比较和同步工具
上一篇 2025-11-04 11:15
下一篇 2022-01-09 17:07

相关推荐

  • 在线SQL转换工具,Oracle、Mysql、SQLServer语句互转

    在线SQL转换工具,Oracle、Mysql、SQLServer语句互转,可以用于不同数据库之间的SQL语句转换,不管是创建、查询、修改还是任何级联语句都支持。

    2024-01-16
    15.3K
  • 15个MySQL常用基本SQL语句

    15个MySQL常用基本SQL语句15个MySQL常用基本SQL语句15个MySQL常用基本SQL语句15个MySQL常用基本SQL语句

    在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存…

    2021-12-19 MySQL
    1.9K
  • MySQL 配置文件 my.cnf / my.ini 逐行详解

    MySQL 配置文件的意义充分理解 MySQL 配置文件中各个变量的意义对我们有针对性的优化 MySQL 数据库性能有非常大的意义。我们需要根据不同的数据量级,不同的生产环境情况对…

    MySQL 2022-01-09
    2.2K
  • MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化

    在使用 MySQL 的过程中会遇到各种瓶颈问题,常见的是 IO 瓶颈,但是有时候会出现服务器 CPU 使用率超过 100%,应用页面访问慢,登录服务器负载很高。而导致这个问题竟然是 MySQL 进程,按理说如果 MySQL 运行稳定,服务器的 CPU 资源并不会跑满,如果出现这个问题,初步可以断定,是 MySQL 实例中出现了问题 SQL。

    MySQL 2022-03-11
    2.2K
  • MySQL 到 ADB PostgreSQL 实时数据同步实操分享

    MySQL 到 ADB PostgreSQL 实时数据同步实操分享MySQL 到 ADB PostgreSQL 实时数据同步实操分享MySQL 到 ADB PostgreSQL 实时数据同步实操分享MySQL 到 ADB PostgreSQL 实时数据同步实操分享

    MySQL 到 ADB PostgreSQL 实时数据同步实操分享,本次 MySQL 数据实时同步到 ADB PostgreSQL大概只花了几分钟就完成。使用的工具是 Tapdata Cloud,这个工具是永久免费的。

    2022-01-20 MySQL
    2.0K
  • 如何在两台服务器之间迁移 MySQL / MariaDB 数据库 阿里云腾讯云迁移案例

    如何在两台服务器之间迁移 MySQL / MariaDB 数据库 阿里云腾讯云迁移案例如何在两台服务器之间迁移 MySQL / MariaDB 数据库 阿里云腾讯云迁移案例如何在两台服务器之间迁移 MySQL / MariaDB 数据库 阿里云腾讯云迁移案例如何在两台服务器之间迁移 MySQL / MariaDB 数据库 阿里云腾讯云迁移案例

    MySQL 数据库迁移的需求非常常见,测试数据库迁移至生产数据库,从一台服务器,迁移至另一台服务器,又或者是从一个云服务商迁移至另一个云服务商。不同的需求使用不同的迁移方法,总体来…

    2022-01-21 MySQL
    2.8K

发表回复

登录后才能评论
扫码了解
扫码了解
反馈建议
分享本页
返回顶部