沃趣科技Logo沃趣科技产品文档
快速入门

定时测试:自动获取定制化数据

为了方便客户进行脱敏、报表统计或者数据分析等定时基于历史数据进行个性化定制,QPlus 通过定时快照策略与自动化扩展程序,实现分钟级拉起与生产一致的测试环境(数据时效性精准至±1 秒),并支持嵌入可扩展程序(如 shell 脚本)生成统计报表、历史数据分析、邮件自动发送等场景。仅拉起快照功能也可用于备份恢复验证,验证备份的可恢复性,满足企业级定时恢复验证的监管合规要求。

案例演示

业务需求:每日自动统计员工工时 TOP20 并邮件发送

数据来源:备库中的 MPLOYEE_WORK_RECORDS 表(含员工 ID、姓名、部门、工时等字段)

环境说明

为了验证功能效果,可提前按照如下操作准备环境数据

主库环境

  • 准备主库数据
-- 创建 MPLOYEE_WORK_RECORDS 表
use test
CREATE TABLE EMPLOYEE_WORK_RECORDS 
(EMPLOYEE_ID VARCHAR(20) PRIMARY KEY,FULL_NAME VARCHAR(100) CHARACTER SET utf8mb4 NOT NULL,WORK_HOURS DECIMAL(5,2),DEPARTMENT VARCHAR(50) CHARACTER SET utf8mb4,CHECK (WORK_HOURS BETWEEN 0.5 AND 12)) 
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 插入数据,可以多插入一些
INSERT INTO EMPLOYEE_WORK_RECORDS (EMPLOYEE_ID, FULL_NAME, WORK_HOURS, DEPARTMENT) VALUES'E001''张三'8.5'IT 部'),('E002''李乐'9.5'市场部'),('E003''张伟'7.5'财务部'),('E004''张四'8.0'财务部'),('E005''王二'9.5'财务部');
-- 查看数据
SELECT * FROM EMPLOYEE_WORK_RECORDS LIMIT 10;

查看备库数据同步

  • 备库同步,主库中创建的数据已同步到备库,备库执行查看数据 sql 存在一个表存储着员工的工时与个人信息。
-- 执行快捷命令进入到快照库
mysql --socket=/data/mysql.sock -uroot -ppassword
-- 查看数据
use test
SELECT * FROM EMPLOYEE_WORK_RECORDS LIMIT 10;

备库员工数据

创建定时测试任务

创建扩展程序

进入「备份策略」→「扩展程序」。点击【创建扩展程序】即可开始编写程序脚本,这些脚本支持在定时任务中自动嵌入,且脚本在独立容器内运行,与生产环境物理隔离,即使操作失误也不会影响主库或备库。执行用户为:root。

创建自定义扩展程序

这里创建两个扩展程序,第一个用于生成报表,第二个用于发送邮件

  • 报表生成 shell
 #!/bin/bash
# 使用 root 权限执行此脚本
DB_USER="root"
DB_PASSWORD="password"
OUTPUT_FILE="/root/sql_result.txt"
DATABASE_NAME="test"
DATABASE_NAME="test"
SQL="SELECT * FROM EMPLOYEE_WORK_RECORDS LIMIT 10;"
# 执行查询
/opt/exec/bin/mysql --socket=/data/mysql.sock -u"$DB_USER" -p"$DB_PASSWORD" -D"$DATABASE_NAME" -e"$SQL" > $OUTPUT_FILE 2>&1
# 检查错误
if grep -q "ERROR" "$OUTPUT_FILE"; then
echo "SQL 执行失败:" >&2
grep "ERROR" "$OUTPUT_FILE" >&2
exit 1
fi
echo "执行成功,结果保存至 $OUTPUT_FILE"
exit 0
  • 发送邮件 shell,变量信息根据环境对应修改
#!/bin/bash
# 邮件配置
SMTP_SERVER="smtps://smtp.exmail.qq.com:465"
SENDER_EMAIL="test@woqutech.com"
SENDER_PASSWORD="password"
RECIPIENT_EMAIL="test@woqutech.com"
# 邮件内容文件路径
CONTENT_FILE="/root/sql_result.txt"
# 生成临时邮件文件(包含邮件头和正文)
MAIL_FILE=$(mktemp) || exit 1
trap 'rm -f "$MAIL_FILE"' EXIT # 脚本退出时删除临时文件
# 构建邮件内容(头部 + 文件正文)
{
echo "From: \"10-10-60-7\" <$SENDER_EMAIL>"
echo "To: $RECIPIENT_EMAIL"
echo "Subject: 员工工时内容报告"
echo "Content-Type: text/plain; charset=UTF-8"
echo ""
cat "$CONTENT_FILE"
} > "$MAIL_FILE"
# 发送邮件
curl -v \
--ssl-reqd \
--url "$SMTP_SERVER" \
--user "$SENDER_EMAIL:$SENDER_PASSWORD" \
--mail-from "$SENDER_EMAIL" \
--mail-rcpt "$RECIPIENT_EMAIL" \
--upload-file "$MAIL_FILE"
# 检查执行结果
if [ $? -eq 0 ]; then
echo "邮件发送成功"
else
echo "邮件发送失败"
exit 1
fi

新建定时任务

  • 您可以进入【MySQL】->【定时测试】模块,创建自定义定时任务。

定时测试模块

关键配置项

任务名称: 员工工时日报

执行频率: 0 23 * * * (每日 23 点)

快照规格: 2C4G(自动匹配)

命名规则: 任务名称_时间戳

定时测试表单

绑定扩展程序

  • 从程序库选择已创建的脚本,支持多脚本顺序执行

执行结果

  • 系统将按 Cron 规则触发定时任务,拉起的快照库命名格式为任务名称_时间戳(如 xxx 日报_202405151200)

定时测试拉起的快照库

执行历史

  • 定时测试的执行历史可以查看开发测试库的创建是否成功以及自定义扩展程序是否执行成功。

执行结果查看

  • 定时任务的执行结果成功,自动发送邮件,查看邮箱收到了员工工时的记录。

自动发送邮件