如何从仅绑定localhost的远程服务器导出MySQL数据库?
从仅绑定localhost的远程服务器导出MySQL数据库的方案
你的mysqldump命令失败,核心原因是远程MySQL服务仅绑定了localhost(127.0.0.1),外部无法直接访问其3306端口。下面提供两种可行的解决思路:
思路一:SSH本地端口转发
先通过SSH隧道将远程服务器的MySQL端口映射到本地,再从本地连接导出:
- 建立SSH隧道(新开终端执行,保持窗口运行):
ssh -L 3307:127.0.0.1:3306 <remote_ssh_user>@<remote_machine_ip>
参数说明:-L表示本地端口转发,格式为本地端口:远程服务器内部地址:远程服务端口,这里填127.0.0.1是因为MySQL仅绑定远程服务器自身的localhost。
- 另开终端执行导出命令,连接本地映射的端口:
mysqldump -u<mysql_user> -p -h 127.0.0.1 -P 3307 <database_name> > dump.dmp
- 去掉命令行中的明文密码,只保留
-p,执行时交互式输入更安全; - 若需导出单个表,将
<database_name>替换为<database_name>.<table_name>; -P(大写)指定端口,对应之前映射的本地3307端口。
思路二:直接通过SSH执行远程mysqldump
无需端口转发,直接让远程服务器运行mysqldump,并通过SSH将输出传回本地保存:
ssh <remote_ssh_user>@<remote_machine_ip> "mysqldump -u<mysql_user> -p <database_name>" > dump.dmp
执行时会先提示输入SSH登录密码,再提示输入MySQL密码,最终导出文件直接保存在本地。
额外提示
- 如果本地3307端口被占用,可替换为其他未使用的端口(如3308),注意两处命令的端口保持一致;
- 若想让SSH隧道在后台运行,可添加
-fN参数:ssh -fN -L 3307:127.0.0.1:3306 <remote_ssh_user>@<remote_machine_ip>,导出完成后可通过ps aux | grep ssh找到进程并终止。
内容的提问来源于stack exchange,提问作者APA
相关产品推荐
相关产品推荐

