外观
TDSQL 配置文件
配置文件结构
文件位置
TDSQL配置文件通常位于以下位置:
- 默认位置:
/home/tdsql/conf/tdsql.conf - 二进制部署:安装目录下的
conf子目录 - 容器部署:通常挂载到容器内的
/etc/mysql/conf.d/目录 - 云服务部署:通过管理控制台在线配置
基本格式
TDSQL配置文件采用INI格式,由多个节(section)组成,每个节包含多个键值对:
ini
[mysqld]
# 基础配置
server_id = 1
port = 3306
basedir = /home/tdsql/installation/tdsql-5.7
datadir = /home/tdsql/data
# 二进制日志配置
enable_binary_log = 1
binlog_format = ROW
log_bin = /home/tdsql/logs/binlog
# 存储引擎配置
default_storage_engine = InnoDB
innodb_buffer_pool_size = 48G
[client]
port = 3306
socket = /home/tdsql/tdsql.sock
[mysql]
prompt = TDSQL [\d]>主要节说明
| 节名称 | 用途 |
|---|---|
| [mysqld] | 数据库服务器核心配置 |
| [client] | 客户端工具默认配置 |
| [mysql] | mysql客户端特定配置 |
| [mysqldump] | mysqldump工具配置 |
| [mysqld_safe] | mysqld_safe脚本配置 |
| [mysqladmin] | mysqladmin工具配置 |
| [tdsql] | TDSQL特有配置 |
核心配置参数
基础配置
| 参数 | 说明 | 建议值 |
|---|---|---|
| server_id | 数据库实例唯一标识 | 每个实例唯一,建议使用IP末段或自定义编号 |
| port | 数据库监听端口 | 默认3306,可根据需求修改 |
| basedir | TDSQL安装目录 | 根据实际安装路径设置 |
| datadir | 数据文件存储目录 | 建议使用独立磁盘或分区 |
| socket | 本地套接字文件路径 | 默认即可 |
| pid_file | PID文件路径 | 默认即可 |
| character_set_server | 服务器默认字符集 | utf8mb4 |
| collation_server | 服务器默认校对规则 | utf8mb4_general_ci |
| skip_name_resolve | 跳过主机名解析 | 1(启用) |
二进制日志配置
| 参数 | 说明 | 建议值 |
|---|---|---|
| enable_binary_log | 是否启用二进制日志 | 1(启用) |
| binlog_format | 二进制日志格式 | ROW |
| log_bin | 二进制日志文件路径 | 默认即可 |
| binlog_row_image | 二进制日志行记录格式 | FULL |
| expire_logs_days | 二进制日志保留天数 | 7-14天 |
| sync_binlog | 二进制日志同步磁盘频率 | 1(最安全)或100-1000(性能更好) |
| gtid_mode | 是否启用GTID | ON |
| enforce_gtid_consistency | 是否强制GTID一致性 | ON |
| log_slave_updates | 从节点是否记录复制的更新到二进制日志 | ON |
存储引擎配置
| 参数 | 说明 | 建议值 |
|---|---|---|
| default_storage_engine | 默认存储引擎 | InnoDB |
| innodb_buffer_pool_size | InnoDB缓冲池大小 | 物理内存的50%-70% |
| innodb_log_file_size | InnoDB日志文件大小 | 1G-4G |
| innodb_log_files_in_group | InnoDB日志文件组数量 | 2 |
| innodb_flush_log_at_trx_commit | 事务提交时日志刷新策略 | 1(最安全)或2(性能更好) |
| innodb_flush_method | InnoDB刷新方法 | O_DIRECT(SSD)或fsync(HDD) |
| innodb_file_per_table | 是否每个表使用独立表空间 | ON |
| innodb_open_files | 允许打开的InnoDB文件数 | 65535 |
| innodb_io_capacity | InnoDB IO处理能力 | 根据存储设备性能调整 |
| innodb_io_capacity_max | InnoDB最大IO处理能力 | 通常为innodb_io_capacity的2倍 |
| innodb_lock_wait_timeout | InnoDB锁等待超时时间 | 50-120秒 |
连接配置
| 参数 | 说明 | 建议值 |
|---|---|---|
| max_connections | 最大连接数 | 根据业务需求调整,建议1000-4000 |
| max_connect_errors | 允许的最大连接错误数 | 10000 |
| connect_timeout | 连接超时时间 | 10秒 |
| wait_timeout | 非活跃连接超时时间 | 28800秒(8小时) |
| interactive_timeout | 交互式连接超时时间 | 28800秒(8小时) |
| thread_cache_size | 线程缓存大小 | 100-500 |
| table_open_cache | 表缓存大小 | 2000-10000 |
| table_definition_cache | 表定义缓存大小 | 1000-5000 |
查询优化配置
| 参数 | 说明 | 建议值 |
|---|---|---|
| query_cache_size | 查询缓存大小 | 0(禁用,使用应用层缓存) |
| sort_buffer_size | 排序缓冲区大小 | 2M |
| read_buffer_size | 顺序读取缓冲区大小 | 1M |
| read_rnd_buffer_size | 随机读取缓冲区大小 | 4M |
| join_buffer_size | 连接缓冲区大小 | 2M |
| tmp_table_size | 临时表大小 | 64M |
| max_heap_table_size | 内存临时表最大大小 | 64M |
| max_execution_time | 语句最大执行时间(毫秒) | 根据业务需求调整 |
| slow_query_log | 是否启用慢查询日志 | 1(启用) |
| long_query_time | 慢查询阈值(秒) | 1-5秒 |
| log_queries_not_using_indexes | 是否记录未使用索引的查询 | 1(启用) |
TDSQL特有配置
| 参数 | 说明 | 建议值 |
|---|---|---|
| tdsql_mode | TDSQL运行模式 | master(主节点)或slave(从节点) |
| az_name | 可用区名称 | 根据实际部署的可用区设置 |
| region_name | 地域名称 | 根据实际部署的地域设置 |
| rpl_semi_sync_master_enabled | 是否启用半同步复制(主节点) | 1(启用) |
| rpl_semi_sync_slave_enabled | 是否启用半同步复制(从节点) | 1(启用) |
| rpl_semi_sync_master_timeout | 半同步复制超时时间(毫秒) | 10000-30000 |
| slave_parallel_workers | 从节点并行复制线程数 | 8-16(根据CPU核数调整) |
| slave_parallel_type | 并行复制类型 | LOGICAL_CLOCK |
配置方法
1. 直接编辑配置文件
步骤:
使用文本编辑器编辑配置文件:
bashvi /home/tdsql/conf/tdsql.conf修改或添加配置参数
保存文件并重启TDSQL服务:
bashsudo $TDSQL_HOME/bin/tdsqladmin -S /home/tdsql/tdsql.sock shutdown sudo $TDSQL_HOME/bin/tdsql_safe --defaults-file=$TDSQL_HOME/conf/tdsql.conf --user=tdsql &
2. 使用SET命令动态修改
对于支持动态修改的参数,可以使用SET命令在线修改,无需重启服务:
示例:
sql
-- 修改全局参数
SET GLOBAL max_connections = 2000;
-- 修改会话参数
SET SESSION sort_buffer_size = 4194304;
-- 查看参数值
SHOW GLOBAL VARIABLES LIKE 'max_connections';
SHOW SESSION VARIABLES LIKE 'sort_buffer_size';注意:
- 动态修改的参数在重启后会失效,如需永久生效,需同时修改配置文件
- 并非所有参数都支持动态修改,具体请参考TDSQL文档
3. 云服务控制台配置
对于云服务版本的TDSQL,可以通过管理控制台在线配置:
步骤:
- 登录TDSQL管理控制台
- 选择目标实例
- 进入"参数配置"页面
- 修改或调整参数值
- 点击"保存"并应用配置
- 等待配置生效
配置最佳实践
1. 根据硬件资源调整配置
| 硬件资源 | 配置调整建议 |
|---|---|
| CPU | 调整slave_parallel_workers、innodb_thread_concurrency等参数 |
| 内存 | 主要调整innodb_buffer_pool_size参数,建议为物理内存的50%-70% |
| 存储 | 根据存储类型调整innodb_flush_method、innodb_io_capacity等参数 |
| 网络 | 调整max_connections、back_log等参数 |
2. 不同部署模式的配置差异
主节点配置
ini
[mysqld]
# 主节点特有配置
tdsql_mode = master
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 30000
# 二进制日志配置
sync_binlog = 1
enforce_gtid_consistency = ON
gtid_mode = ON
log_slave_updates = ON从节点配置
ini
[mysqld]
# 从节点特有配置
tdsql_mode = slave
rpl_semi_sync_slave_enabled = 1
read_only = 1
super_read_only = 1
# 并行复制配置
slave_parallel_workers = 16
slave_parallel_type = LOGICAL_CLOCK3. 性能优化配置
高并发场景配置:
ini
[mysqld]
max_connections = 4000
thread_cache_size = 500
table_open_cache = 10000
innodb_buffer_pool_size = 48G
innodb_log_file_size = 4G
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_log_at_trx_commit = 2大数据场景配置:
ini
[mysqld]
innodb_buffer_pool_size = 64G
innodb_log_file_size = 8G
innodb_buffer_pool_instances = 8
innodb_page_cleaners = 8
innodb_purge_threads = 44. 安全配置
ini
[mysqld]
# 禁用不必要的功能
skip_symbolic_links = 1
skip_external_locking = 1
# 限制访问
bind_address = 0.0.0.0
max_connect_errors = 10000
# 日志配置
log_error = /home/tdsql/logs/error.log
log_bin = /home/tdsql/logs/binlog
slow_query_log = 1配置验证与管理
1. 验证配置文件语法
使用mysqld --validate-config命令验证配置文件语法是否正确:
bash
$TDSQL_HOME/bin/mysqld --defaults-file=$TDSQL_HOME/conf/tdsql.conf --validate-config2. 查看当前配置
查看所有全局配置:
sql
SHOW GLOBAL VARIABLES;查看特定配置:
sql
SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW GLOBAL VARIABLES LIKE '%log%';查看配置文件路径:
sql
SHOW VARIABLES LIKE 'config_file';3. 配置变更管理
最佳实践:
- 建立配置变更审批流程
- 在测试环境验证配置变更
- 记录配置变更历史
- 定期备份配置文件
- 配置变更后进行性能测试
配置备份:
bash
# 备份当前配置
cp /home/tdsql/conf/tdsql.conf /home/tdsql/conf/tdsql.conf.$(date +%Y%m%d_%H%M%S)4. 常见配置问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 启动失败 | 配置文件语法错误 | 使用mysqld --validate-config验证,查看错误日志 |
| 性能下降 | 配置参数不合理 | 分析慢查询日志,调整相关参数 |
| 连接数不足 | max_connections设置过小 | 增加max_connections参数值 |
| 内存占用过高 | innodb_buffer_pool_size设置过大 | 调整为物理内存的50%-70% |
| 主从延迟 | 从节点配置不合理 | 调整slave_parallel_workers等参数 |
常见问题(FAQ)
Q1: 配置文件中的参数大小写敏感吗?
A1: TDSQL配置文件中的参数不区分大小写,例如server_id和SERVER_ID效果相同。
Q2: 如何确定哪些参数支持动态修改?
A2: 使用以下命令查看参数是否支持动态修改:
sql
SHOW GLOBAL VARIABLES WHERE Variable_name = '参数名';如果参数可以通过SET命令修改,则支持动态修改。
Q3: 配置文件中可以使用注释吗?
A3: 可以,配置文件支持两种注释方式:
- 使用#开头的行
- 使用;开头的行
Q4: 如何设置多个配置文件?
A4: 可以使用!include或!includedir指令包含其他配置文件:
ini
!includedir /home/tdsql/conf.d/
!include /home/tdsql/conf/extra.confQ5: 容器部署时如何修改配置?
A5: 容器部署时,可以通过以下方式修改配置:
- 修改挂载的配置文件,然后重启容器
- 使用docker exec进入容器修改配置,然后重启容器内的TDSQL服务
- 通过环境变量传递配置参数
Q6: 如何查看配置变更历史?
A6: 可以通过以下方式查看配置变更历史:
- 查看配置文件的修改时间和内容差异
- 在云服务控制台查看配置变更记录
- 通过配置管理工具(如Ansible、Puppet)记录变更历史
Q7: 配置参数设置过大或过小会有什么影响?
A7: 配置参数设置不当会影响数据库性能和稳定性:
- 设置过大:可能导致资源浪费或系统崩溃
- 设置过小:可能导致性能瓶颈或功能受限
建议根据硬件资源、业务需求和TDSQL最佳实践进行调整。
Q8: 如何优化配置文件?
A8: 优化配置文件的方法:
- 分析数据库性能瓶颈
- 根据瓶颈调整相关参数
- 在测试环境验证优化效果
- 逐步应用到生产环境
- 定期回顾和调整配置
Q9: 配置文件丢失或损坏怎么办?
A9: 配置文件丢失或损坏的解决方案:
- 从备份中恢复配置文件
- 使用默认配置文件重新配置
- 参考相似实例的配置
- 联系TDSQL技术支持获取帮助
Q10: 如何查看配置参数的默认值?
A10: 可以通过以下命令查看参数的默认值:
sql
SHOW GLOBAL VARIABLES LIKE '参数名';对于未显式配置的参数,将显示默认值。
