用cmd连接服务器数据库,核心是调用对应数据库的客户端命令(如mysql、sqlcmd),加上正确的IP地址、端口、用户名和密码参数,整个过程只要服务器开了远程访问权限、防火墙放行端口,就能在本地命令行完成连接。
下面我会把Windows环境下的cmd操作拆开细讲,覆盖MySQL和SQL Server两种常见场景,包含命令、参数说明和排错办法,这不是泛泛的教程,每一步都可以直接复制执行。
cmd连接mysql数据库命令的完整用法
连接MySQL是cmd里最常见的数据库操作,服务器上装了MySQL服务端后,你本地需要先有mysql客户端,Windows上一般通过安装MySQL官方组件或集成环境获得。
基础连接命令结构
打开cmd,输入以下格式的命令:
mysql -h服务器IP -P端口号 -u用户名 -p
-h后面跟服务器地址,-P(大写P)是端口号,MySQL默认3306。-u后面是数据库账号,-p会提示你输入密码,注意:-p和密码之间不要有空格,直接写如-p123456,但为了安全,建议只输-p回车后再输入密码。
实际执行时,如果你本机装了MySQL 5.x客户端,连8.0版本的服务器,可能会遇到认证插件不兼容的问题,报错信息通常是Authentication plugin 'caching_sha2_password' cannot be loaded,解决办法有两个:一是把客户端升级到8.x版本;二是在服务器上把该用户的认证插件改回mysql_native_password(不推荐生产环境使用)。
带数据库名直连的快捷方式
如果你明确知道要操作哪个库,可以这样写:
mysql -h192.168.1.100 -P3306 -uroot -p mydb
在命令末尾加上数据库名mydb,连接成功后直接进入该库,这个小技巧比进去后再敲use mydb省一步。
cmd远程连接数据库的完整前置条件
很多新手卡在“命令敲了没反应”或“Access denied”上,觉得是命令本身写错,其实大部分情况是前置条件没满足。
服务器端必须开启远程访问
MySQL默认配置下,root账号只允许localhost登录,你需要先在服务器上执行:
GRANT ALL PRIVILEGES ON . TO '用户名'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;
表示任意IP都能连,实际生产环境建议换成具体IP地址,比如'root'@'192.168.1.50',锁死访问来源。
防火墙和安全组放行3306端口
这是Windows服务器和云服务器最容易忽略的一步,服务器控制台需要放行入站规则里对3306的访问,具体到Windows Server,打开“Windows Defender防火墙”,新建入站规则,选端口,填3306,允许连接即可。
云服务器(简米云、酷番云等)还需要在控制台的安全组里额外放行一次,两边都配好,cmd才能连通。
Windows命令行连接服务器数据库的两种场景实操
MySQL命令行里执行sql文件
连上数据库后,经常需要导入脚本,这时不用打开图形工具,在cmd里直接用source命令:
mysql -uroot -p
source D:\backup\data.sql;
或者不用登录,直接重定向文件:
mysql -h192.168.1.100 -uroot -p mydb < D:\backup\data.sql
第二种方式适合自动化脚本批量执行,重定向符号<会把sql文件内容喂给mysql命令。
SQL Server数据库用sqlcmd连接
SQL Server不怎么提mysql,微软系的产品用的是sqlcmd工具,SQL Server 2016及以上版本通常已经自带,无需额外安装。
sqlcmd -S 192.168.1.100,1433 -U sa -P yourpassword
-S指定服务器地址和端口,注意是逗号不是冒号。-U是登录名,-P是密码,连接成功后会出现1>提示符,输入SQL语句后回车,再输入GO执行。
如果要直接运行查询并输出结果:
sqlcmd -S 192.168.1.100,1433 -U sa -P yourpassword -Q "SELECT name FROM sys.databases"
-Q参数直接执行后面的SQL语句,这里要注意,SQL Server默认实例的端口是1433,命名的实例则需要单独确认端口号,可以通过SQL Server配置管理器查看。
我遇到的实际情况是,sqlcmd连接SQL Server 2019时,默认情况下协议是启用的,比MySQL少一步配置,但前提是服务器上SQL Server的“允许远程连接”选项要打开,这个选项在SSMS(SQL Server Management Studio)的实例属性里能找到。
cmd连接数据库需要什么条件:环境变量配置
你可能会遇到命令行提示“mysql不是内部或外部命令”,这代表系统不知道mysql.exe在哪,解决办法是配置环境变量。
打开系统属性,点击“环境变量”,在系统变量找到Path,点击编辑,把mysql的bin目录路径加进去,比如你装在D盘:
D:\phpstudy_pro\Extensions\MySQL8.0.12\bin
加好后重新打开cmd,mysql命令就能直接识别了,如果你不想动环境变量,每次也用完整路径:
D:\phpstudy_pro\Extensions\MySQL8.0.12\bin\mysql -uroot -p
cmd远程连接数据库失败最常见的报错及其原因
连接失败是常态,能一次连通反而说明环境简单,把报错信息看清楚,比盲目改参数更重要。
报错ERROR 2003 (HY000):Can’t connect
这个报错说明网络都不通,按顺序检查:
- 服务器的IP能不能ping通
- 3306端口有没有放行(用
telnet 服务器IP 3306测试) - 云服务器安全组是否已添加规则
报错ERROR 1045 (28000):Access denied
密码错误或者账号不对,先确认跳过密码的本地root能不能登录,再确认远程账号是否真的存在,用root从本机登录后执行SELECT user,host FROM mysql.user;,看看该账号的host是否包含了你的来源IP。
报错ERROR 1130:Host is not allowed to connect
服务器授权表里没有允许你这个IP访问,回到前面提到的GRANT授权语句,把host部分改正确,然后FLUSH PRIVILEGES刷新授权表。
| 报错代码 | 含义 | 优先排查方向 |
|---|---|---|
| 2003 | 网络不通或端口未监听 | 防火墙、安全组、服务器服务是否启动 |
| 1045 | 认证失败 | 用户名密码、账号权限 |
| 1130 | 来源IP被拒绝 | GRANT授权范围、host字段配置 |
连上数据库后常用cmd内操作命令
连接成功后进入命令行交互界面,以下操作是高频刚需,建议直接抄进备忘本。
查看所有数据库:
SHOW DATABASES;
切换数据库并查看表:
USE mydb;
SHOW TABLES;
查看表结构:
DESC table_name;
批量导出整个数据库备份(在系统cmd环境下执行,不是mysql交互环境):
mysqldump -h192.168.1.100 -uroot -p mydb > D:\backup\mydb.sql
mysqldump是MySQL自带的备份工具,在bin目录下和mysql.exe同级,执行后按提示输密码,备份文件就存到你指定的路径了,这个命令在企业运维里非常常见,是命令行日常运维的重要一环。
cmd连接数据库报错中期权认证问题
MySQL 8.0改变了默认认证插件,从mysql_native_password变成了caching_sha2_password,旧版本客户端(5.7及以下)默认不支持新插件,连接时会直接报错,解决办法是升级客户端,或者在服务器上改用老插件:
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
生产环境不建议长期使用老插件,因为它安全性弱于新插件,更推荐的是更新本地客户端到8.x版本,很多云服务器的默认数据库版本已经到了8.0。
命令行操作数据库安全注意事项
命令行直接操作服务器数据库,权限大,风险也大,业内专家指出,大多数数据库安全事故发生在运维人员执行了没有经过评审的SQL语句,有几点值得养成习惯。
- 命令里明文写密码会留在cmd历史记录里,建议只写-p不写密码,手动输入。
- 不要在公网环境下不启用SSL连接数据库,MySQL 8.0支持
--ssl-mode=REQUIRED参数:
mysql -h服务器IP -uroot -p --ssl-mode=REQUIRED
- 生产环境禁止用root直接连库,日常操作用最小权限账号,仅授予具体库的增删改查权限。
如何用cmd连接服务器数据库全流程速查
不同公司的服务器环境千差万别,但底层逻辑是通用的,我把思路整理成一个简洁的速查清单,跟着做基本能通。
- 确认客户端程序存在(mysql.exe或sqlcmd)
- 确认服务器数据库服务正在运行(服务器上执行
netstat -an | findstr 3306) - 确认防火墙放行对应端口
- 确认数据库账号有远程访问权限
- 在cmd里执行连接命令,留意观察报错信息
- 连接成功后先
SHOW DATABASES;验证当前权限范围
这几步跑完,链路基本就通了,如果还不行,建议把报错原文粘到搜索引擎里,比你盲改要快得多。
Q&A:cmd连接服务器数据库常见问题
cmd连接数据库报“无法加载认证插件”怎么解决?
换成MySQL 8.0以上版本的客户端工具,如果客户端版本没法升级,在服务器端对目标账号执行ALTER USER '账号'@'主机' IDENTIFIED WITH mysql_native_password BY '新密码';来切换认证方式,切换后重试连接即可,该操作不影响已有数据。
cmd里有mysql命令,但提示Access denied,密码肯定没错,是哪里写错了?
一种常见原因是-p参数后面多加了空格或标点。-p 密码这种方式会不生效,正确写法需要把密码紧跟在-p后面,比如-pMyPassword,如果不想暴露密码在屏幕上,直接输-p然后回车,在Password提示符下粘贴输入,还有一个原因是本来就存在多个MySQL实例,你连的并不是刚开始以为的那个服务器,核对端口和IP避免混淆。
用cmd连服务器数据库,与用Navicat连服务器数据库相比,哪个更好用?
Navicat学习成本更低,适合直接看数据表结构的操作场景,cmd环境更侧重脚本化处理、定时任务和快速排障,适合批量操作和维护场景,执行速度更快且不受图形界面限制,生产环境的服务器通常不带图形工具,只开命令行端口,想要远程排查时离开cmd不行,两者不是一个替代关系,多数工程师桌面有Navicat,远程连接到服务器排查问题时,换用cmd更省事。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/772602.html


