2026/2/27 0:27:15
网站建设
项目流程
制作公司网站怎样收费,闵行区网站建设,php网站插件删除或添加,非盈利网站建设问题核心准备工作
环境依赖 确保服务器已安装以下工具#xff1a;
DockerGitmailx#xff08;用于邮件通知#xff09;dos2unix#xff08;解决脚本格式问题#xff09;
Gitee 配置 创建私有仓库#xff08;如 mysql_backup#xff09;#xff0c;避免数据泄露。
SSH 免…核心准备工作环境依赖确保服务器已安装以下工具DockerGitmailx用于邮件通知dos2unix解决脚本格式问题Gitee 配置创建私有仓库如mysql_backup避免数据泄露。SSH 免密配置# 生成 SSH 密钥一路回车ssh-keygen-trsa-Cyour_emailexample.com# 复制公钥内容cat~/.ssh/id_rsa.pub# Gitee 配置头像→设置→SSH公钥→粘贴公钥保存# 测试免密连接ssh-Tgitgitee.com初始化本地 Git 仓库mkdir-p/opt/mysql_backup/{backups,gitee_backup}cd/opt/mysql_backup/gitee_backupgitinitgitremoteaddorigin gitgitee.com:your_username/mysql_backup.git# 配置 Git 用户名和邮箱gitconfig--globaluser.nameYour Namegitconfig--globaluser.emailyour_emailexample.com备份脚本优化创建/opt/mysql_backup/backup.sh支持以下功能指定库或全库备份失败自动重试邮件通知自动压缩和清理旧备份#!/bin/bashset-e# 配置区 CONTAINER_NAMEmysql# Docker MySQL 容器名MYSQL_USERrootMYSQL_PASSWORD1234# MySQL 密码BACKUP_MODEall# 备份模式all全库或指定库名BACKUP_DIR/opt/mysql_backup/backupsGIT_REPO_DIR/opt/mysql_backup/gitee_backupKEEP_BACKUPS10# 保留最近10个备份MAX_RETRIES3# 失败重试次数RETRY_DELAY60# 重试间隔秒EMAIL_TOyour_emailexample.com# 通知邮箱DATE$(date%Y%m%d_%H%M%S)BACKUP_FILE${BACKUP_DIR}/mysql_${DATE}.sqlBACKUP_FILE_GZ${BACKUP_FILE}.gzLOG_FILE/opt/mysql_backup/backup_${DATE}.log# 配置结束 # 日志函数log(){echo[$(date%F %T)]$1|tee-a${LOG_FILE}}# 邮件通知函数send_email(){localsubject$1localbody$2echo-e${body}|mailx-s${subject}${EMAIL_TO}}# 失败重试函数retry(){localn1localmax${MAX_RETRIES}localdelay${RETRY_DELAY}whiletrue;do$break||{if[[${n}-lt${max}]];thenlog失败重试${n}/${max}${delay}秒后重试...((n))sleep${delay}elselog达到最大重试次数${max}任务失败return1fi}done}# 主备份流程log开始 MySQL 备份任务...mkdir-p${BACKUP_DIR}# 选择备份模式if[[${BACKUP_MODE}all]];thenBACKUP_CMDmysqldump -u${MYSQL_USER}-p${MYSQL_PASSWORD}--all-databases --single-transactionelseBACKUP_CMDmysqldump -u${MYSQL_USER}-p${MYSQL_PASSWORD}${BACKUP_MODE}--single-transactionfi# 执行备份带重试if!retrydockerexec${CONTAINER_NAME}${BACKUP_CMD}${BACKUP_FILE};thenlog数据库备份失败send_emailMySQL备份失败备份时间$(date)\n失败日志${LOG_FILE}exit1fi# 压缩备份文件gzip${BACKUP_FILE}log备份完成${BACKUP_FILE_GZ}# 清理旧备份ls-tp${BACKUP_DIR}/*.sql.gz|grep-v/$|tail-n$((KEEP_BACKUPS1))|xargs-I{}rm--{}log已清理旧备份保留最近${KEEP_BACKUPS}个# 推送 Gitee带重试if!retrybash-ccd${GIT_REPO_DIR} cp${BACKUP_FILE_GZ}. git add . git commit -m Backup${DATE} git push origin master;thenlog推送 Gitee 失败send_emailMySQL备份推送失败备份成功但推送失败日志${LOG_FILE}exit1filog推送 Gitee 成功send_emailMySQL备份成功备份文件${BACKUP_FILE_GZ}\n备份时间$(date)log备份任务全部完成脚本修复与权限配置# 修复 Windows 格式问题dos2unix /opt/mysql_backup/backup.sh# 添加执行权限chmodx /opt/mysql_backup/backup.sh# 手动测试脚本/opt/mysql_backup/backup.sh定时任务设置# 编辑 crontabcrontab-e# 每天 12 点和 0 点备份012* * * /opt/mysql_backup/backup.sh/opt/mysql_backup/backup.log2100* * * /opt/mysql_backup/backup.sh/opt/mysql_backup/backup.log21# 查看定时任务crontab-l关键问题排查备份文件数据量少检查BACKUP_MODE是否设置为all确保启用全库备份。推送 Gitee 报 404检查 Git 远程地址是否正确gitremote set-url origin gitgitee.com:your_username/mysql_backup.gitSSH 免密失败确保私钥权限正确chmod600~/.ssh/id_rsa优化建议安全优化使用~/.my.cnf存储 MySQL 凭据避免明文密码[mysqldump] userroot password1234修改备份命令为BACKUP_CMDmysqldump --defaults-extra-file/root/.my.cnf --single-transaction${BACKUP_MODE}性能优化添加--single-transaction参数避免锁表适合 InnoDB 数据库。验证优化定期从 Gitee 下载备份文件执行恢复测试确保备份有效性。