当前位置:  数据库>mysql

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

    来源: 互联网  发布时间:2014-10-04

    本文导语:  不过折腾 VPS 之后,就不只是要备份 MySQL 了,一些独立的站点数据也是需要备份的。 如果有靠谱的第三方 Linux 主机或类似 Amazon 的云存储,那就简单多了,Linux - Linux 的备份很方便。 不过我想在自己的 Windows7 下每天/周运行一...

不过折腾 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=%~dp0exeplink.exe
set EXE_SCP=%~dp0exepscp.exe
set LINUX=%~dp0linux

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

:: 根据情况修改下面的参数
exeplink.exe -C root@192.168.1.100 -P 22 -pw password

:: 等待一下,会提示是否将 Key 加入本机信任主机列表里面,输入 yes 就可以了。
yes

:: 这就进去了,输入点常用命令玩玩,输入 exit 退出。
exit

根据这一篇文章的介绍,添加一个定时执行的计划任务;
手动执行一下上面添加的计划任务或观察一个执行周期,看备份是否有效。
待改进
同之前的脚本一样,似乎还缺少一个自动删除多少天前备份的功能。

    
 
 

您可能感兴趣的文章:

  • 我是想写批处理文件将一个文件myfile自动拷到用户的 windowssystem 下,但不知用户的windows在c: 还是其他盘,我改怎做???
  • 从windows连ftp到unix做批处理的问题???/
  • Linux下的批处理文件是否和Windows下的写法相同呀?
  • Windows系统下,Cygwin.bat批处理文件怎么添加并执行其他命令?
  • 编写shell脚本执行远端windows的批处理
  • linux双击进入某目录怎么写类似windows下的批处理(准确该叫launcher)
  • 请问各位高手,怎么样在windows上通过批处理脚步启动solaris上的编译器,实现自动编译?(solaris通过telnet登陆)?
  • Windows下实现MySQL自动备份的批处理(复制目录或mysqldump备份)
  • 大家备份windows98用ghost 估计就用得很多了, 请问linux可不可以ghost 备份? 还有linux 的资源管理器在哪里? 我想打开我原来的硬盘F
  • 备份Windows设备驱动 Driver Magician Lite
  • c/c++ iis7站长之家
  • 怎么将windows的文件夹备份到linux上
  • python在windows下实现备份程序实例
  • 利用windows任务计划实现oracle的定期备份
  • 把linux下的一个文件夹备份到另外一台windows系统的机器上
  • Windows服务器下MySql数据库单向主从备份详细实现步骤分享
  • windows环境下mysql数据库的主从同步备份步骤(单向同步)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我在windows下telnet到linux主机,想得到linux主机的一个文件该怎么办?
  • 在linux下,如何访问另一台linux主机?如何访问windows主机?
  • ★如何在WINDOWS系统中 PING UNIX主机名★
  • 如何从Kubuntu虚拟机远程登录到windows主机
  • Linux系统下如何使用windows主机的代理服务器上网?
  • 同一主机windows和linux文件传输
  • [Fedora] 使用Xmanger来实现在windows下通过远程桌面来访问linux主机的方法
  • 虚拟机上安装的redhat 怎么和主机windows共享文件夹
  • 如何实现虚拟客户机linux系统与主机Windows的文件共享或互访?
  • 怎么看某一主机的某一端口是否工作正常,用什么命令?(windows,linux上均适合的)
  • 请问如何在WINDOWS下解压UNIX主机compress压缩后的.Z文件?有命令行工具吗?
  • 请问用什么命令可以将远端主机(linux)上的二进制文件down到本地(windows)
  • 高分求教:windows网上邻居下无法找到linux主机
  • 请问vmware下安装linux后,如何访问windows的host主机?
  • 用SSH FOR WINDOWS的软件在局域网可以登陆LINUX主机吗?
  • linux客户机如何共享windows主机上网
  • 怎么实现windows xp主机和vm-linux虚拟机之间 的文件共享?来者 给分!
  • 什么是WebsitePanel(基于windows虚拟主机管理系统)
  • windows xp主机和vm-linux虚拟机之间 的文件共享
  • java命名空间java.awt.event类keyevent的类成员方法: vk_windows定义及介绍
  • 怎么在Linux下改windows系统文件啊,我把windows的BOOT.INI改了,windows启动不了
  • WinDows8最新版文件夹加密
  • x-windows如何安装在linux(rdehat9)上面呢,是不是x-windows也分windows和linux版本的吗?
  • 修改Windows硬盘分区名称
  • linux和windows串口问题!?linux向windows端发送,第一次write正常,继续write,windows接收到的就变成乱码了,这是什么原因??????
  • windows10玩游戏怎么样?唯一支持DirectX 12的windows
  • 装了Linux和Windows,怎样默认进入Windows
  • windows/windows 7/windows 8 下打开查看、修改及保存超大(GB级)文本文件及其它类型文件的工具-PilotEdit
  • Linux与windows共存时,如何将Windows设置为默认启动系统?
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 怎样是编好的java application在windows上像windows应用程序一样直接运行


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3