【问题标题】:Emacs how to use ssh tunnel to connect to remote MySQLEmacs如何使用ssh隧道连接远程MySQL
【发布时间】:2013-06-22 00:25:54
【问题描述】:

我有一堆远程 MySQL 服务器,只允许从本地主机连接。要连接到他们,我执行以下操作:

ssh host
mysql -uuser -psecret -hhost.myhost.com

在 emacs 中,我使用 sql-mysql-mode 配置了与本地 MySQL 的连接:

(setq sql-connection-alist
      '((pool-a
         (sql-product 'mysql)
         (sql-server "localhost")
         (sql-user "user")
         (sql-password "secret")
         (sql-database "")
         (sql-port 3306))
        ))

(defun sql-connect-preset (name)
  "Connect to a predefined SQL connection listed in `sql-connection-alist'"
  (eval `(let ,(cdr (assoc name sql-connection-alist))
    (flet ((sql-get-login (&rest what)))
      (sql-product-interactive sql-product)))))

(defun sql-local ()
  "Connect to the local MySQL server"
  (interactive)
  (sql-connect-preset 'pool-a)
  (delete-other-windows))

(define-key global-map [f10] 'sql-local)

所以,每次我点击F10,我都会得到 MySQL shell。

是否可以调整 sql-mysql,使其通过 ssh 连接到外部机器并在该机器上使用 mysql 程序,所以我可以从 Emacs 连接到任何地方?

【问题讨论】:

    标签: emacs sql-mode


    【解决方案1】:

    Sql模式在建立与数据库的连接时使用default-directory,所以如果变量是TRAMP格式,会先使用ssh(或其他)连接远程主机,然后在本地使用数据库客户端。为了自动化你可以做类似的事情

    (defadvice sql-mysql (around sql-mysql-around activate)
      "SSH to linux, then connect"
      (let ((default-directory "/ssh:host.myhost.com:"))
        ad-do-it))
    

    您当然可以将"/ssh:host.myhost.com:" 替换为询问您要连接哪个主机等的函数调用。

    【讨论】:

    • 它给出错误“应用:符号的函数定义无效:sql-get-login”
    • sql-get-login 在 sql.el 中定义。你加载了吗?在定义建议之前尝试(需要'sql)。
    【解决方案2】:

    看一下'sql-mysql-program' to "和'sql-mysql-options'。可以将第一个绑定到"ssh",第二个绑定到"host mysql"。如果emacs没有插入'sql -mysql-login-params',你会很清楚。如果不是这样,你需要创建一个只执行“ssh host mysql”的脚本,然后将'sql-mysql-program'指向那个脚本。

    如果您需要同时使用隧道和非隧道 mysql 连接,您可以考虑向“sql-product-alist”添加一个新元素(类似于“tunneled-mysql”)。

    【讨论】:

    • 好的,让我们先选择更简单的选项。只需在包含ssh -t your_host $* 的名为“mysql_host”的路径中创建一个shell 脚本。然后做一个(setq sql-mysql-program "mysql_host")。让我们知道这是否适合您。
    【解决方案3】:

    从 Emacs 25.1 开始,sql-connection-alist 中有一个新的 sql-default-directory 选项。为每台需要它的服务器设置此项允许您使用来自任何给定服务器的后端程序,而无需任何默认建议或特定于产品的技巧。只是您的连接设置,例如:

    (sql-default-directory "/host.myhost.com:")
    

    或者,如果您出于某种原因需要指定 ssh:

    (sql-default-directory "/ssh:host.myhost.com:")
    

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2017-08-01
      • 2016-11-18
      • 2018-11-06
      • 2021-02-01
      • 2016-08-04
      • 2018-10-06
      • 2015-05-18
      • 2018-06-05
      相关资源
      最近更新 更多