通过SSH连接数据库命令行是管理和操作远程数据库的常用方式,尤其适用于服务器环境或需要直接执行SQL语句的场景,以下是详细操作步骤、常用命令及注意事项,帮助用户高效完成数据库连接与管理。

SSH连接数据库的基本流程
-
建立SSH隧道
在本地终端中,使用SSH命令连接到远程服务器,并建立端口转发,将本地端口映射到远程数据库端口,常用命令格式为:ssh -L 本地端口:数据库主机:数据库端口 用户名@远程服务器IP
将本地3306端口映射到远程服务器的3306端口(MySQL默认端口):
ssh -L 3306:127.0.0.1:3306 root@192.168.1.100
登录后,本地可通过
0.0.1:3306访问远程数据库。 -
连接数据库
隧道建立后,使用数据库客户端工具或命令行工具连接本地映射端口,以MySQL为例:
(图片来源网络,侵删)mysql -h 127.0.0.1 -P 3306 -u 用户名 -p
输入密码后即可进入数据库命令行界面。
常用数据库命令行操作
不同数据库的命令略有差异,以下以MySQL和PostgreSQL为例,列出高频操作命令:
| 操作类型 | MySQL命令 | PostgreSQL命令 |
|---|---|---|
| 查看所有数据库 | SHOW DATABASES; |
\l 或 SELECT datname FROM pg_database; |
| 切换数据库 | USE 数据库名; |
\c 数据库名 |
| 查看表结构 | DESC 表名; |
\d 表名 |
| 执行SQL文件 | SOURCE /path/to/file.sql; |
\i /path/to/file.sql |
| 导出数据 | mysqldump -u 用户名 -p 数据库名 > backup.sql |
pg_dump -U 用户名 数据库名 > backup.sql |
| 导入数据 | mysql -u 用户名 -p 数据库名 < backup.sql |
psql -U 用户名 -d 数据库名 -f backup.sql |
高级技巧与注意事项
-
配置SSH密钥免密登录
通过ssh-keygen生成密钥对,并将公钥(~/.ssh/id_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys中,避免每次输入密码。 -
使用配置文件简化命令
在~/.ssh/config中配置别名,
(图片来源网络,侵删)Host db-server HostName 192.168.1.100 User root Port 22后续可通过
ssh db-server直接连接。 -
数据库连接超时处理
若长时间无操作导致连接断开,可在MySQL配置中设置interactive_timeout和wait_timeout参数,或使用mysql --reconnect参数自动重连。 -
安全建议
- 避免在命令中直接暴露密码,使用
mysql -u 用户名 -p交互式输入。 - 限制SSH访问IP,通过防火墙规则仅允许可信IP连接数据库端口。
- 避免在命令中直接暴露密码,使用
相关问答FAQs
Q1: SSH连接数据库时提示“Access denied”,如何解决?
A: 可能原因包括:
- SSH用户名或密码错误,确认远程服务器登录凭证。
- 数据库用户权限不足,需在远程服务器上为数据库用户授予访问权限(如MySQL的
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%')。 - SSH隧道端口冲突,检查本地端口是否被占用,尝试更换其他端口。
Q2: 如何通过SSH批量执行多条SQL语句?
A: 可通过以下两种方式实现:
- 将SQL语句写入文件(如
commands.sql),使用管道或重定向执行:ssh user@remote "mysql -u db_user -p database_name < commands.sql"
注意:密码可能需要通过SSH密钥或配置文件传递,避免明文暴露。
- 使用
here document直接输入多行命令:ssh user@remote << EOF mysql -u db_user -p database_name USE test_db; INSERT INTO table1 VALUES (1, 'test'); EOF
