当前位置: 首页 > news >正文

MySQL定时异机备份

场景:将A机器MySQL数据库部分表每日定时备份到B机器上 (只适用于Linux)
实现方式算是比简单了,就是用mysqldump生成文件,使用scp命令传输到另一台机器上。

1. 编写备份shell脚本

在A机器新建脚本
(当然没有vim的话vi命令也可以)

vim backupAndUpload.sh
#!/bin/bash# 定义变量,见名知意,不做解释
SOURCE_DB_USER="root"
SOURCE_DB_PASSWORD="123"
SOURCE_DB_NAME="aaa"
TABLES=("tb1" "tb2" "tb3" "tb4" "tb5" "tb6")
BACKUP_FILE="/home/app/data-backup/aaa.sql"
REMOTE_USER="root"
REMOTE_PORT="22"
REMOTE_HOST="192.168.2.222"
REMOTE_PATH="/home/app/data-backup"
LOG_FILE="/home/app/data-backup/out.log"# 记录日志函数
log() {local message="$1"echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" | tee -a $LOG_FILE
}# 生成备份文件
log "开始备份数据库..."
mysqldump -u${SOURCE_DB_USER} -p${SOURCE_DB_PASSWORD} ${SOURCE_DB_NAME} ${TABLES[@]} --single-transaction > ${BACKUP_FILE}# 检查备份是否成功
if [ $? -eq 0 ]; thenlog "备份成功,开始上传文件..."# 使用scp上传备份文件scp -P ${REMOTE_PORT} ${BACKUP_FILE} ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}# 检查上传是否成功if [ $? -eq 0 ]; thenlog "文件上传成功"elselog "文件上传失败"fi
elselog "备份失败"
fi

解析:

  1. 定义变量:脚本中定义了数据库用户、密码、数据库名称、表名列表、备份文件名、远程用户、远程主机和远程路径。
  2. 生成备份文件:使用 mysqldump 命令生成备份文件,并将指定的表导出到 BACKUP_FILE 文件中。
  3. 检查备份是否成功:通过检查 mysqldump 命令的返回值来判断备份是否成功。
  4. 上传备份文件:如果备份成功,则使用 scp 命令将备份文件上传到远程服务器的指定路径。
  5. 检查上传是否成功:通过检查 scp 命令的返回值来判断文件上传是否成功。

2.生成ssh密钥

由于scp需要交互输入密码才能传输,所以下面使用SSH 密钥认证方式

在A机器上执行以下命令生成密钥

ssh-keygen -t rsa

三次回车

在这里插入图片描述
密钥会生成在/root/.ssh/目录下(以下都是以root用户操作的所以家目录就是/root)

将A机器上的公钥id_rsa.pub复制到B机器/root/.ssh目录

在B机器执行以下命令将公钥追加到authorized_keys文件

cat id_rsa.pub >> ~/.ssh/authorized_keys

如果提示没有该文件,就在家目录建一个.ssh目录

mkdir -p ~/.ssh

3. 手动执行

上面设置好之后可以手动执行脚本看是否成功
在A机器执行

赋予脚本执行权限

chmod +x backupAndUpload.sh
./backupAndUpload.sh

在这里插入图片描述

4.设置定时执行

当然还是在A机器执行,输入下面命令进入crontab编辑

crontab -e

最后一行加入以下内容,每日凌晨01:20执行一次
(写给小白:其实就是vi编辑器 按i键输入后在按ESC键,最后后输入:wq保存)

20 1 * * * /home/app/backupAndUpload.sh

最后用下面命令查询是否保存成功

crontab -l

然后就坐等自动备份了

http://www.lryc.cn/news/472203.html

相关文章:

  • MMA: Multi-Modal Adapter for Vision-Language Models
  • uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )
  • Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用
  • 【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)
  • 使用 Pandas 进行时间序列分析的 10个关键点
  • 使用 Mermaid 语言描述 AGI 系统架构图
  • 绘制线性可分支持向量机决策边界图 代码解析
  • No.23 笔记 | WEB安全 - 任意文件漏洞 part 5
  • EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放
  • WPF数据绑定的五大模式
  • 从零到一:大学新生编程入门攻略与成长指南
  • 详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute
  • 初识WebGL
  • 【力扣】Go语言回溯算法详细实现与方法论提炼
  • 「C/C++」C/C++ 之 第三方库使用规范
  • 六、元素应用CSS的习题
  • 正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品
  • 使用 Axios 上传大文件分片上传
  • Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
  • PART 1 数据挖掘概论 — 数据挖掘方法论
  • Centos安装ffmpeg的方法
  • 理解SQL中通配符的使用
  • SpringBoot篇(简化操作的原理)
  • Cesium的模型(ModelVS)顶点着色器浅析
  • 机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)
  • C++之多态的深度剖析
  • Microsoft Office PowerPoint制作科研论文用图
  • go语言进阶之并发基础
  • po、dto、vo的使用场景
  • 聊一聊Elasticsearch的一些基本信息