【运维 | Docker】服务器备份数据库到电脑

发布于:2022-10-28 ⋅ 阅读:(447) ⋅ 点赞:(0)

服务器备份数据库到电脑

有个需求,无多台服务器做容灾,需要实现自动化备份数据库到Win本地

思路:

  • linux:定时备份脚本,会暴露数据库密码,压缩加密密码,需要加密

  • win: 定时bat脚本,会暴露服务器密码,需要加密

准备:

1. 下载Putty

Putty下载
搜索一圈过后,觉得Putty适合本次需求,主要作用是与服务器通信,原因:无法直接通过bat脚本与服务器通信并传输数据

2. Linux备份脚本

#!/bin/bash
find /home/Backup/ -mtime +9 -name "*.zip" -delete && docker exec support_db_1 sh -c 'exec mysqldump --all-databases -u root -p root --all-databases' > /home/Backup/bcksql_`date +\%F-%H-%M`.sql
# zip加密
zip  -P 123456 -m /home/Backup/Back_`date +\%F`.zip /home/Backup/*.sql 

find /home/Backup/ -mtime +9 -name "*.zip" -delete 删除创建超过10天的zip备份文件

docker exec support_db_1 sh -c ‘exec mysqldump --all-databases -u root -p root --all-databases’ > /home/Backup/bcksql_`date +%F-%H-%M`.sql

  • support_db_1 :DB容器的名字或ID

  • -u root -p root : 数据库的用户名和密码

  • /home/Backup/bcksql_`date +%F-%H-%M`.sql
    注意backsql_后的 `
    是一定要有的,相当于标识后面的是一个变量
    将备份的文件保存到/home/Backup/bcksql_+日期.sql

  • zip -P 123456 -m /home/Backup/Back_`date +%F`.zip /home/Backup/*.sql
    使用密码123456 压缩/home/Backup/所有SQL文件 到 /home/Backup/Back_+日期.zip 并删除源文件

3. bat定时备份脚本



@echo off
cd /d D:\putty
set currenttime=%date:~0,4%-%date:~5,2%-%date:~8,2%
echo %currenttime%
pscp -P 端口 -pw 密码 root@服务器ip:需要备份的文件路径 存放到本地的路径
Pause

cd /d D:\putty 此命令是进入你存放Putty程序的路径,因为需要借助它,第一个是盘符,第二个是路径

set currenttime=%date:~0,4%-%date:~5,2%-%date:~8,2% 这是设置一个变量,获取今天日期信息,才知道是哪天备份的,这句获取格式的是2022-10-18,有其他需求可以去学习一下其他的用法

pscp 这整句是配置链接信息,服务器需要备份的文件及本地备份路径

Pause 让执行窗口停留

加密:

1.Linux脚本加密

我们借助SHC来进行加密,解密的方法要在运行时,脚本被加载到内存中才能被解密,应当可以防止一部分人轻松解密

  • 创建sh脚本
vim back.sh #创建一个sh脚本
# 粘贴上面写好的脚本
  • 安装SHC

SHC加密程序使用参数:

-e date (指定过期时间)
-m message (指定过期提示的信息)
-f script_name (指定要编译的shell路径)
-r relax security (在不同操作系统执行)
-v Verbose compilation (输出编译的详细情况)

yum install shc # 安装shc
shc -v -f back.sh # 加密脚本

运行后会生成两个文件,back.x 和 back.x.c
back.x是加密后的可执行的二进制文件
back.x.c是生成back.x的原文件(c语言)

  • 运行脚本
./back.sh.x 

然后删除源back.sh

2.bat脚本加密

两种方式:

  • 1.添加标识符

    将以下代码保存为bat文件,双击运行即可,根据提示,输入所要加密文件的绝对路径回车即可。
    加密完成后,会在这个加密bat文件目录生成encrypt.bat文件,这个文件就是加密后的文件。

    @echo off 
    cls 
    color 2a 
    :start 
    cls 
    echo ******************************************************************************* 
    echo * * 
    echo * BAT 加 密 * 
    echo * * 
    echo ******************************************************************************* 
    echo. 
    echo. 
    echo. 
    echo ★ 可以一次性成功加密任何批处理文件, 更省事. 
    echo. 
    echo ★ 可以由您输入任意需要加密的批处理, 加密灵活性更大. 
    echo. 
    echo ★ 能够自动判断错误输入, 更加人性化. 
    echo. 
    echo 说明: 在下面输入需要加密的批处理文件, 直接输入批处理文件名为加密当前目录下的BAT,也可以带路径指定任意BAT. 当前目录下生成的encrypt.bat文件即为加密的批处理. 
    echo. 
    echo. 
    echo. 
    set /p file=请输入需要加密的批处理后按回车键(q=退出): 
    if "%file%"=="q" goto quit 
    echo %file%|findstr /i "\.bat$">nul && goto go 
    echo %file%|findstr /i "\.cmd$">nul && goto go 
    cls 
    echo ============== 
    echo 请正确输入! 
    echo ============== 
    echo. 
    echo. 
    echo 按任意键重新输入...... 
    pause>nul 
    goto start 
    :go 
    if not exist "%file%" goto newly 
    if exist encrypt.bat copy encrypt.bat encryptbak.bat 
    echo %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a >"%tmp%\encrypt.tmp" 
    echo cls>>"%tmp%\encrypt.tmp" 
    type "%file%">>"%tmp%\encrypt.tmp" 
    setlocal enabledelayedexpansion 
    for %%i in ("%tmp%\encrypt.tmp") do ( 
    echo %%~zi >nul 2>nul 
    set size=%%~zi 
    set num=!size:~-1! 
    set /a mod=!num!%%2 
    if !mod! equ 0 (goto even) else (goto odd) 
    ) 
    :even 
    copy "%tmp%\encrypt.tmp" encrypt.bat 
    del "%tmp%\encrypt.tmp" 
    cls 
    echo ========================== 
    echo 完成批处理加密^_^! 
    echo ========================== 
    echo. 
    echo. 
    echo 按任意键退出...... 
    pause>nul 
    goto quit 
    :odd 
    echo. >>"%tmp%\encrypt.tmp" 
    copy "%tmp%\encrypt.tmp" encrypt.bat 
    del "%tmp%\encrypt.tmp" 
    cls 
    echo ========================== 
    echo 恭喜你, 批处理加密成功^^! 
    echo ========================== 
    echo. 
    echo. 
    echo 按任意键退出...... 
    pause>nul 
    goto quit 
    :newly 
    cls 
    echo ================================ 
    echo 找不到批处理文件, 请重新输入! 
    echo ================================ 
    echo. 
    echo. 
    echo 按任意键开始...... 
    pause>nul 
    goto start 
    :quit 
    exit
    

    将以下代码保存为bat文件,双击运行即可,根据提示,输入所要加密文件的绝对路径回车即可。
    解密完成后,会在这个加密bat文件目录生成解密后的文件:

    @echo off 
    mode con: cols=80 lines=25 
    :index 
    color 27 
    cls 
    echo ╭──────────── ──╮ 
    echo │ │ 
    echo ╭─────────┤ BAT 解 密 工 具 ├─────────╮ 
    echo │ │ │ │ 
    echo │ ╰────────── ────╯ │ 
    echo │ │ 
    echo │ │ 
    echo │ 本工具用来对混淆文本编码类型的加密批处理进行解密! │ 
    echo │ │ 
    echo │ 在下面填入需要解密的批处理按回车键即可. │ 
    echo │ │ 
    echo │ 建议直接把待解密的批处理文件拖曳至本窗口释放. │ 
    echo │ │ 
    echo │ 解密成功后会在本程序目录下生成"new_待解密文件名.文件后缀名" │ 
    echo │ 格式的文件. │ 
    echo │ │ 
    echo │ 注意: 如果本目录下存在"new_待解密文件名.文件后缀名"的文件, │ 
    echo │ 将会被替换. │ 
    echo │ │ 
    echo │ │ 
    echo ╰─── ─────────────────────────────╯ 
    echo. 
    set route=%cd% 
    set ravel= 
    set /p ravel= 请输入要解密的批处理: 
    set "ravel=%ravel:"=%" 
    if /i "%ravel:~-4%"==".bat" if exist "%ravel%" goto go 
    if /i "%ravel:~-4%"==".cmd" if exist "%ravel%" goto go 
    cls 
    echo ╭──────────╮ 
    echo ╭─────────┤ 文 件 错 误 ├────────╮ 
    echo │ ╰──────────╯ │ 
    echo │ │ 
    echo │ 指定文件不存在或文件不是批处理类型! │ 
    echo │ │ 
    echo │ 按任意键重新输入... │ 
    echo │ │ 
    echo ╰───────────────── ───────────╯ 
    echo. 
    echo. 
    echo 按任意键重新输入... 
    pause >nul 
    goto index 
    
    :go 
    for /f "tokens=*" %%c in ("%ravel%") do ( 
    cd /d "%%~dpc" 
    if exist "%route%\new_%%~nxc" attrib -s -h -r -a "%route%\new_%%~nxc" 
    echo author:pengfei@www.cn-dos.net>"%route%\new_%%~nxc" 
    for /f "tokens=*" %%i in (%%~nxc) do ( 
    echo %%i>>"%route%\new_%%~nxc" 
    ) 
    ) 
    cls 
    echo ╭──────────╮ 
    echo ╭─────────┤ 解 密 成 功 ├────────╮ 
    echo │ ╰──────────╯ │ 
    echo │ │ 
    echo │ 恭喜, 批处理解密成功! │ 
    echo │ │ 
    echo ╰──────────────────── ────────╯ 
    echo. 
    echo. 
    echo 按任意键退出... 
    pause >nul 
    exit
    
  • 2.改进制编码

    下载一个16进制编辑软件,比如MiniHex。
    将要加密的bat文件开头加入两个空行,并拖入到MiniHex软件中

    将前四个字符改为FF FE

    Ctrl + S 保存即可

推荐第二种方式,第一种方式加密后能通过word打开看到原本信息

设置定时任务:

1.Linux

# 安装crontab
yum -y install vixie-cron
yum -y install crontabs
systemctl enable crond.service # 设置开机自启
systemctl is-enabled crond.service #是否开机自启

输入crontab -e 添加定时任务,将你加密得到的可执行文件设置定时执行,需要输入完整路径

0 20  * * *  /home/back.sh.x # 每晚8点执行

2.Windows

仅以Win10为例,其他请自行查找

点击放大镜 搜索 任务计划程序

点击 右边的创建任务

  • 设置要执行的脚本
    在这里插入图片描述

  • 设置触发事件,高级设置按个人所需,注意bat脚本的执行时间要后于服务器备份的时间
    在这里插入图片描述

  • 设置任务名称,以及是否用管理员权限执行,按需选择

在这里插入图片描述

至此,本文结束

参考链接:

bat脚本加密

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到