MySQL备份脚本

该脚本用于自动备份MySQL数据库,并根据不同的日期生成不同类型的备份文件。主要功能包括:

  • 使用 mysqldump 命令备份MySQL数据库。
  • 根据当前日期生成备份文件名,并将备份文件移动至远程主机。
  • 根据每周不同的日期生成不同类型的备份文件:周日生成完整备份,其他日期生成增量备份。

主要功能

  1. 备份文件夹创建: 如果指定的备份文件夹不存在,脚本会自动创建该文件夹。

  2. 选择备份类型: 根据当前日期,选择是生成完整备份还是增量备份。

  3. 完整备份(周日): 如果当前是周日,将备份整个数据库,并在备份文件名中添加日期后缀。此备份包含数据库结构和数据。

  4. 增量备份(其他日期): 如果当前不是周日,则生成增量备份,仅备份数据而不包括数据库结构。此备份会跳过创建表的 SQL 语句,并将数据插入到单独的 INSERT 语句中,以提高备份效率。

  5. 远程传输备份文件: 使用 scp 命令将备份文件传输至远程主机,以确保备份文件的安全存储。

参考脚本

#!/bin/bash
set -e
# 备份文件夹
backup_dir="/opt/backup"
# 数据库账号
mysql_user="root"
# 数据库密码
mysql_password="1"
# 要备份的数据库名称
mysql_database="one"
# 获取周几
weekday=$(date +'%u')

# 如果备份文件夹不存在则创建
if [ ! -d "$backup_dir" ]; then 
  mkdir -p "$backup_dir"        
  echo "备份文件夹 $backup_dir 不存在,已创建该文件夹。"
fi

echo "开始执行备份操作" 

# 如果是周日执行当前备份
if  [ "$weekday" -eq 7 ]; then
    backup_file="$backup_dir/QL.dir/full_backup_$(date +'%Y%m%d').sql"
    mysqldump --user="$mysql_user" --password="$mysql_password" --single-transaction --skip-lock-tables --routines --triggers --events --add-drop-database --add-drop-table "$mysql_database" > "$backup_file/$mysql_database$(date +'%Y%m%d').sql"
else
    backup_file="$backup_dir/ZL.dir/INcmt_backup_$(date +'%Y%m%d').sql"
    mysqldump --user="$mysql_user" --password="$mysql_password" --single-transaction --skip-lock-tables --no-create-info --skip-comments --skip-extended-insert "$mysql_database" > "$backup_file/$mysql_database$(date +'%Y%m%d').sql"
fi
echo "数据库$mysql_database备份完成"

scp $backup_dir/$mysql_database$(date +'%Y%m%d').sql 192.168.10.100:/data/mysql/backup
echo "移动备份文件至远程主机"

参数说明

mysqldump参数:

参数作用
–single-transaction使用单个事务来导出数据,这对于 InnoDB 存储引擎是特别有用的,因为它允许在不锁定表的情况下创建一致性的备份
–skip-lock-tables不锁定任何表来读取数据,这通常与 --single-transaction 一起使用
–routines告诉 mysqldump 导出存储过程和函数
–triggers告诉 mysqldump 导出触发器
–events告诉 mysqldump 导出事件调度器的事件
–add-drop-database会在每个数据库的导出内容前添加一个 DROP DATABASE 语句,并在之后添加一个 CREATE DATABASE 语句。这有助于在恢复时删除并重新创建数据库
–add-drop-table这会在每个表的导出内容前添加一个 DROP TABLE 语句,并在之后添加一个 CREATE TABLE 语句。这有助于在恢复时删除并重新创建表。
–no-create-info不导出 CREATE TABLE 语句。这意味着备份文件中将不包含创建表的 SQL 语句,只有表中的数据。
–skip-comments不导出任何注释。这可以减少备份文件的大小,并加速备份过程。
–skip-extended-insert不使用扩展的 INSERT 语句。默认情况下,mysqldump 使用扩展的 INSERT 语句来插入多行数据,以提高效率。但使用这个选项会导致每行数据都使用单独的 INSERT 语句,这可能使备份文件更大,但有时候这样做有助于兼容某些特定的数据库导入工具或系统。

示例用法

# 在每天定时任务中执行数据库备份
0 0 * * * /bin/bash /path/to/backup_script.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维小王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值