【数据库】MAC 使用mysqldump 和 launchctl 定时备份Mysql数据库

背景:之前开发的报告整理工具使用的数据库一直没有增加自动备份,每次想起来手动去备份一下,因此想增加一个自动备份数据库的任务。

环境: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任务

你可能感兴趣的:(【数据库】MAC 使用mysqldump 和 launchctl 定时备份Mysql数据库)