MySQL备份脚本
#!/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 语句,这可能使备份文件更大,但有时候这样做有助于兼容某些特定的数据库导入工具或系统。 |