MySQL 数据库本地及异地备份:全面指南
文章目录
- MySQL 数据库本地及异地备份:全面指南
- 备份脚本概述
- 编写备份脚本
- 脚本内容
- 主要参数解释
- 设置脚本权限
- 定期执行备份
- 设置crontab任务
- 安全性建议
- 避免明文密码
- rsync密码文件安全
- 进阶功能和优化
- 增量备份
- 备份验证
- 日志轮转
- 总结
- 附录:脚本依赖
MySQL 数据库本地及异地备份:全面指南
在Linux环境下,mysqldump工具是进行MySQL数据库备份的常见方式。本文将分享一份改进版的数据库备份脚本,并结合实际案例,阐述如何定期备份MySQL数据库,并实现本地和异地备份。通过本文,您将掌握一个高效、安全的备份方案,确保数据的安全性和可恢复性。
一定要全部看完,再操作,因为数据库密码我没有再脚本中体现,当然也可以体现,看具体需求
备份脚本概述
我们创建一个改进版的备份脚本,命名为mysql_backup.sh。该脚本的目标是:
- 自动备份MySQL数据库,并排除系统数据库(如
mysql、information_schema等)。 - 将备份数据打包并进行本地压缩。
- 同步备份到异地备份服务器(通过
rsync)。 - 自动清理30天前的备份文件,节省存储空间。
- 记录详细的备份日志,便于排查问题。
编写备份脚本
脚本内容
#!/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" ]; thentar -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"
elseecho "备份文件为空,终止流程!" >> "$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" -deleteecho "==== 备份完成 $(date +"%Y-%m-%d %H:%M:%S") ====" >> "$LOGFILE"
主要参数解释
--single-transaction:对于InnoDB表,确保备份的一致性。--master-data=2:将主服务器的二进制日志位置写入备份文件,适用于主从复制环境。--routines:备份存储过程和函数。rsync:用于将备份文件同步到异地服务器。find -mtime +30:清理30天前的备份文件。
设置脚本权限
在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 {dailyrotate 30compressmissingok
}
详细解释
-
daily: 这表示日志文件将每天进行轮换。如果日志文件每天更新或者你希望每次备份后都生成一个新的日志文件,可以使用这个选项。 -
rotate 30: 这表示系统将保留最近30个轮换过的日志文件,其余的将被删除。比如,你的日志文件每天生成一个新备份,当系统积累到30个日志文件时,最旧的日志文件将会被删除,确保只保留最新的30个日志备份。 -
compress: 这个选项告诉logrotate在轮换日志时,对旧的日志文件进行压缩(通常是.gz格式),从而节省磁盘空间。压缩文件的名字一般会附加.gz扩展名,例如data_backup.log.1.gz、data_backup.log.2.gz等。 -
missingok: 如果指定的日志文件不存在,不会抛出错误,而是跳过处理。例如,如果/data/backup/data_backup.log文件在某一天没有生成,logrotate会忽略这个情况,不会报错或中止执行。
总结
通过本文的改进版脚本,您可以实现MySQL数据库的定期备份、本地压缩、异地同步以及旧备份文件的自动清理。结合安全性建议和进阶功能,您可以构建一个高效、可靠的数据库备份方案,确保数据的安全性和可恢复性。
附录:脚本依赖
- MySQL客户端和
mysqldump工具。 rsync用于异地备份。cron用于定时任务调度。mailutils(可选)用于邮件通知。
相关文章:
MySQL 数据库本地及异地备份:全面指南
文章目录 MySQL 数据库本地及异地备份:全面指南备份脚本概述编写备份脚本脚本内容主要参数解释设置脚本权限 定期执行备份设置crontab任务 安全性建议避免明文密码rsync密码文件安全 进阶功能和优化增量备份备份验证日志轮转 总结附录:脚本依赖 MySQL 数…...
免费使用 DeepSeek API 教程及资源汇总
免费使用 DeepSeek API 教程及资源汇总 一、DeepSeek API 资源汇总1.1 火山引擎1.2 百度千帆1.3 阿里百炼1.4 腾讯云 二、其他平台2.1 华为云2.2 硅基流动 三、总结 DeepSeek-R1 作为 2025 年初发布的推理大模型,凭借其卓越的逻辑推理能力和成本优势,迅速…...
java后端开发day20--面向对象进阶(一)--static继承
(以下内容全部来自上述课程) 1.static–静态–共享 static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量。 1.静态变量 被static修饰的成员变量,叫做静态变量。 特点: 被该类…...
统计学中的得分函数(Score Function)是什么?它和Fisher信息矩阵有什么关系?
得分函数:统计学中的“敏感探针” 在统计学和概率论中,得分函数(Score Function)是一个看似简单却非常重要的概念。它不仅是Fisher信息矩阵的核心组成部分,还在参数估计、模型优化等领域发挥着关键作用。今天…...
Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)
Spring Boot集成MyBatis访问MySQL 一、引言 在当今企业级应用开发中,Spring Boot、MyBatis与MySQL的组合凭借其高效性和灵活性,成为构建数据驱动型应用的首选方案。本文将带你从零开始搭建项目,掌握Spring Boot集成MyBatis的基础入门内容。…...
ShenNiusModularity项目源码学习(14:ShenNius.Infrastructure项目分析)
ShenNius.Infrastructure项目用于定义ShenNius.Admin.Mvc项目和ShenNius.Admin.API项目共用的特性类、数据操作接口实现类、上下文类、通讯类,主要文件的用途如下: Attributes文件夹保存特性类或过滤器类定义,主要包括: …...
Linux 内核配置机制详细讲解
本文是对 Linux 内核配置机制 make menuconfig 的 超详细分步解析,涵盖其工作原理、界面操作、配置逻辑及底层实现: 一、内核配置系统概述 Linux 内核的配置系统是一个 基于文本的交互式配置工具链,核心目标是通过定义 CONFIG_XXX 宏来控制内…...
【C语言】第八期——指针、二维数组与字符串
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
Spring Boot集成Spring Security之HTTP请求授权
一、HTTP请求授权工作原理 基于Spring Security最新的Http请求授权讲解,不再使用旧版的请求授权 授权过滤器AuthorizationFilter获取认证信息 调用RequestMatcherDelegatingAuthorizationManager的check方法验证该用户是否具有该请求的授权 RequestMatcherDele…...
可以免费无限次下载PPT的网站
前言 最近发现了一个超实用的网站,想分享给大家。 在学习和工作的过程中,想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量,但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制࿰…...
DeepSeek 开源周:DeepEP 项目详解,GPU 压榨计划启动!
引言 就在今天,2025年2月25日,DeepSeek 再次为人工智能社区带来了一场技术盛宴——DeepEP 项目的开源。这个旨在优化 GPU 性能的工具一经发布便迅速获得了广泛的关注和赞誉,短短两小时内就斩获了超过1000个 Star。本文将详细介绍 DeepEP 的功…...
GPT1 与 GPT2 的异同
1.什么是GPT1: GPT1介绍了一种通过生成式预训练(Generative Pre-Training)来提升语言理解能力的方法。这种方法首先在一个大型的未标注文本语料库上进行语言模型的预训练,然后针对具体的任务进行判别式微调(discrimin…...
从零开始自主「起身站立」,上海AI Lab发布最新控制算法,机器人:起猛了
来源 | 机器之心 近日,上海 AI Lab 具身智能中心研究团队在机器人控制领域取得了最新突破,提出的 HoST(Humanoid Standing-up Control)算法,成功让人形机器人在多种复杂环境中实现了自主站起,并展现出强大…...
基于Python socket库构建的基于 P2P 的文件共享系统示例
基于 P2P 的文件共享系统 实现方式: 使用 Python 的socket库构建 P2P 网络,节点之间通过 TCP 或 UDP 协议进行通信。每个节点维护一个文件列表,并向其他节点广播自己拥有的文件信息。当一个节点需要某个文件时,它会向网络中的其…...
【Kubernetes】API server 限流 之 maxinflight.go
这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel ,这类channel 的特点是: 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…...
Solr中得Core和Collection的作用和关系
Solr中得Core和Collection的作用和关系 一, 总结 在Apache Solr中,Core和Collection 是两个核心概念,他们分别用于单机模式和分布式模式(SolrCloud)中,用于管理和组织数据。 二,Core 定义&am…...
AI驱动的自动化留给人类的时间不多了
时间紧迫!时间紧迫!时间紧迫! 关于AI工作流催生的行业任务自动化时间窗口,结合技术成熟度、成本效益、行业特性等维度,可划分为以下阶段: 一、技术渗透阶段(2025-2028年) 高重复性任…...
嵌入式Qt的动平衡仪完整设计方案
一、系统架构总览 #mermaid-svg-R5q0e12ntMzsskep {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-R5q0e12ntMzsskep .error-icon{fill:#552222;}#mermaid-svg-R5q0e12ntMzsskep .error-text{fill:#552222;stroke:#5…...
使用 Containerd 通过 HTTP 协议拉取 Harbor 私有镜像仓库的镜像
在 Kubernetes 1.24及以上版本环境中,docker不再被支持,主要使用Containerd 是常用的容器运行。默认情况下,Containerd 使用 HTTPS 协议与镜像仓库通信。然而,在某些场景下(如测试环境或内部网络)ÿ…...
Python解决“比赛配对”问题
Python解决“比赛配对”问题 问题描述测试样例解决思路代码 问题描述 小R正在组织一个比赛,比赛中有 n 支队伍参赛。比赛遵循以下独特的赛制: 如果当前队伍数为 偶数,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,…...
Dify在Ubuntu20.04系统的部署
文章目录 一、dify 介绍1.核心功能优势2.应用场景 二、dify 安装(docker方式)1.代码库下载2.配置文件修改3.启动docker 容器 三、遇到问题与解决1.使用sudo docker compose up -d报错2.使用service docker start报错 一、dify 介绍 Dify 是一款开源的大语言模型(LL…...
达梦:内存相关参数
目录 28个相关参数1. 内存池相关MEMORY_POOLMEMORY_N_POOLSMEMORY_BAK_POOL 2. 大缓冲区相关HUGE_BUFFERHUGE_BUFFER_POOLS 3. 共享缓冲区相关BUFFERBUFFER_POOLSBUFFER_MODEMAX_BUFFER 4. 快速池相关FAST_POOL_PAGES 5. 回收池相关RECYCLE_POOLS 6. 回滚段池相关ROLLSEG_POOLS…...
计算机毕设-基于springboot的融合多源高校画像数据与协同过滤算法的高考择校推荐系统的设计与实现(附源码+lw+ppt+开题报告)
博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...
《Qt动画编程实战:轻松实现头像旋转效果》
《Qt动画编程实战:轻松实现头像旋转效果》 Qt 提供了丰富的动画框架,可以轻松实现各种平滑的动画效果。其中,旋转动画是一种常见的 UI 交互方式,广泛应用于加载指示器、按钮动画、场景变换等。本篇文章将详细介绍如何使用 Qt 实现…...
SpringBoot3—快速入门
一、简介 (1)前置知识 Java17Spring、SpringMVC、MyBatisMaven、IDEA (2)环境要求 (3)SpringBoot3是什么 核心概念:Spring Boot 底层是 Spring,能简单、快速地创建一个独立的、生…...
【Eureka 缓存机制】
今天简单介绍一下Eureka server 的缓存机制吧✌️✌️✌️ 一、先来个小剧场:服务发现的"拖延症" 想象你是个外卖小哥(客户端),每次接单都要打电话问调度中心(Eureka Server):“现在…...
Python基于机器学习的微博舆情情感分析系统,微博评论情感分析可视化系统(全新升级)
大家好,今天为大家带来的是Python基于机器学习的微博舆情情感分析系统,微博评论情感分析可视化系统,这个系统在原本的系统上进行优化升级。 算法从开源框架的 snlow ,到支持机器学习的 lstm 算法可以手动输入语句,进行…...
Matlab地图绘制教程第2期—水陆填充图
上一期分享了海岸线图的绘制方法: 本着由浅入深的理念,本期再来分享一下水陆填充图的绘制方法。 先来看一下成品效果: 特别提示:Matlab地图绘制教程系列,旨在降低大家使用Matlab进行地图类科研绘图的门槛,…...
云创智城YunCharge 新能源二轮、四轮充电解决方案(云快充、万马爱充、中电联、OCPP1.6J等多个私有单车、汽车充电协议)之新能源充电行业系统说明书
云创智城YunCharge 新能源充电行业系统说明书 ⚡官方文档 ⚡官网地址 1. 引言 随着全球环境保护和能源危机的加剧,新能源汽车行业得到了快速发展,充电基础设施建设也随之蓬勃发展。新能源充电行业系统旨在提供高效、便捷的充电服务,满足电…...
(八)Java-Collection
一、Collection接口 1.特点 Collection实现子类可以存放多个元素,每个元素可以是Object; 有些Collection的实现类,可以存放重复的元素,有些不可以; 有些Collection的实现类,有些是有序的(Li…...
