在 macos 中配置 mysql 自动化定期备份,需分离数据挂载与备份任务:先创建 conf/、datas/、logs/ 挂载目录并启动容器,再用 automysqlbackup 脚本配合 launchd 定时执行备份到独立路径。
在 macos 中配置支持自动化定期备份的 mysql 数据库挂载卷,核心是把数据持久化和备份策略分离设计:挂载卷负责稳定存数据,备份任务独立运行、定时触发。不能依赖挂载卷自身“自动备份”,而要靠外部工具+计划任务来实现可靠、可追溯的定期备份。
一、创建结构清晰的挂载目录
MySQL 容器需挂载三个关键路径:配置文件、数据文件、日志文件。建议统一放在用户主目录下,便于管理且避免权限问题:
- 执行命令创建目录结构:
mkdir -p ~/mysql-mount/{conf,datas,logs} -
conf/:存放自定义my.cnf(启用log-bin、server-id等主从或备份必需参数) -
datas/:MySQL 实际存储数据库文件的位置,容器重启后数据不丢失 -
logs/:用于记录错误日志、慢查询日志等,方便排查备份失败原因
二、启动带挂载的 MySQL 容器
使用 docker run 启动时明确绑定上述目录,并开启二进制日志(为后续增量备份或主从同步留余地):
- 示例命令:
docker run -d \<br> -p 3306:3306 \<br> --name mysql-backup \<br> -v ~/mysql-mount/conf:/etc/mysql/conf.d \<br> -v ~/mysql-mount/datas:/var/lib/mysql \<br> -v ~/mysql-mount/logs:/var/log/mysql \<br> -e MYSQL_ROOT_PASSWORD=your_secure_password \<br> mysql:8.0
- 确认容器运行:
docker ps | grep mysql-backup - 进入容器验证挂载是否生效:
docker exec -it mysql-backup ls /var/lib/mysql应看到数据库子目录(如mysql、sys)
三、配置轻量级自动备份脚本(推荐 AutoMySQLBackup)
挂载卷本身不提供备份能力,需额外部署备份逻辑。AutoMySQLBackup 是专为 MySQL 设计的成熟 Shell 工具,支持日/周/月归档,适配 macOS:
- 下载脚本:
curl -o ~/bin/automysqlbackup.sh https://raw.githubusercontent.com/mesuutt/auto-mysql-backup/master/automysqlbackup.sh(需提前创建~/bin并加入$PATH) - 编辑配置(关键项):
–USERNAME="root"
–PASSWORD="your_secure_password"
–DBHOST="127.0.0.1"(若容器映射了 3306 端口,本地用 127.0.0.1 即可访问)
–DBNAMES="all"或指定库名如"app_db user_db"
–BACKUPDIR="/Users/yourname/backups/mysql"(建议与挂载卷分离,避免误删) - 赋予执行权限:
chmod +x ~/bin/automysqlbackup.sh
四、设置 macOS 定时任务(launchd)
macOS 推荐用 launchd 替代传统 cron,更稳定、支持开机启动:
- 创建 plist 文件:
~/Library/LaunchAgents/com.mysql.automated-backup.plist - 内容示例(每天凌晨 2 点执行):
<?xml version="1.0" encoding="UTF-8"?><br><br><plist version="1.0"><br><dict><br> <key>Label</key><br> <string>com.mysql.automated-backup</string><br> <key>ProgramArguments</key><br> <array><br> <string>/Users/yourname/bin/automysqlbackup.sh</string><br> </array><br> <key>StartCalendarInterval</key><br> <dict><br> <key>Hour</key><br> <integer>2</integer><br> <key>Minute</key><br> <integer>0</integer><br> </dict><br></dict><br></plist>
- 加载并启用:
launchctl load ~/Library/LaunchAgents/com.mysql.automated-backup.plist
立即测试运行:launchctl start com.mysql.automated-backup
这样配置后,MySQL 数据始终安全存于挂载卷中,备份脚本按计划生成压缩包并归档到独立目录,两者职责分明、互不干扰。不复杂但容易忽略。











