【问题标题】:Copying tables from database from MySQL Server on different server to my computer将数据库中的表从不同服务器上的 MySQL 服务器复制到我的计算机
【发布时间】:2018-12-01 03:35:16
【问题描述】:

我需要使用大学服务器上的数据库表来存储项目的测试数据。 我对数据库和 MySQL 很陌生。我的教授已将服务器的用户名和密码发送给我。以及 MySQL 服务器的额外用户名和密码。 我花了一段时间,但最后我能够通过 ssh 连接到服务器,然后设法导航到 $cd / $cd usr/bin/MySQL 然后登录并在其中一个表中找到数据/句子数据库。

现在有一个问题:如何获取计算机上的数据?我想到了一个python脚本。但是我不能编写一个脚本,在不同的服务器上登录,然后导航到 MySQL 文件夹以登录那里,以某种方式将表中的句子复制到我可以使用的 txt 文件中?

【问题讨论】:

标签: python mysql database ssh


【解决方案1】:

您可以使用mysqldump 程序(如果它在您的机器上可用)来获取您需要的表的转储。

如果您希望将转储作为 SQL 格式,以便将其插入到您自己的数据库中,您可以调用它

mysqldump -u "USERNAME" -p "PASSWORD" -h "HOSTNAME" "DATABASE" "TABLE" > dump.sql

强烈建议省略密码,这样您的密码就不会保存在 shell 历史记录中。执行期间会提示您输入它。

你会得到一个包含所有 SQL 查询的文件来重新创建这个表。 您也可以将该表中的数据导出为 CSV 或 XML,具体取决于调用时使用的参数。

如果数据库服务器只能从您提到的第二台服务器访问,但您可以通过 ssh 访问此服务器,那么您可以尝试调用

ssh USER@HOST 'mysqldump --version'

希望为您提供类似于此的输出:

mysqldump  Ver xx.yy Distrib x.y.z, for debian-linux-gnu (x86_64)

如果是这样,您就会知道安装了该程序,您可以使用以下行

ssh USER@HOST 'mysqldump -u "USERNAME" -p "PASSWORD" -h "HOSTNAME" "DATABASE" "TABLE"' | cat > dump.sql

这应该会在您的本地计算机上向您显示转储。

【讨论】:

  • 非常感谢您的回答。 mysqldump 安装在这个版本上。不幸的是,我收到此错误:mysqldump: Got error: 2005: Unknown MySQL server host 'mysql@server' (0) 尝试连接时我无法通过主机名连接到 mysql 服务器我需要导航到 usr/ bin 文件夹以使用 mysql 打开 mysql 数据库 --user=**** --password=**** 在哪里可以看到主机名是什么?
  • 可以直接调用mysql -u USER -p PASSWORD DATABASE 得到mysql提示吗?
【解决方案2】:

您可能不需要 ssh 进入远程服务器;根据他们的服务器和数据库的设置方式,您可以将本地计算机上的 mysql 客户端连接到数据库服务器。虽然限制从哪里 允许连接有安全优势,但访问localhost 的数据库实际上只是一种特殊情况。

您甚至可能不需要 python 脚本。您可以直接从 mysql 导出到文本文件,或者您的客户端可能具有将数据直接从远程服务器复制到本地数据库的功能。

我猜想这样的事情会为你工作,虽然将输出转换成你想要的格式可能会很棘手:
mysql -h "host address" -u "username" -p -e "SELECT * FROM `table`" > localFile.txt

如果您想使用在服务器上运行的 python 脚本来执行此操作,如您所描述的,您将需要使用 ssh 凭据通过 SSH 执行 FTP 来来回获取文件。您的 FTP 客户端肯定会支持这一点。

【讨论】:

  • ERROR 2005 (HY000): Unknown MySQL server host 这是我尝试连接到 MySQL@"text" 时得到的结果。也许我正在尝试连接到错误的服务器,但这是我发送到的服务器名称
  • 所以我有大学服务器的用户凭据和数据库的用户凭据
  • 我实际上会建议Olli's answer 而不是我自己的;虽然您可能想学习 mysql CLI,但 mysqldump 是解决您当前问题的更直接的方法。
  • 关于主机名,这两种方法都需要:它与 ssh 进入服务器时使用的名称/域/主机/地址相同。你不需要 _x_@host;您可能会使用裸域名,因为在建议的两种方法中,您都会将数据库用户名和数据库名称作为显式参数提供。
猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多