数据库操作手册
SQLite
sqlite3 /path/to/db.sqlite
.tables .schema <table> # 查看建表语句
.indexes <table> # 列出索引
.mode column .headers on
SELECT * FROM <table> LIMIT 10;
SELECT name, kind FROM resource ORDER BY kind;
SELECT COUNT(*) FROM resource WHERE kind='dashboard';
.exit
sqlite3 db.sqlite ".backup backup.sqlite"
sqlite3 db.sqlite "PRAGMA integrity_check" sqlite3 db.sqlite "VACUUM" sqlite3 db.sqlite "PRAGMA wal_checkpoint(TRUNCATE)"
Grafana DB 维护 (SQLite, unified storage)
systemctl stop grafana
cp /var/lib/grafana/grafana.db grafana.db.bak
sqlite3 /var/lib/grafana/grafana.db <<SQL
-- 查看所有 dashboard/folder (名称 + 类型)
SELECT name, kind FROM resource WHERE kind IN ('dashboard', 'folder') ORDER BY kind;
-- 删除 UI 建的 dashboard (provisioned 的归文件管, 不在这里)
DELETE FROM resource WHERE name = 'old-dashboard' AND kind = 'dashboard';
-- resource_history 记录了所有版本变更, 可能很大, 可安全清理
SELECT COUNT(*) FROM resource_history;
DELETE FROM resource_history;
-- 回收空间
VACUUM;
SQL
systemctl start grafana
PostgreSQL
psql -U postgres -d dbname
\l \dt \d <table> # 表结构 (列 + 索引 + 约束)
\du \dx
pg_dump -U postgres dbname > backup.sql pg_dumpall -U postgres > all.sql pg_dump -U postgres -Fc dbname > backup.dump
psql -U postgres dbname < backup.sql
pg_restore -U postgres -d dbname backup.dump
SELECT count(*) FROM pg_stat_activity;
SELECT pid, state, query FROM pg_stat_activity WHERE state != 'idle';
MySQL/MariaDB
mysql -u root -p
SHOW DATABASES;
SHOW TABLES;
DESCRIBE <table>;
mysqldump -u root -p dbname > backup.sql
mysqldump -u root -p --all-databases > all.sql
mysqldump -u root -p --no-data dbname > schema.sql
mysql -u root -p dbname < backup.sql
备份自动化 (systemd timer)
cat > /etc/systemd/system/db-backup.service <<'EOF'
[Service]
Type=oneshot
ExecStart=/usr/local/bin/db-backup.sh
User=root
EOF
cat > /etc/systemd/system/db-backup.timer <<'EOF'
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
cat > /usr/local/bin/db-backup.sh <<'EOF'
#!/bin/bash
set -e
BACKUP_DIR=/backup/db
mkdir -p "$BACKUP_DIR"
DATE=$(date +%Y%m%d)
sqlite3 /var/lib/grafana/grafana.db ".backup $BACKUP_DIR/grafana-$DATE.db"
find "$BACKUP_DIR" -name 'grafana-*.db' -mtime +30 -delete
EOF
chmod +x /usr/local/bin/db-backup.sh
systemctl enable --now db-backup.timer