在 macos 上配置 mysql 自动化备份需三步:确保 mysql 正常运行、编写含时间戳与自动清理的 mysqldump 脚本、用 launchd 每日凌晨 2 点定时执行。
在 macos 上配置支持自动化备份的 mysql 环境,核心是三件事:确保 mysql 正常运行、准备可执行的备份脚本、用系统级任务调度器(launchd)定期触发。不需要额外装第三方工具,macos 自带能力足够稳定可靠。
确认 MySQL 已正确安装并可访问
先验证本地 MySQL 服务状态和连接权限:
- 终端执行
mysql --version确认命令可用;若提示 command not found,需补环境变量:echo 'export PATH="/usr/local/mysql/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc - 检查服务是否运行:
brew services list | grep mysql(Homebrew 安装)或查看系统偏好设置里的 MySQL 图标是否显示 “Running” - 测试登录:
mysql -u root -p,输入密码后能进入mysql>提示符即表示基础连通正常
编写轻量级自动备份脚本
备份逻辑建议采用 mysqldump 全库导出 + 时间戳命名 + 自动清理旧备份(保留最近 7 天),存放在统一目录如 ~/mysql_backups:
- 新建脚本文件:
mkdir -p ~/mysql_backups && touch ~/mysql_backups/backup.sh - 编辑内容(替换
your_root_password为实际密码):
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$HOME/mysql_backups"
DB_NAME="your_database_name" # 可填具体库名,或留空备份所有库
USER="root"
PASS="your_root_password"
if [ -z "$DB_NAME" ]; then
mysqldump -u $USER -p$PASS --all-databases --single-transaction > "$BACKUP_DIR/full_$DATE.sql"
else
mysqldump -u $USER -p$PASS --single-transaction "$DB_NAME" > "$BACKUP_DIR/$DB_NAME\_$DATE.sql"
fi
# 删除 7 天前的备份
find "$BACKUP_DIR" -name "*.sql" -mtime +7 -delete
- 赋予执行权限:
chmod +x ~/mysql_backups/backup.sh - 手动运行一次测试:
~/mysql_backups/backup.sh,确认生成 .sql 文件且无报错
用 launchd 设置定时任务
macOS 推荐用 launchd 替代 cron,更兼容系统休眠与唤醒场景:
- 创建 plist 文件:
vim ~/Library/LaunchAgents/com.mysql.backup.plist - 填入以下内容(每天凌晨 2:00 执行):
- 将
your_username替换为你 macOS 的实际用户名(whoami查看) - 加载任务:
launchctl load ~/Library/LaunchAgents/com.mysql.backup.plist - 立即启用(不等凌晨):
launchctl start com.mysql.backup - 查看日志确认运行:
log show --predicate 'subsystem == "com.mysql.backup"' --last 1h
可选:添加简单校验与通知机制
增强可靠性,可在备份脚本末尾追加几行:
- 检查刚生成的 SQL 文件是否非空:
if [ ! -s "$BACKUP_DIR/...$DATE.sql" ]; then echo "Backup failed!" | mail -s "MySQL Backup Alert" your@email.com; exit 1; fi - 如未配置邮件,改用本地弹窗提示(需允许终端访问辅助功能):
osascript -e 'display notification "MySQL backup completed" with title "Backup Done"' - 备份后压缩归档(节省空间):
gzip "$BACKUP_DIR/*.sql"











