zlwu b430e75a4b 提交 1 month ago
..
README.md b430e75a4b 提交 1 month ago
backup-mysql.sh b430e75a4b 提交 1 month ago
backup.conf.example b430e75a4b 提交 1 month ago
start.sh b430e75a4b 提交 1 month ago
status.sh b430e75a4b 提交 1 month ago
stop.sh b430e75a4b 提交 1 month ago

README.md

shanxia2.0 生产环境 MySQL 备份脚本

每天 00:00 / 12:00 自动备份库 shanxia2.0;备份时 不导出 sys_api_request_log 表数据(仅保留表结构)。
每次备份前检查该表占用,若 data + index ≥ 2G 则执行 TRUNCATE 清理。

生产机建议目录

/iflytek/shanxia2.0/db-backup/          ← 将本目录整包上传到此处
├── backup.conf.example
├── backup.conf                         ← 需自行创建并填密码
├── backup-mysql.sh
├── start.sh
├── stop.sh
├── status.sh
├── data/                               ← 备份文件 *.sql.gz
└── logs/                               ← cron / 运行日志

上线步骤(上传后执行)

# 1. 上传本文件夹到生产机,例如:
# scp -r 生产环境部署/生产环境数据库备份的shell脚本 root@121.43.228.102:/iflytek/shanxia2.0/db-backup

ssh root@121.43.228.102
cd /iflytek/shanxia2.0/db-backup

# 2. 配置数据库账号(与 backend/.env.production 的 DATABASE_URL 一致)
cp backup.conf.example backup.conf
vi backup.conf   # 必改 MYSQL_PASSWORD;按需改 HOST/USER/BACKUP_DIR

# 3. 赋权
chmod +x backup-mysql.sh start.sh stop.sh status.sh

# 4. 确认本机有 mysql / mysqldump(无则安装客户端)
# CentOS/RHEL:  yum install -y mysql
# Debian/Ubuntu: apt-get install -y mysql-client

# 5. 安装定时任务(每天 0 点、12 点)
./start.sh

# 6. 建议立刻跑一次验证
./backup-mysql.sh
./status.sh

日常命令

命令 作用
./start.sh 安装/更新 crontab(0 0,12 * * *)
./stop.sh 移除定时任务(不删已有备份)
./status.sh 查看 crontab、最近备份、日志
./backup-mysql.sh 立即执行一次备份 + 超限清理

行为说明

  1. 备份内容:mysqldump 全库(含 routines/triggers/events),对 sys_api_request_log 使用 --ignore-table,再单独追加该表的 仅结构 dump,最后 gzip。
  2. 日志表清理:查询 information_schema 中该表 data_length + index_length,超过 LOG_TABLE_MAX_BYTES(默认 2147483648,即 2GiB)则 TRUNCATE TABLE。
  3. 保留策略:删除 BACKUP_DIR 下超过 KEEP_DAYS(默认 14)天的 ${库名}_*.sql.gz。
  4. 凭据:密码写在 backup.conf,运行时写入临时 defaults-extra-file(chmod 600),用完删除,避免出现在 ps 参数里。

恢复示例

gunzip -c /iflytek/shanxia2.0/db-backup/data/shanxia2.0_YYYYMMDD_HHMMSS.sql.gz \
  | mysql -h 47.99.164.66 -P 3306 -u USER -p shanxia2.0

恢复后 sys_api_request_log 为空表(仅有结构),属预期行为。

配置项(backup.conf)

变量 含义 默认
MYSQL_HOST 库主机 47.99.164.66
MYSQL_PORT 端口 3306
MYSQL_USER / MYSQL_PASSWORD 账号密码 必填
MYSQL_DATABASE 库名 shanxia2.0
BACKUP_DIR 备份目录 /iflytek/shanxia2.0/db-backup/data
LOG_DIR 日志目录 /iflytek/shanxia2.0/db-backup/logs
KEEP_DAYS 保留天数 14
LOG_TABLE_MAX_BYTES 日志表清理阈值(字节) 2147483648(2G)
IGNORE_DATA_TABLE 不备份数据的表名 sys_api_request_log