场景
Windows服务器,需要同步其他数据库的指定表的数据到自己的数据库。
通过PowerShell脚本的方式在Windows的任务计划程序中添加一个任务计划。
并在任务计划中间隔一定的时间执行某些命令。
在命令中,打开cmd,借助mysqldump将数据库进行备份到sql。
然后再使用mysql的命令将sql导入到数据库中。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
首先新建一个后缀名为ps1的文件,然后修改内容为
## 添加计划
$job_name="sync_data"
Unregister-ScheduledJob -Name $job_name -Force
Register-ScheduledJob -Name $job_name -ScriptBlock {
start-process -FilePath 'cmd.exe' -ArgumentList ' /c "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump" -h 127.0.0.1 -P 3306 -uroot -p123456 --databases badao --tables user > D:\bak.sql'
Start-Sleep -s 30
start-process -FilePath 'cmd.exe' -ArgumentList ' /c cd C:\Program Files\MySQL\MySQL Server 5.6\bin & mysql -uroot -p123456 -e "create database if not exists badao "'
start-process -FilePath 'cmd.exe' -ArgumentList ' /c cd C:\Program Files\MySQL\MySQL Server 5.6\bin & mysql -uroot -p123456 --database badao < D:\bak.sql'
}
### 创建触发器
$job_trigger=New-JobTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval '00:03:00' -RepetitionDuration ([System.TimeSpan]::MaxValue)
### 添加触发器到计划
$job=Get-ScheduledJob -Name $job_name
$job | Add-JobTrigger -Trigger $job_trigger
### 启用
$job | Enable-ScheduledJob
上面脚本参数说明:
$job_name
计划名字变量
Unregister-ScheduledJob -Name $job_name -Force
删除任务名字的计划任务
第一次是没有这个任务的,但是再运行一次就会有了,根据自己需要决定是否加这句
Register-ScheduledJob -Name $job_name -ScriptBlock
注册以任务名字的计划任务脚本块
$job_trigger
创建触发器
-RepetitionInterval
重复间隔
-RepetitionDuration
重复间隔
-RepetitionDuration
持续时间
([System.TimeSpan]::MaxValue)
无限长时间
$job | Add-JobTrigger -Trigger $job_trigger
添加触发器到计划
$job | Enable-ScheduledJob
启用计划
以上是Power Shell脚本的相关参数说明。
主要是在Windows的任务计划程序中添加一个任务并让其在制定的间隔内一直执行某些cmd命令
cmd命令参数说明:
start-process -FilePath ‘cmd.exe’
启用cmd窗口
-ArgumentList
后面接执行命令
Start-Sleep -s
休眠30S
为了防止导出sql执行不完,这个时间具体根据数据量的大小去决定
在cmd中利用myqldump和mysql的命令执行备份数据库和还原数据库的操作
msyql参数说明:
mysqldump
Mysql备份工具
–databases
后面接数据库名称
–tables
后面接表名称(多个表用空格隔开)
> D:\bak.sql
输出至D盘下名字为bak.sql文件
create database if not exists badao
如果没有该数据库就创建
–database badao < D:\bak.sql’
将该文件恢复至指定数据库中
注意:如果配置了环境变量的话可以直接调用此命令。
不然的话可以通过给全路径添加引号的方式去执行
“C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump”
外面是单引号,则里面是双引号。
或者执行两个命令,先cd到mysqldump所在的目录
‘ /c cd C:\Program Files\MySQL\MySQL Server 5.6\bin & mysql -uroot -p123456 -e “create database if not exists badao “‘
通过使用&来连接两个要执行的命令。
然后这个路径根据自己的mysqldump.exe和mysql.exe所在的目录去决定
运行脚本
以上脚本里面执行的cmd命令为了验证其效果,可以将每个cmd所需要执行的命令
在cmd中单独执行下进行测试,看看有没有依次导出了sql,能不能将sql进行还原到数据库。
然后
-RepetitionInterval ’00:03:00′ -RepetitionDuration ([System.TimeSpan]::MaxValue)
这个代表每三分钟执行一次,持续时间无限长,即一直执行。
在测试的时候可以修改时间进行测试。
比如将后面的持续时间为
-RepetitionInterval ’00:03:00′ -RepetitionDuration ’00:09:00′
那么就会三分钟执行一次,一直到九分钟。
在Windows中使用管理员打开PowerShell
然后进入到该脚本所在的目录
首先更改执行策略
set-executionpolicy remotesigned
不然的话直接执行脚本会报错
无法加载文件 某.ps1,因为在此系统上禁止运行脚本。
执行上面的更改执行策略后,输入Yes
然后直接
./taskSyncData.ps1
后面跟的是脚本名
然后打开电脑的任务计划程序库,并找到
\Microsoft\Windows\PowerShell\ScheduledJobs
就可以看到新增了一个任务计划
然后等一段时间就可以验证在执行的目录下是不是生成了sql文件。
并且修改一个数据库数据和结构,另一个数据库是不是也会同步过去。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136311.html