解决PHP无法访问远程mysql的问题

解决PHP无法访问远程mysql的问题,第1张

  说明,远程服务器是可远程访问的。

  我遇到的问题是这样的:有A,B,C三台服务器,C为服务器,B可以用PHP成功连接上C机器的mysql,而A机器则不能连接!

  可以说,肯定不是代码有什么问题,服务器上的mysql设置也是没什么问题的,因为B机器都是可以的。

  肯定是A机器的设置有问题!

  在网上一顿搜,各种说mysql授权问题的,以及修改phpini的,修改防火墙的,事实上都不是这些问题导致的。

  最后想到了SELINUX的问题,对比了下AB两台机器,果然设置不一样!估计就是它的问题,有戏!

  进行了如下设置:

  root下,用vim打开文件文件/etc/selinux/config

  修改SELINUX的值:

  #SELINUX=enforcing

  SELINUX=disabled

  保存并退出。

  重启生效,如果不想重启,命令行输入

  setenforce

0

  回车,OK

三种解决方法:

  1、改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改

"mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

  mysql -u root -pvmware

mysql>use mysql;

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

'root';

  mysql>select host, user from user;

2、授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

  GRANT ALL PRIVILEGES ON TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH

GRANT OPTION;

  如果你想允许用户myuser从ip为19216816的主机连接到mysql服务器,并使用mypassword作为密码

  GRANT

ALL PRIVILEGES ON TO 'myuser'@'19216813'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服务器

  这样就可以在其它任何的主机上以root身份登录了。

之上是找的资源,实际情况是你远程额服务器,如果是用服务器的话,安装的有PHPMYADMIN, 那么将省去很多代码。

第一步:安装MySQL客户端

当然你得确保MySQL客户端已经安装完毕。如果没有的话,可以按照下面的方法。

在Debian,Ubuntu 或者 Linux Mint上:

$ sudo apt-get install mysql-client

$ sudo apt-get install mysql

第二步:登陆到MySQL服务器

首先,你需要使用root用户登陆进你的MySQL数据库,如下:

$ mysql -u root -h -p

请注意:为了能登进远程的MySQL服务器,你需要开启服务器上的远程访问,如果你想调用同一主机上的MySQL服务器,你可以省略 "-h " 参数

$ mysql -u root -p

你将需要输入MySQL服务器的密码,如果认证成功,MySQL提示将会出现。

第三步:创建一个MySQL数据库

在MySQL提示中输入命令之前,请记住所有的命令都是以分号结束的(否则将不会执行)。另外,考虑输入命令的时候使用大些字母,输入数据库对象使用小写字母。但那不是必须的,只是方便的阅读。

现在,创建一个叫做xmodulo_DB的数据库:

mysql> CREATE DATABASE IF NOT EXISTS xmodulo_DB;

第四步:创建一个数据库表

为了达到演示的目的,创建一个叫做posts_tbl的表,表里会存储关于文章的如下信息:

文章的标题

作者的名字

作者的姓

文章可用或者不可用

文章创建的日期

这个过程分两步执行:

首先,选择需要使用的数据库:

mysql> USE xmodulo_DB;

然后,在数据库中创建新表:

