【脚本分享】- Windows下利用Powershell进行MySQL数据库备份

 关注「WeiyiGeek」公众号

将我设为「特别关注」,每天带你玩转网络安全运维、应用开发、物联网IOT学习!

f8b46d6a1fd33efc465640ede6554844.png


测试环境: Server 2008 R2

所需软件:

- MySQLdump.exe  
 - msvcp120.dll  x64/x86
 - msvcr120.dll  x64/x86
 - powershell
 - 7z

设置PowerShell策略:

PS C:\Users\Administrator> Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine

执行策略更改
执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies
帮助主题中所述的安全风险。是否要更改执行策略?
[Y] 是(Y)  [N] 否(N)  [S] 挂起(S)  [?] 帮助 (默认值为“Y”): Y

注册 mysqldump 依赖的dll

regsvr32 msvcr120.dll
regsvr32 msvcp120.dll

数据库相关信息查看:

# 1.版本
SELECT @@version;

# 2.指定数据库的表与表数据行统计查看
select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = 'authcenter' order by table_rows desc;

备份脚本:

# ------------------------------- #
# Author:WeiyiGeek                #
# PS: 数据库备份 & 应用备份         #
# Create: 2020年6月11日 21:34:40   #
# ------------------------------- #    

# ----------------------------------------------------------------- #
# 全局变量
$GD=Get-Date
$TIME=$GD.ToString('yyyy-MM-dd_HHmmss')
$DATE=$GD.ToString('yyyy-MM-dd')
$global:BACKUP_SQLFILE = ""

# MySQL 备份程序
$MYSQL_DUMP="D:\mysql\bin\mysqldump.exe"

# 压缩SQL文件
$7Zfile = "C:\7-Zip\7z.exe"
$7ZPASS = "WwW.WeiyiGeek.top"

# 指定备份文件存放目录
$BACKUP_DIR = "D:/mysql/SQL-${DATE}"
$BACKUP_7ZDIR = "D:/mysql/7Z-${DATE}"

# FTP 上传
$FTP_IP = "192.168.12.31"
$FTP_PORT = "21212"
$FTP_USER = "User"
$FTP_PASS = "Pass"

# ----------------------------------------------------------------- #

# 验证备份文件夹是否创建
$FLAG=Test-Path -Path "$BACKUP_DIR"
if (!$FLAG ){
  #New-Item -ItemType Directory -Path $BACKUP_DIR/ -Force
  mkdir "$BACKUP_DIR"
} 

# MySQL数据库备份链接
function dumpMysql {
  param (
    [string] $APP_HOST="",
    [string] $APP_DBNAME="",
    [string] $APP_DBU="",
    [string] $APP_DBP="",
    [int] $APP_PORT=3306
  )

 if([String]::IsNullOrEmpty($APP_HOST) -or [String]::IsNullOrEmpty($APP_DBNAME) -or [String]::IsNullOrEmpty($APP_DBU) -or [String]::IsNullOrEmpty($APP_DBP)){
  Write-Host "# 备份 $APP_DBNAME 数据库错误 "  -ForegroundColor red
  [Environment]::Exit(127)
  } else {
  Write-Host "# 正在备份 $APP_DBNAME 数据库 "  -ForegroundColor Green
  $global:BACKUP_SQLFILE = "${APP_DBNAME}_${TIME}.sql"
  Invoke-Expression "${MYSQL_DUMP} -h $APP_HOST -P $APP_PORT --default-character-set=UTF8 -u$APP_DBU -p$APP_DBP -B --databases $APP_DBNAME --hex-blob --result-file=$BACKUP_DIR/$BACKUP_SQLFILE"
 }
}

# 7Z 压缩SQL文件
function Compress7Z {
	# 判断压缩备份目录是否存在
    $flag = Test-Path -Path "${BACKUP_7ZDIR}"
    if (!$flag){
        Write-Host "正在建立 $Dstdir 备份目录 " -ForegroundColor Green
        New-Item -ItemType Directory -Path $BACKUP_7ZDIR -Force
    }
    Start-Process -FilePath $7Zfile -ArgumentList "a -p${7ZPASS} ${BACKUP_7ZDIR}\${BACKUP_SQLFILE}.7z $BACKUP_DIR\*_${TIME}.sql" -WindowStyle hidden
}

# 备份文件上传方式
function uploadBack {
  param (
    [string] $FLAG=""
  )
  
  # ftp 方式
  if ( $FLAG -eq "ftp" ){
    "open ${FTP_IP} ${FTP_PORT}" | Out-File ftp.tmp
    "${FTP_USER}" | Out-File -Append ftp.tmp
    "${FTP_PASS}" | Out-File -Append ftp.tmp
    "bin" | Out-File -Append ftp.tmp
    "mkdir ${DATE}" | Out-File -Append ftp.tmp
    "cd ${DATE}" | Out-File -Append ftp.tmp
    "put ${BACKUP_7ZDIR}\${BACKUP_SQLFILE}.7z" | Out-File -Append ftp.tmp
    "quit" | Out-File -Append ftp.tmp
    Start-Process ftp -ArgumentList "-i -s:ftp.tmp"
    Remove-Item -Path ftp.tmp
  }
}

# 调用MysqlDump函数执行下载(指定数据库拉取)
dumpMysql -APP_HOST 127.0.0.1 -APP_PORT 8066 -APP_DBNAME "AuthCenterschema" -APP_DBU "root" -APP_DBP "123456"
# 调用压缩
Compress7Z
# 调用上传
uploadBack -FLAG "ftp"
 
#Write-Host "# 正在输出备份数据库路径: $BACKUP_DIR"  -ForegroundColor Green
#Get-ChildItem $BACKUP_DIR\*.sql 
#Write-Host "# 正在输出压缩文件备份数据库路径: ${BACKUP_7ZDIR}"  -ForegroundColor Green
#Get-ChildItem ${BACKUP_7ZDIR}\*.7z

exit

定时任务设置:

# 每周5的一点进行备份同步(不管用户是否登陆)
schtasks /create /TN mysql-backup  /SC WEEKLY  /D FRI /ST 01:00 /TR "powershell.exe d:\mysql\backup.ps1" /NP

1eaad58451cb00811f532e1c2ce84214.png

备份测试:

9aaf0901df47373f5d48beeea1ba4c9c.png


欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】或者个人公众号【WeiyiGeek】联系我。

更多文章来源于【WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

个人主页: 【 https://weiyigeek.top】

博客地址: 【 https://blog.weiyigeek.top 】

专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!。

  • echo  "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

  • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

  • fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")  

  • console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

  • System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")

  • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;

20b1650b17407eabda87d53ebc8bf0c4.png 往期相关文章ef00b44786830b681f1266c456e48607.png

1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

2.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(下)

2.Jenkins入门基础使用与Gitlab持续化集成部署

8.Jenkins进阶之流水线pipeline基础使用实践(1)

9.Jenkins进阶之流水线pipeline基础使用实践(2)

11.Jenkins进阶之kubernetes集群搭建分布式架构基础环境

13.Jenkins进阶之自定义工作节点jnlp容器模板(附DockerFile)更新相关软件下载

12ea5198761b2ce464c2f40fc71ea98c.png

b22ca651ddb63694df5e01ea59b126a2.gif

更多网络安全、系统运维、应用开发、全栈文章,尽在【个人博客 - https://blog.weiyigeek.top】站点,谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈工程师修炼指南

原创不易,赞赏鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值