Overview

今天跟Young在做secretepdb这个项目时,需要使用Hibernate连接数据库,为了方便一起开发,就直接连接了我们在阿里云服务器上的MySQL,遇到了一些问题,有些是本地数据库和远程数据库的共性问题,有些则是连接远程数据库才会遇到的问题,在这里记录,以便共享和以后查阅。

1. MySQL安装

Ubuntu上,使用如下命令安装:

sudo apt-get install mysql-server

安装过程中会要求配置MySQLroot用户的密码,要牢记这个密码,不然会很麻烦。

安装之后的目录在:/etc/mysql,其中,my.cnf就是MySQL的配置文件,我们对MySQL所有的配置几乎都是在这里完成的。

2.MySQL命令

因为在不同版本的服务器,甚至使用不同方式安装的MySQL,启动,关闭MySQL等命令都有所不同,所以我们在这里记录一下在我们的服务器(Ubutun 14.04)上适用的这些命令,方便我们使用。

  • Ubuntu上mysql配置文件位置:/etc/mysql/my.cnf
  • mysql关闭命令:/etc/init.d/mysql stop
  • mysql启动命令:/etc/init.d/mysql start
  • mysql重启命令:/etc/init.d/mysql restart

3. MySQL通用配置

3.1 MySQL会话时间

无论是连接本地MySQL还是远程服务器上的MySQL,通常来说设置一组比较长的会话时间总是好的,在/etc/mysql/my.cnf中添加如下三句代码:

wait_timeout=31536000
interactive_timeout=31536000
connect_timeout=31536000

4. 远程MySQL配置

如果你想让你的网站连接一个远程服务器上的MySQL,而不是网站所在的服务器上的服务器,那么你需要配置远程服务器上的MySQL,才能像访问本机MySQL一样访问远程MySQL

我们远程MySQL以及服务器配置如下:

服务器地址:120.24.231.154
MySQL端口号:3306

4.1 激活MySQL的网络设置

  1. 默认情况下,为了安全起见,MySQL的配置是只支持本机访问的,因此我们需要修改/etc/mysql/my.cnf中的配置,如果/etc/mysql/my.cnf中有

     skip-networking
    

    这句代码,将它注释掉:

     #skip-networking
    

高版本的MYSQL中默认已经没有了这项配置。

  1.  bind-address = 127.0.0.1
    

    改为:

     bind-address = 120.24.231.154
    

    这里的120.24.231.154就是远程MySQL所在的服务器的IP地址。

但是这样的问题就是,当你需要本地连接数据库时,还要再改回来,很不方便,所以可以直接将这一句注释掉,这样就允许所有的IP地址远程连接了,唯一的问题在于没那么安全。

  1. 保存并关闭配置文件,并重启mysql服务器:

     /etc/init.d/mysql restart
    

4.2 授权

在修改配置允许了MySQL接受远程访问之后,还需要授权,使MySQL允许某一个IP地址或者所有的IP地址的远程连接。

  1. 登录到远程MySQL所在的服务器,使用root账号打开MySQL:

     mysql -u root -h localhost -p
    

    这里输入密码之后就可以登录到MySQL

  2. 进入MySQL数据库:

     use mysql;
    
  3. 使用下面语句:

     update user set host='%' where user='root' and host='localhost';
    

    将host设置为%表示任何ip都能连接mysql,当然也可以将host指定为某个ip。

  4. 刷新权限表,使配置生效:

     flush privileges;
    
  5. 如果想取消授权,关闭远程连接,恢复mysql的默认设置(只能本地连接),可以通过以下步骤操作:

      use mysql                #打开mysql数据库
      #将host设置为localhost表示只能本地连接mysql
      update user set host='localhost' where user='root';
      flush privileges;        #刷新权限表,使配置生效
    

    其中#后面的为注释,操作MySQL时,记得去掉,只复制#前面的命令就可以。

4.3 配置防火墙

一般来说,经过上面的配置,已经可以远程连接服务器上的MySQL了,因为安装MySQL的时候,MySQL使用的3306端口就会被打开。

当然,也有可能出于安全问题等被关闭,使用下面的方式检查端口状态。

  1. 检查3306端口是否被打开:

    netstat -anp | grep 3306
    

    在我们的服务器上显示如下信息:

     tcp        0      0 120.24.231.154:3306     0.0.0.0:*               LISTEN      21080/mysqld
     tcp        0      0 120.24.231.154:3306     221.216.162.253:12155   ESTABLISHED 21080/mysqld
     tcp        0      0 120.24.231.154:3306     221.216.162.253:12042   ESTABLISHED 21080/mysqld
    

    说明我们的3306端口已经打开了。

  2. 如果3306端口没打开,使用下面的命令打开:

     iptables -A INPUT -p tcp -i eth0 --dport 3306 -j ACCEPT
    
  3. 如果想关闭3306端口,使用下面的命令:

     iptables -A OUTPUT -p tcp -i eth0 --dport 3306 -j DROP
    
  4. 配置完成后,使用

     service iptables restart
    

    重新启动iptable。

5. 参考内容

主要参考了下面的网址: