外观
TDSQL 单节点部署
部署前准备
硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4核8线程 | 8核16线程 |
| 内存 | 16GB | 32GB |
| 存储 | 500GB SSD | 1TB SSD |
| 网络 | 千兆网卡 | 万兆网卡 |
软件要求
| 软件 | 版本要求 |
|---|---|
| 操作系统 | CentOS 7.6-7.9 或 Ubuntu Server 18.04 LTS |
| Python | 3.6 或更高版本 |
| Docker | 19.03 或更高版本(仅容器化部署需要) |
| Kubernetes | 1.18 或更高版本(仅K8s部署需要) |
网络要求
- 服务器可以访问互联网(用于下载安装包和依赖)
- 关闭或配置防火墙,开放必要端口
- 禁用或配置SELinux
系统配置
关闭防火墙(或开放必要端口)
bash# CentOS/RHEL systemctl stop firewalld systemctl disable firewalld # Ubuntu/Debian ufw disable禁用SELinux
bash# 临时禁用 setenforce 0 # 永久禁用,修改/etc/selinux/config文件 SELINUX=disabled优化内核参数 参考《TDSQL 软件依赖》文档中的内核参数配置,优化网络、文件系统和内存参数。
创建用户
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.gz2. 安装依赖
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-dev3. 配置环境变量
bash
# 编辑.bashrc文件
echo 'export TDSQL_HOME=/home/tdsql/installation/tdsql-x.x.x' >> ~/.bashrc
echo 'export PATH=$TDSQL_HOME/bin:$PATH' >> ~/.bashrc
# 使环境变量生效
source ~/.bashrc4. 初始化配置
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 = single5. 初始化数据库
bash
# 创建数据目录和日志目录
mkdir -p /home/tdsql/data /home/tdsql/logs
# 初始化数据库
$TDSQL_HOME/bin/tdsql_init --datadir=/home/tdsql/data --user=tdsql6. 启动TDSQL
bash
# 启动TDSQL
sudo $TDSQL_HOME/bin/tdsql_safe --defaults-file=$TDSQL_HOME/conf/tdsql.conf --user=tdsql &
# 检查启动状态
ps aux | grep tdsql7. 配置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 docker2. 下载TDSQL镜像
bash
# 从Docker Hub下载TDSQL镜像(示例,实际请使用官方提供的镜像地址)
sudo docker pull tencent/tdsql:latest3. 创建数据目录
bash
# 创建数据目录和配置目录
sudo mkdir -p /home/tdsql/data /home/tdsql/conf /home/tdsql/logs
sudo chown -R 1000:1000 /home/tdsql4. 启动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:latest5. 配置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 33062. 状态检查
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_DIRECT2. 安全加固
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 -p2. 日常维护
- 定期检查数据库状态和性能
- 定期备份数据,测试恢复流程
- 监控磁盘空间使用情况
- 定期优化表结构和索引
- 关注官方发布的安全补丁和更新
常见问题(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)设置告警机制,及时发现异常情况。
