自动配置TimescaleDB的脚本

wen 实用脚本 11

本文目录导读:

自动配置TimescaleDB的脚本

  1. 使用说明
  2. 自定义配置
  3. 脚本功能说明
  4. 验证安装
#!/bin/bash
# TimescaleDB 自动配置脚本
# 适用于 Ubuntu 20.04/22.04 或 Debian 11/12
set -e  # 遇到错误立即退出
# 颜色输出函数
print_info() {
    echo -e "\e[1;34m[INFO]\e[0m $1"
}
print_error() {
    echo -e "\e[1;31m[ERROR]\e[0m $1"
}
print_success() {
    echo -e "\e[1;32m[SUCCESS]\e[0m $1"
}
# 检查是否以 root 运行
if [ "$EUID" -ne 0 ]; then 
    print_error "请以 root 权限运行此脚本 (sudo)"
    exit 1
fi
# 1. 安装 PostgreSQL 和 TimescaleDB
install_timescaledb() {
    print_info "开始安装 TimescaleDB..."
    # 添加 PostgreSQL 官方仓库
    print_info "添加 PostgreSQL APT 仓库..."
    sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
    # 添加 TimescaleDB 仓库
    print_info "添加 TimescaleDB APT 仓库..."
    if [ "$(lsb_release -is)" = "Ubuntu" ]; then
        add-apt-repository -y ppa:timescale/timescaledb-ppa
    else
        sh -c 'echo "deb https://packagecloud.io/timescale/timescaledb/debian/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/timescaledb.list'
        wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | apt-key add -
    fi
    # 更新并安装
    apt-get update
    apt-get install -y timescaledb-2-postgresql-16 postgresql-16
    print_success "TimescaleDB 安装完成"
}
# 2. 配置 PostgreSQL
configure_postgresql() {
    print_info "配置 PostgreSQL..."
    # 停止 PostgreSQL 服务以确保配置生效
    systemctl stop postgresql
    # 运行 timescaledb-tune 自动优化配置
    timescaledb-tune --quiet --yes --conf-path /etc/postgresql/16/main/postgresql.conf
    # 启动 PostgreSQL 服务
    systemctl start postgresql
    print_success "PostgreSQL 配置完成"
}
# 3. 创建数据库和用户
create_database_and_user() {
    local db_name="$1"
    local db_user="$2"
    local db_password="$3"
    print_info "创建数据库和用户..."
    # 切换到 postgres 用户执行命令
    su - postgres -c "psql -c \"CREATE USER ${db_user} WITH PASSWORD '${db_password}';\""
    su - postgres -c "psql -c \"CREATE DATABASE ${db_name} OWNER ${db_user};\""
    su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE ${db_name} TO ${db_user};\""
    print_success "数据库 '${db_name}' 和用户 '${db_user}' 创建完成"
}
# 4. 启用 TimescaleDB 扩展
enable_extension() {
    local db_name="$1"
    print_info "启用 TimescaleDB 扩展..."
    # 连接到指定数据库并创建扩展
    su - postgres -c "psql -d ${db_name} -c \"CREATE EXTENSION IF NOT EXISTS timescaledb;\""
    print_success "TimescaleDB 扩展已启用"
}
# 5. 创建示例超表(优化时间序列数据)
create_sample_hypertable() {
    local db_name="$1"
    local table_owner="$2"
    print_info "创建示例超表..."
    # 创建普通表
    su - postgres -c "psql -d ${db_name} -c \"
        CREATE TABLE IF NOT EXISTS conditions (
            time        TIMESTAMPTZ       NOT NULL,
            location    TEXT              NOT NULL,
            temperature DOUBLE PRECISION  NULL,
            humidity    DOUBLE PRECISION  NULL
        );
    \""
    # 转换为超表(按时间分区)
    su - postgres -c "psql -d ${db_name} -c \"
        SELECT create_hypertable('conditions', 'time', if_not_exists => TRUE);
        ALTER TABLE conditions SET (
            timescaledb.compress,
            timescaledb.compress_segmentby = 'location'
        );
        SELECT add_compression_policy('conditions', INTERVAL '7 days');
    \""
    # 设置表所有权
    su - postgres -c "psql -d ${db_name} -c \"ALTER TABLE conditions OWNER TO ${table_owner};\""
    print_success "示例超表 'conditions' 创建完成"
}
# 6. 创建自动分区策略
create_partitioning_policy() {
    local db_name="$1"
    print_info "创建自动分区策略..."
    su - postgres -c "psql -d ${db_name} -c \"
        SELECT add_job(
            'reorder_chunk',
            schedule_interval => INTERVAL '1 hour',
            initial_start => now()
        );
    \""
    print_success "自动分区策略已创建"
}
# 7. 创建备份脚本
create_backup_script() {
    local db_name="$1"
    local backup_dir="/var/backups/timescaledb/${db_name}"
    print_info "创建备份脚本..."
    mkdir -p "${backup_dir}"
    chmod 700 "${backup_dir}"
    cat > /usr/local/bin/backup_timescaledb.sh << EOF
#!/bin/bash
# TimescaleDB 备份脚本
BACKUP_DIR="${backup_dir}"
DB_NAME="${db_name}"
DATE=\$(date +%Y%m%d_%H%M%S)
pg_dump -Fc -U postgres -d \${DB_NAME} > \${BACKUP_DIR}/\${DB_NAME}_\${DATE}.dump
echo "Backup created: \${BACKUP_DIR}/\${DB_NAME}_\${DATE}.dump"
EOF
    chmod +x /usr/local/bin/backup_timescaledb.sh
    print_success "备份脚本已创建: /usr/local/bin/backup_timescaledb.sh"
}
# 主函数
main() {
    print_info "TimescaleDB 自动配置脚本开始运行..."
    echo "======================================"
    # 配置参数
    DB_NAME="timescaledb_test"
    DB_USER="tsdb_admin"
    DB_PASSWORD="YourStrongPassword123!"
    # 安装 TimescaleDB
    install_timescaledb
    # 配置 PostgreSQL
    configure_postgresql
    # 创建数据库和用户
    create_database_and_user "${DB_NAME}" "${DB_USER}" "${DB_PASSWORD}"
    # 启用扩展
    enable_extension "${DB_NAME}"
    # 创建示例超表
    create_sample_hypertable "${DB_NAME}" "${DB_USER}"
    # 创建分区策略
    create_partitioning_policy "${DB_NAME}"
    # 创建备份脚本
    create_backup_script "${DB_NAME}"
    echo "======================================"
    print_success "TimescaleDB 自动配置完成!"
    print_info "数据库: ${DB_NAME}"
    print_info "用户: ${DB_USER}"
    print_info "密码: ${DB_PASSWORD}"
    print_info "请立即修改默认密码!"
    # 显示连接信息
    echo ""
    print_info "连接信息:"
    echo "  Host: localhost"
    echo "  Port: 5432"
    echo "  Database: ${DB_NAME}"
    echo "  Username: ${DB_USER}"
    echo "  Connection string: postgresql://${DB_USER}:${DB_PASSWORD}@localhost:5432/${DB_NAME}"
}
# 执行主函数
main

