经过几次修改后目前自动备份数据库脚本内的日备份、周备份均成功实现,马上进入1月份了,很快就可以验证月备份脚本的可行性,同时还可以验证备份数据的可靠性到底如何。
这几天每天早上到公司后我都要检查一下几个保存备份文件的目录详情,通过时间、大小来判断是否进行了备份,但感觉比较麻烦,所以琢磨有什么方法可以直接弹出一个提示给我,同时这个提示还是在我物理机的windows上面,这样更方便、快捷。
自动备份部分就不说了,可以点这个连接自己看一下。
数据库自动备份文章请点这里
有了想法之后就是实践,通过shell脚本以及crond服务尝试运行,具体详情如下:
win弹窗提示脚本:
日备份提示脚本:
vim /shell/db-day-win.sh
#!/usr/bin/expect
set timeout 30
set host "192.168.82.58"
set username "administrator"
set password "123"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
expect "*Administrator*" {send "cmd\r"}
expect "*Administrator*" {send "msg /server:$host * 已完成昨日MySQL数据库备份\r"}
expect "*Administrator*" {send "exit\r"}
expect "*Administrator*" {send "exit\r"}
expect "*Administrator*" {send "exit\r"}
周备份提示脚本:
vim /shell/db-week-win.sh
#!/usr/bin/expect
set timeout 30
set host "192.168.82.58"
set username "administrator"
set password "123"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
expect "*Administrator*" {send "cmd\r"}
expect "*Administrator*" {send "msg /server:$host * 已完成上周MySQL数据库备份\r"}
expect "*Administrator*" {send "exit\r"}
expect "*Administrator*" {send "exit\r"}
expect "*Administrator*" {send "exit\r"}
月备份提示脚本:
vim /shell/db-month-win.sh
#!/usr/bin/expect
set timeout 30
set host "192.168.82.58"
set username "administrator"
set password "123"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
expect "*Administrator*" {send "cmd\r"}
expect "*Administrator*" {send "msg /server:$host * 已完成上月MySQL数据库备份\r"}
expect "*Administrator*" {send "exit\r"}
expect "*Administrator*" {send "exit\r"}
expect "*Administrator*" {send "exit\r"}
计划任务自动执行:
vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
59 23 * * * root /shell/db-day.sh && /shell/db-day-win.sh
0 2 * * 1 root /shell/db-week.sh && /shell/db-week-win.sh
0 4 1 * * root /shell/db-month.sh && /shell/db-month-win.sh
重启验证crond服务:
systemctl restart crond.service
systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2019-12-30 11:59:38 CST; 13s ago
Main PID: 55922 (crond)
Tasks: 1
CGroup: /system.slice/crond.service
└─55922 /usr/sbin/crond -n
12月 30 11:59:38 test_server systemd[1]: Started Command Scheduler.
12月 30 11:59:38 test_server systemd[1]: Starting Command Scheduler...
12月 30 11:59:38 test_server crond[55922]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 64% if used.)
12月 30 11:59:38 test_server crond[55922]: (CRON) INFO (running with inotify support)
12月 30 11:59:38 test_server crond[55922]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
等待1月1日总体验证结果。
#####################################################################################
闲来无视测试了一下弹窗脚本,发现一个问题,不知道是不是因为换了工位导致的。
更换工位后将原有的虚拟机文件拷贝过来启动,执行了一下弹窗脚本,发现脚本运行到msg命令执行的哪一行就卡住了,除非强行中断,否则会一直卡在哪里不动,尝试着增增减减也没有任何效果。
但通过手动去一条一条执行的话,是非常顺利了,纠结了好久对比脚本和手动输入的内容,最终我才发现区别,脚本里面弹窗提示内的内容是中文的,而我手动执行时因为偷懒,直接用英文字符代替。
发现这个区别之后我果断的将脚本里面的内容进行了修改,再次尝试运行脚本后,成功,脚本内容区别不大,但还是发出来吧,如下:
日备份Windows弹窗提示脚本:
vim /shell/db-day-win.sh
#!/usr/bin/expect;/bin/bash
set timeout 30
set host "192.168.104.223"
set username "administrator"
set password "123"
spawn ssh $username@$host
#expect "*(yes/no)?*" {send "yes\r"}
expect "*password*" {send "$password\r"}
expect "*Administrator*" {send "msg /server:$host * Yesterday's database backup has been completed.\r"}
expect "*Administrator*" {send "exit\r"}
expect eof
周备份Windows弹窗提示脚本:
vim db-week-win.sh
#!/usr/bin/expect
set timeout 30
set host "192.168.104.223"
set username "administrator"
set password "123"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
expect "*Administrator*" {send "cmd\r"}
expect "*Administrator*" {send "msg /server:$host * Last week's database backup is complete.\r"}
expect "*Administrator*" {send "exit\r"}
expect eof
月备份Windows弹窗提示脚本:
vim db-month-win.sh
#!/usr/bin/expect
set timeout 30
set host "192.168.104.223"
set username "administrator"
set password "123"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
expect "*Administrator*" {send "cmd\r"}
expect "*Administrator*" {send "msg /server:$host * The database backup for the previous month has been completed.\r"}
expect "*Administrator*" {send "exit\r"}
expect eof