Skip to content

TDSQL 单节点部署

部署前准备

硬件要求

组件最低配置推荐配置
CPU4核8线程8核16线程
内存16GB32GB
存储500GB SSD1TB SSD
网络千兆网卡万兆网卡

软件要求

软件版本要求
操作系统CentOS 7.6-7.9 或 Ubuntu Server 18.04 LTS
Python3.6 或更高版本
Docker19.03 或更高版本(仅容器化部署需要)
Kubernetes1.18 或更高版本(仅K8s部署需要)

网络要求

  • 服务器可以访问互联网(用于下载安装包和依赖)
  • 关闭或配置防火墙,开放必要端口
  • 禁用或配置SELinux

系统配置

  1. 关闭防火墙(或开放必要端口)

    bash
    # CentOS/RHEL
    systemctl stop firewalld
    systemctl disable firewalld
    
    # Ubuntu/Debian
    ufw disable
  2. 禁用SELinux

    bash
    # 临时禁用
    setenforce 0
    
    # 永久禁用,修改/etc/selinux/config文件
    SELINUX=disabled
  3. 优化内核参数 参考《TDSQL 软件依赖》文档中的内核参数配置,优化网络、文件系统和内存参数。

  4. 创建用户

    bash
    # 创建tdsql用户
    useradd tdsql
    passwd tdsql
    
    # 赋予sudo权限
    echo "tdsql ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

部署方式选择

二进制部署

二进制部署是最传统的部署方式,直接使用编译好的二进制文件进行部署。

优点

  • 对系统资源占用较少
  • 部署灵活,可定制性强
  • 适合各种操作系统环境

缺点

  • 部署步骤较多
  • 需要手动处理依赖关系
  • 升级和维护相对复杂

容器化部署

容器化部署使用Docker容器进行部署,简化了部署和管理流程。

优点

  • 部署快速,环境一致性好
  • 依赖管理简单
  • 便于升级和回滚
  • 适合微服务架构

缺点

  • 对系统资源占用较多
  • 网络配置相对复杂
  • 日志管理需要额外配置

Kubernetes部署

Kubernetes部署将TDSQL部署在Kubernetes集群中,实现了自动化管理和弹性伸缩。

优点

  • 自动化部署和管理
  • 弹性伸缩,高可用性
  • 滚动升级,零 downtime
  • 适合大规模部署

缺点

  • 部署和管理复杂
  • 需要Kubernetes集群支持
  • 学习曲线较陡

二进制部署步骤

1. 下载安装包

bash
# 登录tdsql用户
su - tdsql

# 创建安装目录
mkdir -p /home/tdsql/installation
cd /home/tdsql/installation

# 下载TDSQL安装包(示例,实际请使用官方提供的下载地址)
wget https://example.com/tdsql-x.x.x-linux-x86_64.tar.gz

# 解压安装包
tar -zxvf tdsql-x.x.x-linux-x86_64.tar.gz

2. 安装依赖

bash
# CentOS/RHEL
sudo yum install -y gcc gcc-c++ make cmake autoconf automake libtool libmysqlclient-devel libpq-devel openssl-devel zlib-devel python3 python3-pip python3-devel

# Ubuntu/Debian
sudo apt update -y
sudo apt install -y build-essential cmake autoconf automake libtool libmysqlclient-dev libpq-dev libssl-dev zlib1g-dev python3 python3-pip python3-dev

3. 配置环境变量

bash
# 编辑.bashrc文件
echo 'export TDSQL_HOME=/home/tdsql/installation/tdsql-x.x.x' >> ~/.bashrc
echo 'export PATH=$TDSQL_HOME/bin:$PATH' >> ~/.bashrc

# 使环境变量生效
source ~/.bashrc

4. 初始化配置

bash
# 进入安装目录
cd $TDSQL_HOME

# 复制配置文件模板
cp conf/tdsql.template.conf conf/tdsql.conf

# 编辑配置文件
vi conf/tdsql.conf

主要配置项

ini
# 基础配置
server_id = 1
port = 3306
basedir = /home/tdsql/installation/tdsql-x.x.x
datadir = /home/tdsql/data
pid_file = /home/tdsql/tdsql.pid
socket = /home/tdsql/tdsql.sock

# 日志配置
log_error = /home/tdsql/logs/error.log
slow_query_log = 1
slow_query_log_file = /home/tdsql/logs/slow.log
long_query_time = 1

# 存储引擎配置
default_storage_engine = InnoDB
innodb_buffer_pool_size = 16G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1

# 连接配置
max_connections = 1000
max_connect_errors = 10000

# TDSQL特有配置
tdsql_mode = single

5. 初始化数据库

