Overview
今天跟Young
在做secretepdb
这个项目时,需要使用Hibernate
连接数据库,为了方便一起开发,就直接连接了我们在阿里云服务器上的MySQL
,遇到了一些问题,有些是本地数据库和远程数据库的共性问题,有些则是连接远程数据库才会遇到的问题,在这里记录,以便共享和以后查阅。
1. MySQL
安装
在Ubuntu
上,使用如下命令安装:
sudo apt-get install mysql-server
安装过程中会要求配置MySQL
root用户的密码,要牢记这个密码,不然会很麻烦。
安装之后的目录在:/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
的网络设置
默认情况下,为了安全起见,
MySQL
的配置是只支持本机访问的,因此我们需要修改/etc/mysql/my.cnf
中的配置,如果/etc/mysql/my.cnf
中有skip-networking
这句代码,将它注释掉:
#skip-networking
高版本的MYSQL
中默认已经没有了这项配置。
将
bind-address = 127.0.0.1
改为:
bind-address = 120.24.231.154
这里的
120.24.231.154
就是远程MySQL
所在的服务器的IP地址。
但是这样的问题就是,当你需要本地连接数据库时,还要再改回来,很不方便,所以可以直接将这一句注释掉,这样就允许所有的IP地址远程连接了,唯一的问题在于没那么安全。
保存并关闭配置文件,并重启mysql服务器:
/etc/init.d/mysql restart
4.2 授权
在修改配置允许了MySQL
接受远程访问之后,还需要授权,使MySQL
允许某一个IP地址或者所有的IP地址的远程连接。
登录到远程
MySQL
所在的服务器,使用root账号打开MySQL
:mysql -u root -h localhost -p
这里输入密码之后就可以登录到
MySQL
。进入
MySQL
数据库:use mysql;
使用下面语句:
update user set host='%' where user='root' and host='localhost';
将host设置为%表示任何ip都能连接mysql,当然也可以将host指定为某个ip。
刷新权限表,使配置生效:
flush privileges;
如果想取消授权,关闭远程连接,恢复mysql的默认设置(只能本地连接),可以通过以下步骤操作:
use mysql #打开mysql数据库 #将host设置为localhost表示只能本地连接mysql update user set host='localhost' where user='root'; flush privileges; #刷新权限表,使配置生效
其中#后面的为注释,操作
MySQL
时,记得去掉,只复制#前面的命令就可以。
4.3 配置防火墙
一般来说,经过上面的配置,已经可以远程连接服务器上的MySQL
了,因为安装MySQL
的时候,MySQL
使用的3306
端口就会被打开。
当然,也有可能出于安全问题等被关闭,使用下面的方式检查端口状态。
检查
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
端口已经打开了。如果
3306
端口没打开,使用下面的命令打开:iptables -A INPUT -p tcp -i eth0 --dport 3306 -j ACCEPT
如果想关闭
3306
端口,使用下面的命令:iptables -A OUTPUT -p tcp -i eth0 --dport 3306 -j DROP
配置完成后,使用
service iptables restart
重新启动iptable。
5. 参考内容
主要参考了下面的网址: