免费的MySQL数据库,美国加州机房
Aiven Console
这个免费MySQL,24小时没有库内容变化会自动关机,简单做了个数据库操作的保活部署到GitHub上,workflow自动保活(把每次 保活记录添加到数据库表bh中):
name: Database Keep-Alive Ping and Log
on:
schedule:
- cron: '43 * * * *' # 设定你的循环保活时间,我设置的43分钟
workflow_dispatch:
jobs:
ping-and-log:
runs-on: ubuntu-latest
steps:
- name: Install MySQL Client
run: sudo apt-get update && sudo apt-get install -y mysql-client
- name: Check Table, Create if not exists, and Insert Log
env: # 通过环境变量安全地读取Secrets
DB_HOST: ${{ secrets.AVN_DB_HOST }}
DB_PORT: ${{ secrets.AVN_DB_PORT }}
DB_USER: ${{ secrets.AVN_DB_USER }}
DB_PASS: ${{ secrets.AVN_DB_PASSWORD }}
DB_NAME: ${{ secrets.AVN_DB_NAME }}
run: |
# 使用 heredoc 方式执行一个完整的SQL脚本,避免密码出现在进程列表里
mysql --ssl-mode=REQUIRED -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" -D "$DB_NAME" <<EOF
-- 1. 检查名为 'bh' 的表是否存在,如果不存在则创建
CREATE TABLE IF NOT EXISTS bh (
id INT AUTO_INCREMENT PRIMARY KEY,
ping_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(255) DEFAULT 'GitHub Actions Keep-Alive'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. 向 bh 表中插入本次保活记录
INSERT INTO bh (ping_time) VALUES (NOW());
-- 3. (可选) 查询最近3次记录,仅用于日志输出确认
SELECT * FROM bh ORDER BY ping_time DESC LIMIT 3;
EOF
# 检查MySQL命令是否成功执行
if [ $? -eq 0 ]; then
echo "✅ Success: The 'bh' table has been ensured and a ping log was inserted."
else
echo "❌ Error: The operation failed. Check the connection details and SQL syntax."
exit 1 # 失败时退出,标记步骤为红色
fi
###########################需要在GitHub中设置5个变量(settings→Secrets and variables→Actions→New repository secrets):
AVN_DB_HOST
AVN_DB_PORT
AVN_DB_USER
AVN_DB_PASSWORD
AVN_DB_NAME