bash
# 创建数据目录和日志目录
mkdir -p /home/tdsql/data /home/tdsql/logs

# 初始化数据库
$TDSQL_HOME/bin/tdsql_init --datadir=/home/tdsql/data --user=tdsql

6. 启动TDSQL

bash
# 启动TDSQL
sudo $TDSQL_HOME/bin/tdsql_safe --defaults-file=$TDSQL_HOME/conf/tdsql.conf --user=tdsql &

# 检查启动状态
ps aux | grep tdsql

7. 配置root用户

bash
# 登录TDSQL
mysql -u root -S /home/tdsql/tdsql.sock

# 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

# 授权远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'new_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

# 退出
EXIT;

容器化部署步骤

1. 安装Docker

bash
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

# Ubuntu/Debian
sudo apt update -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update -y
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

2. 下载TDSQL镜像

bash
# 从Docker Hub下载TDSQL镜像(示例,实际请使用官方提供的镜像地址)
sudo docker pull tencent/tdsql:latest

3. 创建数据目录

bash
# 创建数据目录和配置目录
sudo mkdir -p /home/tdsql/data /home/tdsql/conf /home/tdsql/logs
sudo chown -R 1000:1000 /home/tdsql

4. 启动TDSQL容器

bash
# 启动TDSQL容器
sudo docker run -d \
  --name tdsql \
  -p 3306:3306 \
  -v /home/tdsql/data:/var/lib/mysql \
  -v /home/tdsql/conf:/etc/mysql/conf.d \
  -v /home/tdsql/logs:/var/log/mysql \
  -e MYSQL_ROOT_PASSWORD=new_password \
  -e TDSQL_MODE=single \
  tencent/tdsql:latest

5. 配置TDSQL

bash
# 进入容器
sudo docker exec -it tdsql bash

# 编辑配置文件
vi /etc/mysql/conf.d/tdsql.cnf

# 添加配置
[mysqld]
server_id = 1
tdsql_mode = single
innodb_buffer_pool_size = 16G
max_connections = 1000

# 退出容器
exit

# 重启容器
sudo docker restart tdsql

部署验证

1. 连接测试

bash
# 本地连接
mysql -u root -p -h localhost -P 3306

# 远程连接
mysql -u root -p -h <server_ip> -P 3306

2. 状态检查

sql
-- 检查TDSQL版本
SELECT VERSION();

-- 检查数据库状态
SHOW GLOBAL STATUS LIKE 'uptime';

-- 检查存储引擎
SHOW ENGINES;

-- 检查数据库列表
SHOW DATABASES;

3. 功能测试

sql
-- 创建测试数据库
CREATE DATABASE test_db;
USE test_db;

