本文目录导读:

#!/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
使用说明
-
保存脚本:
sudo nano /tmp/configure_timescaledb.sh # 将上面的脚本内容粘贴进去
-
赋予执行权限:
sudo chmod +x /tmp/configure_timescaledb.sh
-
运行脚本:
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 环境,包括时间序列数据库、用户、超表和自动维护策略,适合快速部署开发和测试环境。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播