使用说明

  1. 保存脚本

    sudo nano /tmp/configure_timescaledb.sh
    # 将上面的脚本内容粘贴进去
  2. 赋予执行权限

    sudo chmod +x /tmp/configure_timescaledb.sh
  3. 运行脚本

    sudo /tmp/configure_timescaledb.sh

自定义配置

如果需要自定义配置,可以修改脚本中的以下参数:

# 在第 178-180 行附近
DB_NAME="timescaledb_test"      # 数据库名称
DB_USER="tsdb_admin"            # 数据库用户
DB_PASSWORD="YourStrongPassword123!"  # 数据库密码

脚本功能说明

功能 说明
自动安装 安装 PostgreSQL 16 + TimescaleDB 2.x
自动优化 使用 timescaledb-tune 优化配置
创建用户 创建数据库用户并设置权限
创建数据库 创建指定名称的数据库
启用扩展 启用 TimescaleDB 扩展
创建超表 创建示例时间序列表并转换为超表
压缩策略 为超表启用压缩并设置自动压缩策略
备份脚本 创建自动备份脚本

验证安装

完成后,可以使用以下命令验证:

# 连接到数据库
sudo -u postgres psql -d timescaledb_test
# 在 psql 中输入
\d
SELECT * FROM timescaledb_information.hypertables;

这个脚本会创建一个完整的 TimescaleDB 环境,包括时间序列数据库、用户、超表和自动维护策略,适合快速部署开发和测试环境。

抱歉,评论功能暂时关闭!