导读:本期聚焦于小伙伴创作的《MySQL如何配置远程备份数据库并设置SSH隧道与自动化脚本》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL如何配置远程备份数据库并设置SSH隧道与自动化脚本》有用,将其分享出去将是对创作者最好的鼓励。

MySQL数据库远程备份是保障数据安全的核心环节,通过SSH隧道加密传输可以规避公网明文传输的安全隐患,配合自动化脚本还能实现定时无人值守备份,大幅降低运维成本。本文将从环境准备到最终定时任务配置,完整讲解整个实现流程。

MySQL如何配置远程备份数据库并设置SSH隧道与自动化脚本

环境准备

开始配置前需要确认以下环境信息:

  • 本地备份服务器:用于执行备份脚本,存放备份文件,假设IP为192.168.0.10
  • 远程MySQL服务器:需要备份的数据库所在服务器,假设IP为192.168.0.20,MySQL端口3306,数据库用户backup_user,密码Backup@123
  • 两台服务器均开启SSH服务,且网络互通

配置SSH密钥认证

为避免脚本中明文存储SSH密码,优先配置SSH密钥对实现免密登录:

生成密钥对

在本地备份服务器执行以下命令生成密钥对:

# 生成rsa密钥对,一路回车即可,默认存放在~/.ssh目录
ssh-keygen -t rsa

拷贝公钥到远程服务器

将本地生成的公钥拷贝到远程MySQL服务器的授权列表中:

# 替换远程服务器用户名和IP
ssh-copy-id root@192.168.0.20

执行完成后,尝试SSH登录远程服务器,无需输入密码即可登录说明配置成功:

ssh root@192.168.0.20

搭建SSH隧道

SSH隧道可以将本地端口映射到远程MySQL服务器的3306端口,让本地可以直接通过本地端口访问远程MySQL服务,所有传输数据都会被SSH加密。

手动测试SSH隧道

在本地备份服务器执行以下命令建立隧道:

# -L 本地端口:远程地址:远程端口  -N 不执行远程命令 -f 后台运行
ssh -L 13306:127.0.0.1:3306 -N -f root@192.168.0.20

命令执行后,本地13306端口就会映射到远程MySQL的3306端口,测试连接:

mysql -h 127.0.0.1 -P 13306 -u backup_user -pBackup@123

能正常进入MySQL命令行说明隧道搭建成功。

隧道保活配置

默认SSH隧道长时间无传输会自动断开,需要配置保活参数,修改本地SSH客户端配置:

# 编辑SSH客户端配置
vim ~/.ssh/config

添加以下内容:

Host mysql_remote
    HostName 192.168.0.20
    User root
    LocalForward 13306 127.0.0.1:3306
    ServerAliveInterval 60
    ServerAliveCountMax 3

之后可以直接用ssh -N -f mysql_remote建立保活隧道。

编写MySQL远程备份脚本

接下来编写完整的备份脚本,实现隧道建立、数据库备份、文件清理、隧道关闭的全流程。

#!/bin/bash
# MySQL远程备份脚本,通过SSH隧道实现加密传输

# 配置参数
REMOTE_MYSQL_IP="127.0.0.1"  # SSH隧道映射的本地地址
REMOTE_MYSQL_PORT=13306       # 隧道映射的本地端口
MYSQL_USER="backup_user"      # MySQL备份用户
MYSQL_PASSWORD="Backup@123"   # MySQL备份用户密码
BACKUP_DIR="/data/mysql_backup"  # 本地备份文件存放目录
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)  # 备份时间戳
SSH_HOST="192.168.0.20"       # 远程SSH服务器地址
SSH_USER="root"               # SSH登录用户
TUNNEL_ALIVE_CHECK_PORT=13306 # 隧道检测端口

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 检查SSH隧道是否已经存在
check_tunnel() {
    if netstat -tuln | grep ":${TUNNEL_ALIVE_CHECK_PORT}" > /dev/null; then
        return 0
    else
        return 1
    fi
}

# 建立SSH隧道
build_tunnel() {
    echo "开始建立SSH隧道..."
    # 如果已经存在隧道先关闭
    if check_tunnel; then
        echo "检测到已有隧道,先关闭旧隧道"
        pkill -f "ssh -L ${TUNNEL_ALIVE_CHECK_PORT}:127.0.0.1:3306"
        sleep 2
    fi
    # 建立新隧道
    ssh -L ${TUNNEL_ALIVE_CHECK_PORT}:127.0.0.1:3306 -N -f ${SSH_USER}@${SSH_HOST}
    sleep 3
    if check_tunnel; then
        echo "SSH隧道建立成功"
    else
        echo "SSH隧道建立失败,退出脚本"
        exit 1
    fi
}

# 执行备份
do_backup() {
    echo "开始执行数据库备份..."
    # 备份所有数据库,排除系统库可根据需求调整
    mysqldump -h ${REMOTE_MYSQL_IP} -P ${REMOTE_MYSQL_PORT} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} --all-databases > ${BACKUP_DIR}/full_backup_${BACKUP_DATE}.sql
    # 检查备份是否成功
    if [ $? -eq 0 ]; then
        echo "备份成功,文件保存在:${BACKUP_DIR}/full_backup_${BACKUP_DATE}.sql"
        # 压缩备份文件
        gzip ${BACKUP_DIR}/full_backup_${BACKUP_DATE}.sql
        echo "备份文件已压缩为:${BACKUP_DIR}/full_backup_${BACKUP_DATE}.sql.gz"
    else
        echo "备份失败,请检查配置"
        exit 1
    fi
}

# 清理7天前的旧备份
clean_old_backup() {
    echo "开始清理7天前的旧备份文件..."
    find ${BACKUP_DIR} -name "*.sql.gz" -mtime +7 -exec rm -f {} ;
    echo "旧备份清理完成"
}

# 关闭SSH隧道
close_tunnel() {
    echo "开始关闭SSH隧道..."
    pkill -f "ssh -L ${TUNNEL_ALIVE_CHECK_PORT}:127.0.0.1:3306"
    if ! check_tunnel; then
        echo "SSH隧道已关闭"
    else
        echo "SSH隧道关闭失败,请手动检查"
    fi
}

# 执行主流程
build_tunnel
do_backup
clean_old_backup
close_tunnel

echo "远程备份流程执行完成"

给脚本添加执行权限:

chmod +x /data/scripts/mysql_remote_backup.sh

手动执行脚本测试,确认备份文件正常生成:

/data/scripts/mysql_remote_backup.sh

设置自动化定时任务

通过crontab设置定时执行备份脚本,实现每天凌晨2点自动备份:

# 编辑crontab配置
crontab -e

添加以下内容:

0 2 * * * /data/scripts/mysql_remote_backup.sh >> /data/mysql_backup/backup.log 2>&1

保存后重启crontab服务让配置生效:

# CentOS/RHEL系统
systemctl restart crond
# Ubuntu/Debian系统
systemctl restart cron

可以通过以下命令查看crontab任务是否添加成功:

crontab -l

常见问题排查

问题现象可能原因解决方法
SSH隧道建立失败密钥认证未配置成功、远程SSH服务未开启、网络不通重新检查密钥配置,测试SSH登录,确认网络连通性
备份时连接MySQL失败隧道未正常建立、MySQL用户权限不足、密码错误检查隧道状态,确认MySQL用户有备份权限,核对密码
定时任务未执行crontab服务未启动、脚本路径错误、脚本无执行权限启动crontab服务,检查脚本路径和权限,查看日志排查

MySQLSSH隧道远程备份自动化脚本crontab修改时间:2026-07-01 00:30:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。