在Windows主机上定时备份远程VPS(CentOS)数据的批处理

2023年 4月 21日 22.2k 0

不过折腾 VPS 之后,就不只是要备份 MySQL 了,一些独立的站点数据也是需要备份的。 如果有靠谱的第三方 Linux 主机或类似 Amazon 的云存储,那就简单多了,Linux - Linux 的备份很方便。

不过折腾 VPS 之后,就不只是要备份 MySQL 了,一些独立的站点数据也是需要备份的。 如果有靠谱的第三方 Linux 主机或类似 Amazon 的云存储,那就简单多了,Linux - Linux 的备份很方便。 不过我想在自己的 Windows7 下每天/周运行一次备份,就有了这个小工具。 大概的想法如下: 使用 Putty 自带的 plink.exe 连接到 VPS 上,运行备份并退出登录; 接着使用 Putty 自带的 pscp.exe 将备份复制到本机; 添加一个计划任务,每天/周自动运行一次,实现定时备份。 复制代码 代码如下: Windows 下负责触发备份的 index.bat @echo off & setlocal ENABLEEXTENSIONS :: 这里只是 SSH 连接和备份路径配置信息 :: 请同时修改同目录下 linux 文件中要备份的路径和 MySQL 数据库 :: SSH 相关信息 set SERVER=192.168.1.100 set PORT=22 set USER=root set PASSWORD=password :: 和同目录下 linux 文件中配置的路径对应 set BACKUP_PATH=/root/backup :: 备份要下载到的本机位置(会自动创建) set SAVE_PATH=D:\Backup\ :: ---------- 配置结束,以下请勿修改 ---------- :: 运行时变量 set EXE_SSH=%~dp0\exe\plink.exe set EXE_SCP=%~dp0\exe\pscp.exe set LINUX=%~dp0\linux set YEAR=%date:~0,4% set MONTH=%date:~5,2% set DAY=%date:~8,2% set TRUE_PATH=%SAVE_PATH%%YEAR%-%MONTH%-%DAY%\ :: 创建备份路径 echo Creating Backup Dir... if not exist %TRUE_PATH% ( mkdir %TRUE_PATH% 2>nul ) if not exist %TRUE_PATH% ( echo Backup path: %TRUE_PATH% not exists, create dir failed. goto exit ) echo Creating Backup Dir... Done. :: 生成备份目录和文件 echo Connecting to remote server and creating backups... %EXE_SSH% -C %USER%@%SERVER% -P %PORT% -pw %PASSWORD% -m %LINUX% 2>nul echo Connecting to remote server and creating backups... Done. :: 下载备份 echo Downloading backups... %EXE_SCP% -pw %PASSWORD% -P %PORT% %USER%@%SERVER%:%BACKUP_PATH%/*.* %TRUE_PATH% echo Downloading backups... Done. :exit echo Exit 由 index.bat 调用的 Linux 端命令 复制代码 代码如下: #!/bin/bash PATH=/usr/local/sbin:/usr/bin:/bin # ---------- 配置项,不要最后的 / ---------- # 备份文件存储的路径,请与 index.bat 中的 BACKUP_PATH 保持一致 BACKUP_PATH=/root/backup # 要备份的文件或目录,多个以空格分隔 FILES="/www/cmstop /www/dbpma" # mysqldump 可执行文件的全路径(如果可以直接执行 mysqldump 可不用全路径) MYSQLDUMP=mysqldump # 要备份的 MySQL 数据库,多个以空格分隔 DATABASES="mysql test" # MySQL 用户名 USER=root # MySQL 密码 PASSWD= # ---------- 配置项结束,下面的不用修改 ---------- # 运行时变量 DATETIME=$(date -d now +%Y-%m-%d) CURPATH=$(cd "$(dirname "$0")"; pwd) # 创建备份目录 if [ ! -d $BACKUP_PATH ]; then mkdir -p $BACKUP_PATH fi rm -fR $BACKUP_PATH/* # 备份 MySQL 数据库 cd $BACKUP_PATH for database in $DATABASES do if [ "$PASSWD" == "" ]; then $MYSQLDUMP -u$USER $database > $database.$DATETIME.dump.sql else $MYSQLDUMP -u$USER -p$PASSWD $database > $database.$DATETIME.dump.sql fi tar czf $database.$DATETIME.dump.sql.tar.gz $database.$DATETIME.dump.sql rm -f $database.$DATETIME.dump.sql done # 备份文件或目录 for file in $FILES do tar czf $file.$DATETIME.tar.gz $file mv $file.$DATETIME.tar.gz $BACKUP_PATH done # 完成 cd $CURPATH exit 下载完成之后不删除服务器上产生的备份文件,因为下一次备份前会自动清除。 下载和使用 下载地址下载文件到你本机,解压到某个地方,然后根据上文的说明修改配置项; 由于 SSH 第一次登录需要添加 Key 到本机,这一步没法简单忽略,可行的办法是载入 Putty 的 Session,不过挺麻烦的,还是运行一次简单些,我们要执行一次 SSH 登录: 复制代码 代码如下: :: 切换到你解压到的目录,如 D:\VPS\: cd /d D:\VPS\ :: 根据情况修改下面的参数 exe\plink.exe -C root@192.168.1.100 -P 22 -pw password :: 等待一下,会提示是否将 Key 加入本机信任主机列表里面,输入 yes 就可以了。 yes :: 这就进去了,输入点常用命令玩玩,输入 exit 退出。 exit 根据这一篇文章的介绍,添加一个定时执行的计划任务; 手动执行一下上面添加的计划任务或观察一个执行周期,看备份是否有效。 待改进 同之前的脚本一样,似乎还缺少一个自动删除多少天前备份的功能。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论