-- 创建测试表
CREATE TABLE test_table (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  value INT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 插入测试数据
INSERT INTO test_table (name, value) VALUES ('test1', 100);
INSERT INTO test_table (name, value) VALUES ('test2', 200);

-- 查询测试数据
SELECT * FROM test_table;

-- 更新测试数据
UPDATE test_table SET value = 300 WHERE name = 'test1';

-- 删除测试数据
DELETE FROM test_table WHERE name = 'test2';

部署后配置

1. 配置文件优化

根据服务器硬件配置和业务需求,优化配置文件中的关键参数:

ini
# 内存相关配置
innodb_buffer_pool_size = 物理内存的50%-70%
key_buffer_size = 物理内存的10%
query_cache_size = 0  # 建议关闭,使用应用层缓存

# 连接相关配置
max_connections = 根据业务需求调整
max_connect_errors = 10000
wait_timeout = 28800
interactive_timeout = 28800

# 日志相关配置
slow_query_log = 1
long_query_time = 1
log_queries_not_using_indexes = 1

# 存储引擎配置
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 1  # 生产环境建议1,开发环境可设为2
innodb_flush_method = O_DIRECT

2. 安全加固

bash
# 删除匿名用户
DELETE FROM mysql.user WHERE User='';

# 删除测试数据库
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';

# 刷新权限
FLUSH PRIVILEGES;

3. 配置定时备份

bash
# 创建备份脚本
vi /home/tdsql/scripts/backup.sh

# 脚本内容
#!/bin/bash
BACKUP_DIR="/home/tdsql/backup"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行备份
mysqldump -u root -p'new_password' --all-databases --single-transaction --routines --triggers --events > $BACKUP_DIR/tdsql_full_$DATE.sql

# 压缩备份文件
gzip $BACKUP_DIR/tdsql_full_$DATE.sql

# 删除7天前的备份文件
find $BACKUP_DIR -name "tdsql_full_*.gz" -mtime +7 -delete

# 添加执行权限
chmod +x /home/tdsql/scripts/backup.sh

# 添加到crontab,每天凌晨2点执行
crontab -e
0 2 * * * /home/tdsql/scripts/backup.sh

常见问题与解决方案

1. 启动失败

问题现象:TDSQL启动失败,查看日志显示错误信息

解决方案

  • 检查配置文件中的参数是否正确
  • 检查数据目录权限是否正确
  • 检查端口是否被占用
  • 查看错误日志,根据具体错误信息进行修复

2. 连接失败

问题现象:无法连接到TDSQL数据库

解决方案

  • 检查TDSQL是否正在运行
  • 检查防火墙是否开放了3306端口
  • 检查用户名和密码是否正确
  • 检查授权是否正确,特别是远程访问授权

3. 性能问题

问题现象:TDSQL性能不佳,查询缓慢

解决方案

  • 优化数据库配置参数
  • 优化SQL查询,添加适当的索引
  • 考虑增加服务器硬件资源
  • 监控系统负载和IO情况

4. 数据丢失

问题现象:数据意外丢失

解决方案

  • 立即停止写入操作
  • 使用最近的备份进行恢复
  • 检查二进制日志,尝试恢复增量数据
  • 加强备份策略,考虑实时备份方案

部署最佳实践

1. 开发测试环境

  • 使用容器化部署,便于快速搭建和销毁
  • 配置较低的资源,节省成本
  • 启用慢查询日志,便于开发调试
  • 定期清理测试数据

2. 小规模生产环境

  • 使用二进制部署,提高性能
  • 配置适当的备份策略
  • 启用监控系统,及时发现问题
  • 定期进行性能优化

3. 学习和演示

  • 使用Docker部署,简单快捷
  • 配置完整的功能,便于学习
  • 开启所有日志,便于理解TDSQL工作原理

升级与维护

1. 版本升级

bash
# 备份数据
mysqldump -u root -p --all-databases --single-transaction --routines --triggers --events > tdsql_backup.sql

# 停止当前TDSQL实例
$TDSQL_HOME/bin/tdsqladmin -S /home/tdsql/tdsql.sock shutdown

# 下载新版本
wget https://example.com/tdsql-new-version-linux-x86_64.tar.gz

# 解压并安装新版本(参考前面的安装步骤)

# 启动新版本
$TDSQL_HOME/bin/tdsql_safe --defaults-file=$TDSQL_HOME/conf/tdsql.conf --user=tdsql &

# 运行升级脚本
$TDSQL_HOME/bin/mysql_upgrade -u root -p

2. 日常维护

  • 定期检查数据库状态和性能
  • 定期备份数据,测试恢复流程
  • 监控磁盘空间使用情况
  • 定期优化表结构和索引
  • 关注官方发布的安全补丁和更新

常见问题(FAQ)

Q1: 单节点部署适合生产环境吗?

A1: 单节点部署不适合生产环境,因为它不具备高可用性,一旦节点发生故障,整个系统将不可用。生产环境建议使用主从部署、多可用区部署或跨地域部署等高可用架构。

Q2: 如何选择TDSQL的部署方式?

A2: 选择TDSQL的部署方式需要考虑以下因素:1)使用场景,开发测试环境适合容器化部署,生产环境适合二进制部署或Kubernetes部署;2)资源情况,容器化部署需要更多的系统资源;3)技术能力,Kubernetes部署需要较强的K8s管理能力;4)扩展性需求,Kubernetes部署便于弹性伸缩。

Q3: 如何优化TDSQL的性能?

A3: 优化TDSQL的性能可以从以下几个方面入手:1)调整配置参数,如innodb_buffer_pool_size、max_connections等;2)优化SQL查询,添加适当的索引;3)选择合适的存储引擎;4)优化服务器硬件,如使用NVMe SSD;5)定期进行数据库维护,如优化表结构、清理碎片等。

Q4: 如何确保TDSQL的数据安全?

A4: 确保TDSQL的数据安全可以从以下几个方面入手:1)配置强密码,定期更换密码;2)限制用户权限,遵循最小权限原则;3)启用SSL/TLS加密通信;4)定期备份数据,测试恢复流程;5)配置防火墙,限制访问IP;6)启用审计日志,监控数据库活动。

Q5: 如何监控TDSQL的运行状态?

A5: 监控TDSQL的运行状态可以使用以下方法:1)使用TDSQL内置的监控工具,如SHOW GLOBAL STATUS、SHOW ENGINE INNODB STATUS等;2)使用第三方监控工具,如Zabbix、Prometheus + Grafana等;3)监控系统资源使用情况,如CPU、内存、磁盘、网络等;4)监控慢查询日志,分析性能瓶颈;5)设置告警机制,及时发现异常情况。