我在CentOS6.5上部署OpenStack的时候,无法用MySQL GUI Tool连接到MySQL数据库,为了解决这个问题,方法如下:

(1)先将MySQL服务停掉
# /etc/init.d/mysqld stop
(2)查看mysql配置文件
# vi /etc/my.cnf
特别要留意其中的两项:bind_address和skip_networking,bind_address一定不能为127.0.0.1,否则只能在本地连接,skip_networking一定不能出现,否则只接受unix socket而不能提供tcp socket服务,建议将bind_address和skip_networking直接都注释掉。
(3)重启mysql服务
# /etc/init.d/mysqld start
(4)对用户授权,允许指定用户远程访问,最简单的方式是将mysql库中user表中的对应的用户的host设置为%,亦即允许该用户从任意ip远程访问

# mysql -u root -ppassword    //进入mysql控制台
# mysql>use mysql;
# mysql>update user set host = '%' where user = 'root';    //这个命令执行错误时可略过
# mysql>flush privileges;
# mysql>select host, user from user; //检查‘%’ 是否插入到数据库中
#mysql>quit
(5)一般情况下此时就能满足远程访问的要求,但对于某些系统还需要检查防火墙设置,和ip访问策略,以防系统对网络访问的限制造成无法远程访问mysql
对于CentOS系统而言,最好检测iptables设置。具体步骤如下
  5.1 暂停iptables服务
    # service iptables stop
  5.2 查看iptables配置文件
    # vi /etc/sysconfig/iptables
  5.3  也许会看到如下内容
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
~
  5.4 重启iptables服务
    # service iptables start


-----------------------------权限管理-----------------------------------

阿里云服务器Linux环境下设置MySQL支持远程连接数据库 
分享有两种方法: 
一是:改表法(这个方法我没有试) 
因为在linux环境下,默认是关闭3306端口远程连接的,需要开启,这个后面说! 
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库 里的 “user”(远程数据库的名称) 表里的 “host” 项,从”localhost”改称”%”

mysql -u root -pvmwaremy

sql>use mysql;   

mysql>update user set host = '%' where user = 'root';  

mysql>select host, user from user;

二是:授权法 
例如,你想myuser(远程连接的用户名)使用mypassword(远程连接的密码)从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO ’myuser’@’%’IDENTIFIED BY ’mypassword’ WI TH GRANT OPTION;

如果你想允许用户myuser(远程连接的用户名)从ip为192.168.1.6(你测试电脑上的IP)的主机连接到mysql服务器,并使用 mypassword(远程连接的密码)作为密码

GRANT ALL PRIVILEGES ON *.* TO ’myuser’@’192.168.1.6’IDENTIFIED BY ’mypassword’ WITH GRANT OPTION;

开始用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH RIVILEGES使修改生效,就可以了。 
方法是在安装mysql的机器上运行:

1、d:\mysql\bin\>mysql -h localhost -u root   //这样应该可以进入MySQL服务器   
2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root’@ '%’WITH GRANT OPTION   
//赋予任何主机访问数据的权限   
3、mysql>FLUSH PRIVILEGES   //修改生效   
4、mysql>EXIT   //退出MySQL服务器

这个时候还没结束呢,一般的服务器上安装的都有防火墙之类的东西,也需要我们开启3306端口才能用了 
在linux下要开启防火墙 打开3306 端口,编辑这个文件

vim /etc/sysconfig/iptables

输入

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

保存后在控制台输入 /etc/rc.d/init.d/iptables restart 重启防火墙,记得一定要重启哦,我就是因为没有重启防火墙导致一直连接不上,最后终于找到答案了

快速让MySQL数据库服务器支持远程连接

在CentOS上安装MySQL数据库服务器后,系统出于安全性考虑,缺省不支持用户通过非本机连接上数据库服务器,如果想让用户通过另外一台机器连接上数据库服务器必须手动进行修改:

1、在控制台执行 mysql -u root -p mysql,系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台,这个命令的第一个mysql是执行命令,第二个mysql是系统数据名称,不一样的。

2、在mysql控制台执行

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyPassword' WITH GRANT OPTION;

3、 在mysql控制台执行命令中的 ‘root’@’%’ 可以这样理解: root是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址,你也可替换成任意其它用户名或指定唯一的IP地址;’MyPassword’ 是给授权用户指定的登录数据库的密码;另外需要说明一点的是我这里的都是授权所有权限,可以指定部分权限

4、不放心的话可以在mysql控制台执行 select host, user from user; 检查一下用户表里的内容

打开MySQL远程访问权限

1.以 root 帐户登陆 MySQL

MySQL -u root -p 123456 

注:123456 为 root 用户的密码。

2.创建远程登陆用户并授权

grant all PRIVILEGES on discuz.* to ted@'123.123.123.123' identified by '123456';

注:上面的语句表示将 discuz 数据库的所有权限授权给 ted 这个用户,允许 ted 用户在 123.123.123.123 这个 IP 进行远程登陆,并设置 ted 用户的密码为 123456 。

改表法

可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”

mysql -u root -p 

mysql>use mysql; 

mysql>update user set host = '%' where user = 'root'; 

mysql>select host, user from user;