【问题标题】:Import mysql dump from local to SSH从本地导入 mysql 转储到 SSH
【发布时间】:2017-09-19 14:35:25
【问题描述】:

我找不到解决这个特殊需求的方法。 我的计算机上有一个 mysql 转储,我想使用 SSH 将它导入到 Web 服务器中。 我怎么做 ? 我可以在mysql命令中添加ssh连接吗?

编辑: 我是用 SCP 做的

scp -r -p /Users/me/files/dump.sql user@server:/var/www/private
mysql -hxxx -uxxx -pxxx dbname < dump.sql

【问题讨论】:

  • 使用 scp 通过 ssh 将 mysql 转储文件发送到远程服务器。
  • 哦,好的。这就是我的想法,但我想知道是否有一个多合一的选择。我会试试这个方法。

标签: mysql sql shell unix


【解决方案1】:

正如上面的评论所说,最简单的解决方案是将整个转储文件 scp 到您的服务器,然后正常恢复。但这意味着您必须有足够的可用磁盘空间来将转储文件存储在您的网络服务器上。你可能不会。

另一种方法是为您的网络服务器设置一个临时的 ssh 隧道。阅读https://www.howtogeek.com/168145/how-to-use-ssh-tunneling/ 以获取完整说明,但它看起来像这样:

nohup ssh -L 8001:localhost:3306 -N user@webserver >/dev/null 2>&1 &

这意味着当我连接到本地主机上的端口 8001(您可以在此处选择任何未使用的端口号)时,它实际上是通过 ssh 隧道绕道到网络服务器,在那里它连接到端口 3306,MySQL 默认港口。

在上面的示例中,您的user@webserver 只是一个占位符,因此您必须将其替换为您的用户名和您的网络服务器主机名。

然后恢复您的转储文件,就像您要恢复到在本地主机上的端口 8001 上运行的假设 MySQL 实例一样。这样您就不必将转储文件发送到您的网络服务器。它将通过 ssh 隧道流式传输到网络服务器,然后直接应用于您的数据库。

pv -pert mydumpfile.sql | mysql -h 127.0.0.1 -P 8001

您必须指定 127.0.0.1,因为 MySQL 客户端使用“localhost”作为非网络连接的特殊名称。

我喜欢使用pv 来读取转储文件,因为它会输出一个进度条。

【讨论】:

    【解决方案2】:

    你可以试试这个解决方案来解决你的问题:

    使用 SSH 详细信息登录:-

    SSH Host name : test.com
    SSH User : root
    SSH Password : 123456
    

    连接 SSH:-

    ssh root@test.com
    enter password : 123456
    

    登录 MySQL:-

    mysql -u [MySQL User] -p
    Enter Password :- MySQL Password
    

    使用以下命令导入数据库:-

    show databases; // List of Databased
    use databasedname; // Enter You databased name to Import databased
    source path;  // Set path for Import databased for ex : /home/databased/import.sql 
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      是的,您可以使用一个命令来完成,只需使用“管道”或“流程替换”

      以“管道”为例:

      ssh user@server "cat /Users/me/files/dump.sql" | mysql -hxxx -uxxx -pxxx dbname
      

      或使用“流程替换”:

      mysql -hxxx -uxxx -pxxx dbname < <(ssh user@server "cat /Users/me/files/dump.sql")
      

      示例 2,从远程服务器 1 获取数据库转储并使用“管道”在远程服务器 2 上恢复:

      ssh user@server1 "mysqldump -uroot -p'xxx' dbname" | ssh user@server2 "mysql -uroot -p'xxx' dbname"
      

      或“流程替换”:

      ssh user@server2 "mysql -uroot -p'xxx' dbname" < <(ssh user@server1 "mysqldump -uroot -p'xxx' dbname")
      

      其他链接:

      什么是“流程替代”:

      http://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html

      什么是“管道”:

      http://www.gnu.org/software/bash/manual/html_node/Pipelines.html

      【讨论】:

        猜你喜欢
        • 2018-05-22
        • 1970-01-01
        • 1970-01-01
        • 2023-02-20
        • 2012-06-04
        • 2017-09-27
        • 2016-10-23
        • 1970-01-01
        • 2015-05-24
        相关资源
        最近更新 更多