目标:
我正在尝试将数据库复制到运行 Windows Vista 的本地机器上。
设置:
- 在 Windows Vista 上使用 MySQL 5.1 (mysql-essential-5.1win32)
- 在 Linux 机器上:MySQL Ver 14.12 Distrib 5.0.51a,
- 我在 PuTTY 上设置了 SSH 隧道,方法如下:
- 源端口 3306,目标:localhost:3307
- 我使用 3307,因为我在 3306 上运行着自己的 Windows Vista 数据库
我可以在 Linux 机器上本地登录数据库,但是,当我尝试使用 MySQL 管理员登录时
- 服务器主机:127.0.0.1 端口 3307
- 用户名:someUser
- 密码:某个密码
失败并显示以下消息:MySQL 错误号 2003 无法连接到 127,0.0.1 上的 MySQL 服务器(10061)
我怎样才能解决这个问题?
答案1
听起来你搞反了。目的地不是你的环回,而是另一个网络上的远程机器。或者你使用远程而不是本地作为隧道。
尝试翻转 IP 地址,例如:
putty.exe -L 3307:mysql.yourdomain.com:3306
其中 mysql.yourdomain.com 是具有您尝试连接的 MySQL 服务的主机的名称。当 putty 弹出连接对话框时,输入地址、连接并登录。然后使用管理员工具连接到 localhost:3307。
答案2
我刚刚在 Windows 7 上试过,但它对我来说也不起作用。端口将被转发,但不会重新映射。它将静止不动localhost:3306
,在您的情况下与本地服务器发生冲突。PuTTY 文档也说这是正确的方法,但也许 Windows Vista 的新安全模型会阻止端口的重新映射。
我建议,如果你在本地使用端口 3306,不要通过隧道连接到本地主机(通常映射到127.0.0.1
),但要通过隧道连接到您环回范围内的另一个 IP 地址(可能127.0.0.2
)。如果您的本地 SQL 服务器配置良好,它只侦听127.0.0.1:3306
,您的远程隧道 SQL 服务器可以侦听127.0.0.2:3306
,因此无需重新映射端口。
答案3
您不想或不需要使用 PuTTY 来远程访问数据库。
如果您有权限从本地计算机连接到远程数据库,则您可以mysqldump --host=remotemachine --user=remotesqluser --password=remotepassword --databases databasename>database.dump
在 Vista 上使用,然后将其加载到本地机器上mysql --port=3307 --host=127.0.0.1 --user=localsqluser --password=localpassword <database.dump
- 如果您在本地运行 Linux,我只需将一个程序导入另一个程序,但我不知道 Vista 的 cmd.exe 是否支持这一点。
如果你不能远程连接,但具有 Linux 数据库的管理员访问权限,您可以使用grant select on databasename.* to 'remotesqluser'@'yourexternalIPaddress' identified by 'remotepassword';
(我认为select
您只需要)授予自己权限(在远程 MySQL 命令行)。获得访问权限后,您可以按上述方式复制数据库。revoke
完成后,使用 放弃权限。
如果你做不到这些,你将要需要 PuTTY:连接到 Linux 机器并mysqldump
在那里运行命令(使用--host=127.0.0.1
)。使用您喜欢的任何方式将转储文件复制到您的 Windows Vista 机器 - 如果您有方便的 Web 服务器,可以使用 SCP、FTP 和 HTTP - 然后您可以像上面一样在本地加载数据库。完成后,不要忘记删除 Linux 机器上的转储文件。
笔记如果您的 mysqldump 选项设置不合理,您可能需要添加--extended-insert
到命令中以加快速度(允许使用多行插入),以及数据库中是否有任何存储过程需要传输--routines
。