MySQL作为数据库,简直就是易用的代名词,绝大多数数据库驱动的web应用程序都选择它做为自己的数据库。正因如此,MySQL被应用于很多WEB服务器上。虽然说MySQL的命令行工具确实有用,但要它完成任务有时实在是在跟时间过不去,除非你对SQL语法已经通吃,熟到炉火纯青的地步。正是由于这个原因,像PhpMyAdmin之类的工具已经变得如此流行。
MySQL开发者们已经开始使用他们自己的GUI工具,它们能够用来和本地或远程的MYSQL数据库进行连接。这些工具包括MySQL Administrator、MySQL Query Browser、以及MySQL Workbench。它们都是不错的图形界面的工具,简化了对MySQL数据库的创建和操作。
使用这些工具操作远程数据库的问题是,它们通常要求你使MySQL对WEB接口进行监听;而大多数MySQL管理员只会选择对本地主机或某个套接字开启MySQL监听,而不会允许远程连接。这是很好的安全习惯;可是,它让你不花出一点点努力就别想舒舒服服地远程使用这些GUI工具。这里使用ssh隧道[2](tunnel)进行连接效果极好。它不仅允许高强度验证和加密,而且对于 MySQL只监听本地连接的设定也毫不妥协。
首先,必须要保证MySQL监听本地主机[2](默认情况下它只监听本地套接字上的连接),这可以通过告诉MySQL允许WEB连接并重新启动服务器来实现。MySQL应该配置成只监听loopback接口,或者本地接口,或者WEB接口。
接下来,编辑你希望用来发起连接的主机上的~/.ssh/config文件,并插入如下内容:
Host remotesql ?Hostname webserver.domain.com ?User joe ?LocalForward *:13306 localhost:3306
这会以用户joe连接webserver.domain.com,并且把本地系统上的13306端口转发(forward)到webserver.domain.com的3306端口(这是标准MySQL端口)。注意我们没有把被转发端口和本地机器上的本地接口进行绑定,而是指向了所有接口;这就是说我们可以连上me.domain.com的13306端口(假设 me.domain.com是本地工作站的名字),而不是去连接本地主机上的13306端口(这很重要,因为这些GUI工具会试图使用一个套接字来连接本地主机,而这不是我们希望的。)现在你可以发起连接,方法是执行:
$ ssh -f -N remotesql
最后,激活MySQL的管理员账户,并且通过你的信任证书,让它连接me.domain.com的13306端口(而不管它是用户账户还是根账户)。为了正常连接,你可能不得不给user@localhost.localdomain许可。
这样做之后,你将能够使用本地WEB上的任何一个系统,跨越Internet而又毫无风险的连接远程数据库(除非本地机器上防火墙规则阻止了它),这样之后,你仍然可以使用本地的MySQL命令行工具操作远程数据库:
$ mysql -u root -p -h me.domain.com -P 13306