Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL数据库备份

MySQL数据库实现本地和异地备份的全面指南

作者:XMYX-0

本文将分享一份改进版的数据库备份脚本,并结合实际案例,阐述如何定期备份MySQL数据库,并实现本地和异地备份,有需要的小伙伴可以参考一下

在Linux环境下,mysqldump工具是进行MySQL数据库备份的常见方式。本文将分享一份改进版的数据库备份脚本,并结合实际案例,阐述如何定期备份MySQL数据库,并实现本地和异地备份。通过本文,您将掌握一个高效、安全的备份方案,确保数据的安全性和可恢复性。

一定要全部看完,再操作,因为数据库密码我没有再脚本中体现,当然也可以体现,看具体需求

备份脚本概述

我们创建一个改进版的备份脚本,命名为mysql_backup.sh。该脚本的目标是:

编写备份脚本

脚本内容

#!/bin/bash
set -eo pipefail
trap 'echo "错误发生在行 $LINENO"; exit 1' ERR

# 配置区
USER="root"                           # MySQL用户名
BACKUP_DIR="/data/backup"             # 备份存储目录
EXCLUDE_DBS="mysql|information_schema|performance_schema|sys"  # 排除的系统数据库
RSYNC_TARGET="rsync_backup@192.168.1.2::mysqlbackup/192.168.1.3/"     # 异地备份目标
LOGFILE="$BACKUP_DIR/data_backup.log" # 日志文件路径
DATE=$(date +%Y%m%d_%H%M)             # 当前日期时间

# 创建备份目录
mkdir -p "$BACKUP_DIR" || exit 1
cd "$BACKUP_DIR" || exit 1

# 记录开始时间
echo "==== 备份开始 $(date +"%Y-%m-%d %H:%M:%S") ====" >> "$LOGFILE"

# 获取数据库列表并备份
DATABASES=$(mysql -e "SHOW DATABASES;" | grep -Ev "$EXCLUDE_DBS" | tr '\n' ' ')
echo "备份数据库: $DATABASES" >> "$LOGFILE"
mysqldump --routines --single-transaction --master-data=2 --databases $DATABASES > "wzqmysql_bak${DATE}.sql"

# 压缩备份
if [ -s "wzqmysql_bak${DATE}.sql" ]; then
  tar -czf "wzqmysql_bak${DATE}.tar.gz" "wzqmysql_bak${DATE}.sql"
  rm -f "wzqmysql_bak${DATE}.sql"
  echo "压缩完成,文件大小: $(du -sh wzqmysql_bak${DATE}.tar.gz)" >> "$LOGFILE"
else
  echo "备份文件为空,终止流程!" >> "$LOGFILE"
  exit 1
fi

# 同步到异地
rsync -avz --password-file=/etc/rsync.password "wzqmysql_bak${DATE}.tar.gz" "$RSYNC_TARGET"

# 清理30天前备份
find "$BACKUP_DIR" -type f -mtime +30 -name "*.gz" -delete

echo "==== 备份完成 $(date +"%Y-%m-%d %H:%M:%S") ====" >> "$LOGFILE"

主要参数解释

设置脚本权限

在Linux系统中,为脚本添加执行权限:

chmod +x /data/mysql_backup.sh

定期执行备份

为了实现自动备份,可以将该脚本添加到定时任务中(例如每天凌晨1点执行)。

设置crontab任务

编辑crontab配置文件:

crontab -e

添加如下行,设定每天凌晨1点执行备份脚本:

0 1 * * * /data/mysql_backup.sh

保存退出后,crontab会自动更新。

安全性建议

避免明文密码

将MySQL密码存储在~/.my.cnf配置文件中,并设置严格权限:

[client]
user = root
password = 123456

设置配置文件权限:

chmod 600 ~/.my.cnf

rsync密码文件安全

确保/etc/rsync.password权限为600:

chmod 600 /etc/rsync.password

进阶功能和优化

增量备份

mysqldump不支持增量备份,建议使用二进制日志或Percona XtraBackup。以下是简要步骤:

查看二进制日志位置:

head -n 30 wzqmysql_bak${DATE}.sql | grep "CHANGE MASTER TO"

使用mysqlbinlog导出增量日志:

mysqlbinlog --start-datetime="2025-02-21 00:00:00" /var/lib/mysql/binlog.000001 > incremental.sql

备份验证

定期验证备份文件是否可以成功恢复:

# 解压备份
tar -wzqf wzqmysql_bak20250221_0100.tar.gz
# 恢复数据库
mysql -e "CREATE DATABASE test_restore;"
mysql test_restore < wzqmysql_bak20250221_0100.sql

日志轮转

使用logrotate管理日志文件:

/data/backup/data_backup.log {
  daily
  rotate 30
  compress
  missingok
}

详细解释

总结

通过本文的改进版脚本,您可以实现MySQL数据库的定期备份、本地压缩、异地同步以及旧备份文件的自动清理。结合安全性建议和进阶功能,您可以构建一个高效、可靠的数据库备份方案,确保数据的安全性和可恢复性。

附录:脚本依赖

到此这篇关于MySQL数据库实现本地和异地备份的全面指南的文章就介绍到这了,更多相关MySQL数据库备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文