要连接数据库,CRT(SecureCRT)本身并不直接提供数据库连接功能,但可以通过其强大的终端模拟和脚本支持,结合命令行工具(如MySQL、PostgreSQL、Oracle SQL*Plus等)实现数据库连接,以下是详细步骤和注意事项,涵盖不同数据库类型的连接方法、常见问题及解决方案。

准备工作
在通过CRT连接数据库前,需确保以下环境已配置完成:
- 安装数据库客户端:根据目标数据库类型(MySQL、PostgreSQL、Oracle等),安装对应的命令行客户端工具,MySQL需安装
mysql-client
,PostgreSQL需安装psql
,Oracle需安装SQL*Plus。 - 配置网络连通性:确保CRT所在主机与数据库服务器之间的网络连通,可通过
ping
或telnet
测试数据库端口(如MySQL默认3306,PostgreSQL默认5432,Oracle默认1521)。 - 获取连接信息:包括数据库服务器IP/主机名、端口号、用户名、密码、数据库名(可选)。
CRT连接数据库的具体步骤
打开CRT并创建新会话
- 启动CRT,点击“文件”→“新建会话”,输入数据库服务器的IP地址或主机名,选择协议(通常为SSH,若数据库直接暴露则用Telnet,但SSH更安全),设置端口号(SSH默认22)。
- 填写会话名称(如“MySQL_DB”)并保存,双击会话即可建立与服务器的SSH连接。
通过SSH隧道连接数据库(推荐)
若数据库仅允许本地访问或需加密传输,可通过SSH隧道转发端口:
- Linux/macOS服务器:在SSH连接命令中添加端口转发,
ssh -L 3307:localhost:3306 user@db_server_ip
上述命令将本地3307端口映射到数据库服务器的3306端口。
- Windows服务器:使用PuTTY或CRT的内置端口转发功能,在SSH连接属性中设置“本地端口转发”:
- 源端口:本地任意端口(如3307)
- 目标:数据库服务器IP:数据库端口(如localhost:3306)
连接成功后,本地可通过localhost:3307
访问数据库,避免直接暴露数据库端口。

启动数据库客户端并连接
根据数据库类型,在CRT终端中执行以下命令:
(1)MySQL连接
mysql -h localhost -P 3307 -u username -p database_name
-h
:数据库服务器地址(若通过SSH隧道,则为localhost
);-P
:端口号(SSH隧道映射的本地端口);-u
:用户名;-p
:提示输入密码(安全建议,避免在命令中直接写密码);database_name
:目标数据库名(可选,不指定则登录后需手动选择)。
连接成功后,显示mysql>
提示符,可执行SQL语句。
(2)PostgreSQL连接
psql -h localhost -p 5432 -U username -d database_name
-h
:服务器地址;-p
:端口号(PostgreSQL默认5432);-U
:用户名;-d
:数据库名。
首次连接可能需输入密码(若未配置信任连接),或通过PGPASSWORD
环境变量指定密码(避免交互输入)。
(3)Oracle连接(SQL*Plus)
sqlplus username/password@localhost:1521/XE
username/password
:用户名/密码(需提前配置Oracle客户端网络环境变量tnsnames.ora
);localhost:1521/XE
:数据库地址、端口和服务名(XE
为Oracle Express默认服务名)。
若未配置tnsnames.ora
,可使用Easy Connect语法(Oracle 12c及以上):

sqlplus username/password@//localhost:1521/XE
验证连接并执行操作
连接成功后,可执行简单SQL验证,如MySQL的SELECT 1;
,PostgreSQL的\l
(列出数据库),Oracle的SELECT * FROM v$version;
,若返回结果,说明连接正常。
常见问题及解决方法
连接失败提示“Access denied”或“authentication failed”
- 原因:用户名或密码错误;数据库用户未允许从当前主机访问。
- 解决:
- 检查用户名密码是否正确(注意大小写和特殊字符);
- 登录数据库服务器,执行MySQL的
SELECT host, user FROM mysql.user;
,确认用户权限(如表示允许任意主机,localhost
仅允许本地); - 修改用户权限,例如MySQL中执行:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
提示“Can't connect to MySQL server on 'localhost:3306'”
- 原因:数据库服务未启动;端口被占用;防火墙拦截。
- 解决:
- 检查数据库服务状态,如MySQL执行
systemctl status mysql
,未启动则执行systemctl start mysql
; - 使用
netstat -tuln | grep 3306
检查端口是否监听; - 服务器防火墙开放端口,如Linux执行:
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload
- 检查数据库服务状态,如MySQL执行
CRT中文显示乱码
- 原因:终端编码与数据库返回结果编码不一致(如数据库为UTF-8,CRT默认为GBK)。
- 解决:
- 在CRT会话属性中设置“终端”→“字符编码”为UTF-8;
- 数据库客户端中执行
SET NAMES utf8;
(MySQL)或\encoding UTF8
(PostgreSQL)。
不同数据库连接命令速查表
数据库类型 | 客户端工具 | 基本连接命令 | 关键参数说明 |
---|---|---|---|
MySQL | mysql | mysql -h host -P port -u user -p db |
-h :主机;-P :端口;-u :用户;-p :密码 |
PostgreSQL | psql | psql -h host -p port -U user -d db |
-U :用户;-d :数据库 |
Oracle | SQL*Plus | sqlplus user/pass@host:port/service |
service :服务名(需配置tnsnames.ora) |
相关问答FAQs
Q1: 通过CRT连接数据库时,如何避免在命令行中暴露密码?
A1: 可通过以下方式隐藏密码:
- 环境变量:如MySQL设置
export MYSQL_PWD="password"
,再执行mysql -h host -u user -p db
; - 配置文件:在用户家目录创建
.my.cnf
(Linux/macOS)或my.ini
(Windows),添加:[client] user=username password=password host=localhost port=3307
并设置文件权限为
600
(仅所有者可读),之后直接执行mysql -p db
即可自动读取配置。
Q2: CRT连接数据库后,如何高效执行批量SQL脚本?
A2: 可通过以下方式批量执行SQL:
- 重定向输入:在CRT终端中执行
mysql -u user -p db < script.sql
(Linux/macOS),或mysql -u user -p db -e "source script.sql"
(Windows); - 客户端内置功能:如MySQL的
source
命令(在mysql>
提示符下执行source /path/to/script.sql
),PostgreSQL的\i script.sql
,Oracle的@script.sql
。 - CRT脚本录制:通过CRT的“脚本”→“录制会话”,将SQL命令保存为.vbs脚本,后续一键执行。