在CMD里连接其他服务器的数据库,最直接的办法就是使用数据库自带的命令行客户端,比如SQL Server用sqlcmd、MySQL用mysql、PostgreSQL用psql,通过指定IP、端口、用户名和密码完成登录。 后续要做的,无非是确认客户端工具齐全、网络能通、账号有权限,剩下的都是参数问题。
cmd怎么连接其他服务器的数据库?先解决客户端工具
很多人打开CMD直接敲mysql,结果系统提示“不是内部或外部命令”,原因不是命令错了,而是本机根本没装对应的客户端工具,不同数据库需要不同的命令行工具,官方都提供了独立安装包,不一定要装完整数据库。
| 数据库 | 客户端命令 | 默认端口 |
|---|---|---|
| SQL Server | sqlcmd |
1433 |
| MySQL | mysql |
3306 |
| PostgreSQL | psql |
5432 |
| Oracle | sqlplus |
1521 |
安装后,务必把工具所在目录加入系统环境变量PATH,不加入也能用,只是每次都要敲完整路径,这会让排查问题的效率打折扣,以Windows常见目录为例,SQL Server的命令行工具通常在C:Program FilesMicrosoft SQL ServerClient SDKODBC170ToolsBinn,MySQL客户端通常在C:Program FilesMySQLMySQL Server 8.0bin,根据版本不同,路径略有差异。
cmd连接sqlserver数据库命令怎么敲
先看最典型的语法:
sqlcmd -S 服务器IP,端口 -U 用户名 -P 密码 -Q "SQL语句"
-S指定服务器地址和实例,逗号后跟端口,例如168.1.10,1433-U指定登录名-P指定密码-Q执行一条SQL后立即退出-d指定要连接的具体数据库-i指定.sql脚本文件
举个例子,你在公司内网,要连接一台Windows服务器上的SQL Server数据库,IP是10.10.2,数据库账号是
admin,密码是Passw0rd,想查一下SalesDB里订单表的前5行,命令这样写:
sqlcmd -S 10.10.10.2,1433 -U admin -P Passw0rd -d SalesDB -Q "SELECT TOP 5 FROM Orders"
执行后会出现一列结果,然后直接回到CMD提示符,说明连接成功且查询完成,如果只想进入交互式SQL环境,去掉-Q参数即可,在提示符1>后面输入SQL语句,输入GO执行。
连接不上时,优先检查两件事:目标SQL Server是否启用了TCP/IP协议,以及防火墙是否放行1433端口,据微软官方文档,sqlcmd工具支持在Windows、Linux和macOS上运行,但服务器端的网络服务配置直接影响客户端连接。
用sqlcmd执行SQL脚本
批量脚本在运维场景下非常常见,本地新建一个test.sql,里面写好若干条SQL,然后执行:
sqlcmd -S 10.10.10.2,1433 -U admin -P Passw0rd -i test.sql
脚本里的多条语句会按顺序执行,这种方式比一条条复制粘贴高效得多,适合初始化表结构或定期跑清理任务。
mysql命令行连接远程数据库的几个关键参数
MySQL的命令行参数和SQL Server不太一样,但思路一致,基本语法是:
mysql -h 服务器IP -P 端口 -u 用户名 -p
-h指定主机,-P指定端口,-u指定用户,-p意思是提示输入密码,注意这里有大写和小写的区别,写错很容易连接失败,实际登录命令:
mysql -h 192.168.1.10 -P 3306 -u root -p
回车后输入密码,出现mysql>提示符,就进入远程MySQL了,连接后可以先执行show databases;看看能访问哪些库,再执行use和select开始干活。
MySQL远程连接被拒绝的常见原因
如果提示Host 'xxx' is not allowed to connect,说明账号授权只允许特定主机访问,在本地MySQL里执行:
SELECT user, host FROM mysql.user;
如果root对应的host是localhost,那远程肯定连不上,需要创建或修改一个允许任意主机访问的账号,
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON . TO 'root'@'%'; FLUSH PRIVILEGES;
另外还要检查MySQL配置里的bind-address,如果为0.0.1,服务端只监听本机,外部连接一概拒绝,改完后重启MySQL服务。
网络层面可以用telnet快速验证端口通不通:
telnet 192.168.1.10 3306
如果telnet都没反应,说明服务器或云安全组根本没放行3306端口,先处理防火墙再排查账号权限。
sqlplus:cmd连接oracle数据库命令的常用格式
Oracle在CMD下的连接方式更接近“连接串”写法,最简洁的格式是:
sqlplus 用户名/密码@//服务器IP:1521/服务名
sqlplus scott/tiger@//192.168.1.20:1521/orcl
如果密码有特殊字符,建议改成先输入用户名,再回车密码:
sqlplus scott@//192.168.1.20:1521/orcl
Oracle远程连接失败时,重点看监听器是否启动了,lsnrctl status在服务器上可以快速查看监听状态,行业共识认为,Oracle远程连接问题绝大多数都出在监听和防火墙配置,而不是账号密码本身。
PostgreSQL:用psql命令在cmd中连接远程数据库
PostgreSQL的命令行工具是psql,基本用法:
psql -h 服务器IP -p 5432 -U postgres -d 数据库名
连接成功后出现dbname=>提示符,远程连接前,需要在服务器端的pg_hba.conf里添加一条允许外部访问的记录,比如允许168.1.0/24网段连接,然后重启PostgreSQL服务。
如果觉得传参太麻烦,也可以直接使用连接串:
psql "postgresql://postgres:密码@192.168.1.10:5432/mydb"
两种方式效果一样。
cmd连接数据库常见报错与排查思路
把这些年在论坛上被问得最多的报错汇总到一张蓝图里看,其实就四条线:
- 命令未找到:本机没装客户端工具或PATH没配好。
- 连接超时:IP不可达、端口被防火墙拦截、云安全组没放行。
- 登录失败:用户名或密码写错,账号没有远程访问权限。
- 协议/版本不匹配:MySQL 8默认的认证插件是
caching_sha2_password,如果本地客户端版本过旧,会出现认证不兼容,升级客户端即可。
常见的排查顺序是:先ping服务器IP,再telnet端口,最后用客户端命令试登录,三步走下来,问题基本能定位到网络层、服务层还是认证层,多数情况下,端口不通的比重最大,尤其是云服务器上的数据库,安全组规则常常只开放了22或3389,忘记放行数据端口。
关于cmd连接数据库的几个高频问题
Q1:cmd连接sqlserver数据库命令提示“sqlcmd不是内部或外部命令”,怎么办?
本机没有安装sqlcmd命令行工具,或者安装后路径没加入系统环境变量,解决方式是下载并安装SQL Server命令行工具,然后把sqlcmd所在的Binn目录加入PATH,如果不改环境变量,也可以直接用完整路径调用,例如C:Program FilesMicrosoft SQL ServerClient SDKODBC170ToolsBinnsqlcmd.exe -S ...,两者都可用。
Q2:mysql命令行连接远程数据库时提示“Host ‘xxx’ is not allowed to connect”,如何解决?
问题出在MySQL用户授权上,登录本地MySQL,执行GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '密码';,然后执行FLUSH PRIVILEGES;让权限生效,修改后重启MySQL或刷新权限即可,这个步骤很多运维人员会先想到。
Q3:cmd连接数据库执行SQL脚本是否可以连续执行多条语句?
可以,sqlcmd使用-i参数引入脚本,例如sqlcmd -S 服务器 -U 用户 -P 密码 -i 脚本.sql;mysql则使用source命令直接导入,例如source D:script.sql;,也可以在CMD中用重定向把SQL文件喂给mysql客户端:mysql -h 主机 -u 用户 -p < D:script.sql,脚本中的多条语句会按顺序执行,遇到错误时通常默认停止,但可以在脚本中设置错误处理选项。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/752241.html





