背景:之前开发的报告整理工具使用的数据库一直没有增加自动备份,每次想起来手动去备份一下,因此想增加一个自动备份数据库的任务。
环境: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文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.plistname.plist</string>
<key>ProgramArguments</key>
<array>
<string>/Users/UserName/Desktop/dbBackUp/backup.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>36</integer>
<key>Hour</key>
<integer>15</integer>
</dict>
<key>StandardOutPath</key>
<string>/Users/UserName/Desktop/dbBackUp/run-out.log</string>
<key>StandardErrorPath</key>
<string>/Users/UserName/Desktop/dbBackUp/run-err.log</string>
</dict>
</plist>
(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任务