Docker中Trino无法列出MySQL及MS SQL Server的表与架构
Trino无法查询MySQL/MSSQL容器数据库的排查方案
1. 验证容器间网络连通性
Docker容器间默认隔离,先确认Trino与MySQL/MSSQL容器是否在同一网络:
- 进入Trino容器:
docker exec -it <trino-container-name> bash - 测试MySQL连通性:
nc -zv <mysql-container-ip/name> 3306 - 测试MSSQL连通性:
nc -zv <mssql-container-ip/name> 1433
如果连通失败,需将所有容器加入同一自定义网络:
docker network create trino-shared-net # 重启容器时添加--network trino-shared-net参数,之后可直接用容器名作为主机名访问
2. 核对Catalog配置细节
检查宿主机映射到Trino容器/etc/trino/catalog/下的配置文件:
MySQL配置(mysql.properties)
connector.name=mysql connection-url=jdbc:mysql://<mysql-container-name>:3306/?useSSL=false&allowPublicKeyRetrieval=true connection-user=<your-mysql-user> connection-password=<your-mysql-pass>
- 必须添加
allowPublicKeyRetrieval=true,适配MySQL 8.0+的权限验证逻辑 - 确认用户拥有目标数据库的
SELECT权限:GRANT SELECT ON *.* TO 'user'@'%';
MSSQL配置(mssql.properties)
connector.name=mssql connection-url=jdbc:sqlserver://<mssql-container-name>:1433;databaseName=<target-db-name>;encrypt=false connection-user=<your-mssql-user> connection-password=<your-mssql-pass>
- 必须指定
databaseName,否则Trino无法定位目标库 - 给用户分配必要权限:
GRANT VIEW DEFINITION TO <username>; GRANT SELECT ON SCHEMA::dbo TO <username>;
3. 检查JDBC驱动兼容性
Trino连接器依赖对应版本的JDBC驱动,确认容器内驱动版本与数据库匹配:
- MySQL驱动路径:
/usr/lib/trino/plugin/mysql/mysql-connector-java-*.jar(MySQL 8.0需用8.x版本驱动) - MSSQL驱动路径:
/usr/lib/trino/plugin/mssql/mssql-jdbc-*.jar(MSSQL 2019需用12.x+版本驱动)
驱动不兼容时,替换为对应版本后重启Trino容器。
4. 针对CLI错误定向排查
根据CLI返回的错误信息直接定位:
Connection refused:回到网络连通性检查,确认端口映射/容器网络配置Access denied:核对用户名密码,确认数据库用户允许Trino容器IP访问Schema not found:查询时需指定完整路径,如SELECT * FROM mysql.mydb.mytable;SSL connection error:在JDBC URL中添加useSSL=false(MySQL)或encrypt=false(MSSQL)
5. 查看Trino日志定位深层问题
查看Trino容器内的服务器日志获取详细错误堆栈:
docker exec <trino-container-name> tail -f /var/log/trino/server.log
日志会暴露驱动加载失败、权限不足、SQL语法兼容等底层问题,可针对性修复。
内容的提问来源于stack exchange,提问作者Marcus Henningsen
相关产品推荐
相关产品推荐