mysql> CREATE TABLE 'posts_tbl' (

'post_id' INT UNSIGNED NOT NULL AUTO_INCREMENT,

'content' TEXT,

'author_FirstName' VARCHAR(100) NOT NULL,

'author_LastName' VARCHAR(50) DEFAULT NULL ,

'isEnabled' TINYINT(1) NOT NULL DEFAULT 1,

'date' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,

PRIMARY KEY ( 'post_id' )

TYPE = MYISAM;

第五步:创建一个用户,并授予权限

当涉及到访问新创的数据库和表的时候,创建一个新用户是一个很好的主意。这样做就可以让用户在没有整个MySQL服务器权限的情况下,去访问那个数据库(而且只能是那个数据库)

你可以创建新用户,授予权限,并且使改变生效:

mysql> GRANT ALL PRIVILEGES ON xmodulo_DB TO 'new_user'@'%' IDENTIFIED BY 'new_password';

mysql> FLUSH PRIVILEGES;

'newuser'和'newpassword'分别指的是新的用户名和他的密码。这条信息将会被保存在mysqluser表中,而且密码会被加密。

第六步:测试

先插入一个虚拟的记录到posts_tbl表:

mysql> USE xmodulo_DB;

mysql> INSERT INTO posts_tbl (content, author_FirstName, author_Las tName)

VALUES ('Hi! This is some dummy text', 'Gabriel', 'Canepa');

然后查看posts_tbl表中的所有记录:

mysql> SELECT FROM posts_tbl;

注意:MySQL会在先前定义的地方自动插入适当的默认值(比如,'isEnabled'和'date')。

通过SQLyog来连接MySQL

(1) 执行File→New connection菜单命令。将打开连接提示对话框。单击New按钮,将创建一个新的连接,给新连接定义一个名字"zyj"

(2) 单击OK按钮,在MySQL的设置窗体输入相关的数据。注意Port是安装MySQL时默认的访问端口,如果安装时未修改,则默认值为3306。

(3) 当单击Test Connection按钮时,将弹出Connection Info对话框。如果提示连接失败,请确定输入的用户名、密码或端口号是否正确。

(4) 当单击"确定"按钮后,就完成了SQLyog与MySQL的连接。接下来就可以通过SQLyog来进行MySQL的相关操作了

基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限。下面是基本的步骤:

1、登录到MySQL中,为root进行远程访问的授权,执行下面的命令:

mysql> GRANT ALL PRIVILEGES ON TO root@"%" IDENTIFIED BY "root";

mysql> flush privileges;

第一句中"%"表示任何主机都可以远程登录到该服务器上访问。如果要限制只有某台机器可以访问,将其换成相应的IP即可,如:

GRANT ALL PRIVILEGES ON TO root@"17216819325" IDENTIFIED BY "root";

第二句表示从mysql数据库的grant表中重新加载权限数据。因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载。

2、修改/etc/mysql/mycnf,需要root用户权限。找到文件中的:

[ruby] view plain copy print

bind-address = 127001

将其注释掉,保存。

3、重新启动MySQL服务器。执行下面的几条命令即可:

# /usr/bin/mysqladmin -u root -p shutdown

# /usr/bin/mysqld_safe &

如果mysqladmin和mysql_safe不在/usr/bin目录中,可以通过whereis命令查找,例如:

# whereis mysqladmin

mysqladmin: /usr/bin/mysqladmin /usr/share/man/man1/mysqladmin1gz

执行完上面的三步后,就可以通过远程机器连接了数据库了。

1、改表法。

可能是你的帐号不允许从远程登陆,只能在

localhost

。这个时候只要在localhost的那台电脑,登入mysql后,更改

“mysql”

数据库里的

“user”

表里的

“host”

项,从“localhost”改称“%”

mysql

-u

root

-pvmwaremysql>use

mysql;

mysql>update

user

set

host

=

'%'

where

user

=

'root';

mysql>select

host,

user

from

user;

2、

授权法

。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT

ALL

PRIVILEGES

ON

TO

'myuser'@'%'

IDENTIFIED

BY

'mypassword'

WI

TH

GRANT

OPTION;

如果你想允许用户myuser从ip为19216816的主机连接到mysql服务器,并使用mypassword作为密码

GRANT

ALL

PRIVILEGES

ON

TO

'myuser'@'19216813'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服务器

这样就可以在其它任何的主机上以root身份登录啦。

mysql默认状态是只支持localhost连接,这样远程服务器都输入IP地址去连接你的服务器是不可以的,下面我来介绍怎么让mysql允许远程连接配置方法,有需要的朋友可参考。

方法一,直接利用在“权限”-》管理中修改用户选择或输入IP地址。

方法二,使用mysql的GRANT命令进行操作

例如:让newuser用户使用newpwd密码从IP:19216813主机链接到mysql服务器

具体步骤:

代码如下

mysql>GRANT ALL PRIVILEGES ON TO ‘newuser’@’19216813′ IDENTIFIED BY ‘newpwd’ WITH GRANT OPTION;

mysql>flush privileges;

完整配置方法

假设我们有:

代码如下

Web-Server : 1921681100 //ubuntu

Mysql-Server : 1921681101 //xp

我们可以按照下面的步骤修改:

1, 登录 Mysql-Server 连接本地 mysql (默认只允许本地连接)

代码如下

Microsoft Windows XP [版本 512600]

(C) 版权所有 1985-2001 Microsoft Corp

C:Documents and Settingskuco>mysql -h localhost -u root -p

Enter pass:

Welcome to the MySQL monitor Commands end with ; or g

Your MySQL connection id is 13

Server version: 5145-community-log MySQL Community Server (GPL)

Type 'help;' or 'h' for help Type 'c' to clear the current input statement

mysql>

2, 修改 Mysql-Server 用户配置

代码如下

mysql> USE mysql; -- 切换到 mysql DB

Database changed

mysql> SELECT User, Password, Host FROM user; -- 查看现有用户,密码及允许连接的主机

+------+----------+-----------+

| User | Password | Host |

+------+----------+-----------+

| root | | localhost |

+------+----------+-----------+

1 row in set (000 sec)

mysql> -- 只有一个默认的 root 用户, 密码为空, 只允许 localhost 连接

mysql> -- 下面我们另外添加一个新的 root 用户, 密码为空, 只允许 1921681100 连接

mysql> GRANT ALL PRIVILEGES ON TO 'root'@'1921681100' IDENTIFIED BY '' WITH GRANT OPTION;

mysql> -- 当然我们也可以直接用 UPDATE 更新 root 用户 Host, 但不推荐, SQL如下:

mysql> -- UPDATE user SET Host='1921681100' WHERE User='root' AND Host='localhost' LIMIT 1;

grant 权限名(所有的权限用all) on 库名(全部)表名(全部) to ’要授权的用户名‘@’%'(%表示所有的IP,可以只些一个IP) identified by “密码”;

身份检查使用user表(Host, User和Password)3个范围列执行。服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。

在user表Host值的指定方法:

Host值可以是主机名或IP号,或’localhost’指出本地主机。

你可以在Host列值使用通配符字符“%”和“_”。

Host值’%'匹配任何主机名,空Host值等价于’%'。它们的含义与LIKE操作符的模式匹配操作相同。例如,’%'的Host值与所有主机名匹配,而’%mysqlcom’匹配mysqlcom域

的所有主机。

3, 修改 Mysql 配置文件 myini

代码如下

bind-address = 127001

将 bind-address = 127001 这一行注释掉, 即修改为:

代码如下

#bind-address = 127001

到此 Mysql-Server 端配置就完成了

4, 连接 Web-Server , 检查一下是否能连上

代码如下

kuco@kuco-desktop:/$ /opt/lampp/bin/mysql -h 1921681101 -u root -p

Enter password:

Welcome to the MySQL monitor Commands end with ; or g

Your MySQL connection id is 23

Server version: 5145-community-log MySQL Community Server (GPL)

Type 'help;' or 'h' for help Type 'c' to clear the current input statement

mysql> -- 一切OK

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 解决PHP无法访问远程mysql的问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情