背景:之前开发的报告整理工具使用的数据库一直没有增加自动备份,每次想起来手动去备份一下,因此想增加一个自动备份数据库的任务。
环境:MAC mysql
整个过程分为两个部分 (1)使用mysqldump 写备份数据库的shell脚本 (2)利用mac的launchctlg建立定时任务
1、编写备份脚本
脚本backup.sh#!/bin/sh
path="/Users/usrname/Desktop/dbBackUp/"
date=$(date +%Y%m%d_%H-%M-%S)
database="DB_Name"
username="root"
password="123456"
filename="$path$date.sql"
mysqldump -u$username -p$password -q $database > $filename
提权chmod 777 backup.sh
测试一下,直接运行sh脚本,即可看到备份的sql文件
2、建立launchctl任务
(1)新建plist文件
Label
com.plistname.plist
ProgramArguments
/Users/UserName/Desktop/dbBackUp/backup.sh
StartCalendarInterval
Minute
36
Hour
15
StandardOutPath
/Users/UserName/Desktop/dbBackUp/run-out.log
StandardErrorPath
/Users/UserName/Desktop/dbBackUp/run-err.log
(2)进入 ~/Library/LaunchAgents/ 目录, 将plist文件放到 ~/Library/LaunchAgents/下
(3)添加任务load -w com.plistname.plist
(4)测试任务start com.plistname.plist
如果没有报错即可看到备份出来的sql文件,如果看不到就查看run-err.log
3、整个过程中遇到的问题
(1)sh执行调用mysqldump正常,launchctl触发提示“mysqldump: command not found”
解决方法:输入 find / -name mysql,找到mysql /bin/ 下的mysqldump的绝对路径,将shell脚本内的mysqldump命令替换为mysqldump的绝对路径
(2)触发任务后,没有sql语句也没有任何日志
解决方法:开始的时候日志只写了一个path,没有写对应的xxx.log文件,然后改成了上面的xxx.log格式,再次运行就可以了
4、常用的launchctl命令launchctl load -w com.mahui.plist --添加一个任务
launchctl unload -w com.mahui.plist --删除一个任务
launchctl start com.mahui.plist --触发一个任务,无视时间
launchctl list | grep plist --展示当前的存在所有plist任务