MySQL备份脚本

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