Linux 环境下 Mysql 5.7 数据定期备份

目录

    • 一、创建数据备份脚本
    • 二、查看备份日志
    • 三、数据库数据恢复

备份策略:
系统环境 openEuler 22.03 (LTS-SP4)
单机备份
每天凌晨2点,指定数据库表全量备份,只保留近7次备份数据
每次的脚本执行,将会记录执行结果到日志,方便后续查看

一、创建数据备份脚本

1.1 创建脚本文件

# 路径根据实际情况修改
[root@openeuler ~]# sudo vi /mnt/mysql/backup_script.sh

1.2 写入脚本内容

#!/bin/bash# MySQL配置
MYSQL_USER="root"
MYSQL_PWD="root"
MYSQL_HOST="localhost"
MYSQL_PORT="3366"
MYSQL_BIN="/usr/local/mysql/bin/mysql"
MYSQLDUMP_BIN="/usr/local/mysql/bin/mysqldump"# 备份配置
BACKUP_DIR="/mnt/mysql/backup_data"
BACKUP_LOG_FILE="$BACKUP_DIR/backup.log"
DATABASES=("rmcbs" "gdzj")
MAX_BACKUPS=7# 创建备份目录(如果不存在)
if [ ! -d "$BACKUP_DIR" ]; thenmkdir -p "$BACKUP_DIR"
fi# 记录日志函数
log() {local timestamp=$(date +"%Y%m%d %H:%M:%S")echo "$timestamp $1 $2" >> "$BACKUP_LOG_FILE"
}log "INFO" ""
log "INFO" "================== start 备份 =================="# 检查数据库是否存在
check_db_exists() {local db_name=$1local query="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$db_name'"local result=$($MYSQL_BIN -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PWD" -e "$query" 2>/dev/null | grep -c "$db_name")[ "$result" -eq 1 ]
}# 备份每个数据库
for db in "${DATABASES[@]}"; doif check_db_exists "$db"; thenbackup_file="$BACKUP_DIR/${db}_backup_$(date +"%Y%m%d_%H%M%S").sql"if $MYSQLDUMP_BIN -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PWD" "$db" > "$backup_file"; thenlog "SUCCESS" "成功备份数据库 $db$backup_file"# 压缩备份文件if gzip "$backup_file"; thenlog "SUCCESS" "成功压缩数据库 $db 的备份文件"elselog "FAILURE" "压缩数据库 $db 的备份文件失败"fielselog "FAILURE" "备份数据库 $db 失败"fi# 清理旧备份backup_count=$(ls -1 "$BACKUP_DIR/${db}_backup_"*.sql.gz 2>/dev/null | wc -l)if [ $backup_count -gt $MAX_BACKUPS ]; thenfiles_to_delete=$((backup_count - MAX_BACKUPS))ls -1t "$BACKUP_DIR/${db}_backup_"*.sql.gz | tail -n $files_to_delete | xargs rm -flog "SUCCESS" "删除 $db$files_to_delete 个旧备份文件"fielselog "WARNING" "数据库 $db 不存在,跳过备份"fi
done log "INFO" "================== end 备份 =================="
log "INFO" ""

1.3 添加执行权限

[root@openeuler ~]# chmod +x /mnt/mysql/backup_script.sh

1.4 配置定时任务

# 编辑 crontab
[root@openeuler ~]# crontab -e# 按【i】键进行编辑,设置环境变量,【ESC】退出编辑,【:wq】保存内容
# 写入下列内容:
# 每天凌晨2点执行备份脚本
0 2 * * * /mnt/mysql/backup_script.sh
# 每1分钟执行一次备份
# */1 * * * * /mnt/mysql/backup_script.sh# 验证 crontab
[root@openeuler ~]# crontab -l

二、查看备份日志

[root@openeuler ~]# tail -1000f /mnt/mysql/backup_data/backup.log

三、数据库数据恢复

注意:
此处命令是上一版本的数据库全量恢复,在生产环境中一定要注意,最好是手动执行按表恢复,防止数据丢失!!!以防万一!!!

# 若数据库不存在则创建
[root@openeuler ~]# mysql -h localhost -P 3366 -u root -proot -e "CREATE DATABASE IF NOT EXISTS [数据库名];" 2>/dev/null# 恢复数据库,先解压备份文件再导入
[root@openeuler ~]# zcat /mnt/mysql/backup_data/[备份名称].sql.gz | mysql -h localhost -P 3366 -u root -proot [数据库名] 2>/dev/null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 语言字符输入:掌握 getchar 和 scanf 的用法与陷阱

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ C 语言字符输入:掌握 getchar 和 scanf 的用法与陷阱 你好!在 C 语言编程中,与用户进行交互最基本的方式就是通过标准输入和标准输出。我们之前探讨了如何使用 ​​printf​​ 和 ​​putchar​​ 进行…

【React】 Hooks useTransition 解析与性能优化实践

1.背景 useTransition 是 React 18 引入的一个并发模式下的 Hook,用于区分紧急和非紧急的状态更新,提升应用的响应性和用户体验;它可以管理 UI 中的过渡状态,特别是在处理长时间运行的状态更新时。它允许你将某些更新标记为“过渡”状态&…

蘑菇管理——AI与思维模型【94】

一、定义 蘑菇管理思维模型是一种形象地描述组织对待新员工或初入职场者的管理方式及相关现象的思维模型。它将新员工或初入职场者比作蘑菇,这些人在初期往往被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上…

c++STL——set和map的使用

文章目录 set和map的使用set系列声名和定义默认成员函数迭代器set的增删查lower_bound和upper_boundInsert接口pair类 对于查找的另一种使用 set和multiset的区别 map系列声名和定义pair类的进一步介绍默认成员函数map的增删查map的数据修改map和multimap的差异 set和map的使用…

什么是DGI数据治理框架?

DGI数据治理框架是由数据治理研究所(Data Governance Institute, DGI)提出的一套系统性方法论,旨在帮助企业或组织建立有效的数据治理体系,确保数据资产的高质量管理、合规使用和价值释放。以下是关于DGI数据治理框架的核心内容&a…

chrome 浏览器怎么不自动提示是否翻译网站

每次访问外国语网页都会弹出这个对话框,很是麻烦,每次都得手动关闭一下。 不让他弹出来方法: 设置》语言》首选语言》添加语言,搜索英语添加上 如果需要使用翻译,就点击三个点,然后选择翻译

LeetCode 热题 100 54. 螺旋矩阵

LeetCode 热题 100 | 54. 螺旋矩阵 大家好,今天我们来解决一道经典的算法题——螺旋矩阵。这道题在LeetCode上被标记为中等难度,要求我们按照顺时针螺旋顺序返回矩阵中的所有元素。下面我将详细讲解解题思路,并附上Python代码实现。 问题描述…

生成式AI将重塑的未来工作

在人类文明的长河中,技术革命始终是推动社会进步的核心动力。从蒸汽机的轰鸣到互联网的浪潮,每一次技术跃迁都在重塑着人类的工作方式与生存形态。而今,生成式人工智能(Generative AI)的崛起,正以超越以往任何时代的速度与深度,叩响未来工作范式变革的大门。这场变革并非…

【2025软考高级架构师】——2024年05月份真题与解析

摘要 本文内容是关于2025年软考高级架构师考试的相关资料,包含2024年05月份真题与解析。其中涉及体系结构演化的步骤、OSI协议中能提供安全服务的层次、数据库设计阶段中进行关系反规范化的环节等知识点,还提及了软考高级架构师考试的多个模块&#xff…

KAG:通过知识增强生成提升专业领域的大型语言模型(三)

目录 摘要 Abstract 1 Schema 2 Prompt 3 KAG-Builder 3.1 reader 3.2 splitter 3.3 extractor 3.4 vectorizer 3.5 writer 3.6 可选组件 4 示例 总结 摘要 本周深入学习了 KAG 项目中的 Schema、Prompt 以及 KAG-Builder 相关代码知识,涵盖了其定义、…

Gitea windows服务注册,服务启动、停止、重启脚本

修改配置文件 查看COMPUTERNAME echo %COMPUTERNAME%进入配置文件D:\gitea\custom\conf\app.ini,将 Gitea 设置为以本地系统用户运行 如果结果是 USER-PC,那么 RUN_USER USER-PC$ RUN_USER COMPUTERNAME$SQLite3 PATH配置,更改为包含完整…

矿泉水瓶的绘制

1.制作中心矩形,大小为60,注意设置矩形的两条边相等 2.点击拉伸,高度为150mm 3.使用圆角命令,点击连接到开始面,同时选中4条边,进行圆角转化,圆角大小为10mm,点击多半径圆角&#xf…

【程序+论文】大规模新能源并网下的火电机组深度调峰经济调度

目录 1 主要内容 讲解重点 2 讲解视频及代码 1 主要内容 该视频为《大规模新能源并网下的火电机组深度调峰经济调度》代码讲解内容,该程序有完全对照的论文,以改进IEEE30节点作为研究对象,系统包括5个火电机组和2个新能源机组,…

​​工业机器人智能编程:从示教器到AI自主决策​​

工业机器人智能编程:从示教器到AI自主决策 引言 工业机器人作为智能制造的核心装备,其编程方式正经历革命性变革。传统示教器编程效率低下,平均每个路径点需要30秒人工示教,而复杂轨迹编程可能耗时数周。随着AI技术的发展,工业机器人编程正朝着"所见即所得"的…

n8n 构建一个 ReAct AI Agent 示例

n8n 构建一个 ReAct AI Agent 示例 0. 引言1. 详细步骤创建一个 "When Executed by Another Workflow"创建一个 "Edit Fields (Set)"再创建一个 "Edit Fields (Set)"创建一个 HTTP Request创建一个 If 节点在 true 分支创建一个 "Edit Fiel…

Monorepo项目多项目一次性启动工具对比与实践

Monorepo项目多项目一次性启动工具对比与实践 在现代软件开发中,Monorepo(单一仓库)模式越来越受到开发者的青睐。Monorepo将多个相关的项目或包集中在一个仓库中进行管理,方便依赖共享、代码复用和统一发布。在Monorepo项目开发…

笔记整理六----OSPF协议

OSPF 动态路由的分类: 1.基于网络范围进行划分--将网络本身划分为一个个AS(自治系统---方便管理和维护) 内部网关协议---负责AS内部用户之间互相访问使用的协议 IGP--RIP EIGRP ISIS OSPF 外部网关协议--负责AS之间(整个互联网&…

网络编程,使用select()进行简单服务端与客户端通信

这里在Ubuntu环境下演示 一般流程 服务端常用函数: socket():创建一个新的套接字。bind():将套接字与特定的IP地址和端口绑定。listen():使套接字开始监听传入的连接请求。accept():接受一个传入的连接请求&#xff…

智能决策支持系统的基本概念与理论体系

决策支持系统是管理科学的一个分支,原本与人工智能属于不同的学科范畴,但自20世纪80年代以来,由于专家系统在许多方面取得了成功,于是人们开始考虑把人工智能技术用于计算机管理中来。在用计算机所进行的各种管理中,如…

驱动开发系列55 - Linux Graphics QXL显卡驱动代码分析(二)显存管理

一:概述 前面介绍了当内核检测到匹配的PCI设备后,会调用 qxl_pci_probe 初始化设备,其中会调用qxl_device_init 来初始化设备,为QXL设备进行内存映射,资源分配,环形缓冲区初始化,IRQ注册等操作,本文展开说说这些细节,以及介绍下QXL的显存管理。 二:QXL设备初始化细节…