分类: 数据库开发技术

解决MySQL不允许从远程访问的方法

开启 MySQL 的远程登陆帐号有两大步:

1、确定服务器上的防火墙没有阻止 3306 端口。

MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 3306 端口连接到
MySQL 的。

如果您在安装 MySQL 时指定了其他端口,请在防火墙中开启您指定的 MySQL 使用的端口号。

如果不知道怎样设置您的服务器上的防火墙,请向您的服务器管理员咨询。

2、增加允许远程连接 MySQL 用户并授权。

1)首先以 root 帐户登陆 MySQL

在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,MySQL 的 bin
目录下,然后输入下面的命令。

在 Linux 主机中在命令提示行下输入下面的命令。

  • CODE: [COPY]
  • > MySQL -uroot -p123456

123456 为 root 用户的密码。

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

  • CODE: [COPY]
  • > grant all PRIVILEGES on discuz.* to ted@'123.123.123.123' identified by '123456';

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

下面逐一分析所有的参数:

all PRIVILEGES
表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop
等,具体权限间用“,”半角逗号分隔。

discuz.* 表示上面的权限是针对于哪个表的,discuz 指的是数据库,后面的 *
表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授
权为“数据库名.表名”。

ted 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。

123.123.123.123 表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。

123456 为用户的密码。

执行了上面的语句后,再执行下面的语句,方可立即生效。

CODE: [COPY]

> flush privileges;

-----------------------------------------------------------------------------------------------------------------

解决方法:

1、改表法:

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

x:\>mysql -u root
-pvmware

mysql> use
mysql;

mysql> update user set host = ‘%’ where user = ‘root’;

mysql> select host, user from user;

mysql>
flush privileges;

注:mysql> flush
privileges; 使修改生效。

2、授权法:

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

mysql> GRANT ALL
PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT
OPTION;

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

mysql> GRANT ALL
PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY
'mypassword’ WITH GRANT OPTION;

 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
二、问如何开启MySQL的远程连接
   Q:

 
   
最近学习PHP,装了个phpwind论坛和FTP流量插件,需要远程连接MySQL数据库.不知道如何打开本地服务器的远程连接.现在本地服务器上的论坛和FTP流量插件都运行正常,在另一台服务器上安装插件,连不上数据库.到PW官方求助没人回贴.因此来这寻求帮助.

服务器信息

    PHP程式版本:
4.3.11

    MySQL 版本:
4.1.10-nt

    服务器端信息:
Microsoft-IIS/5.0
   
装有phpMyAdmin

 
   
A1:
 
   
远程连接到MySQL需要做的



    1.
进入MySQL,创建一个新用户xuys:

   
    格式:
grant 权限 on 数据库名.表名 用户@登录主机 identified by
"用户密码";

    grant select,update,insert,delete on *.* to
xuys@192.168.88.234 identified by "xuys1234";
   
   
查看结果,执行:

    use mysql;

    select
host,user,password from user;
   
   
可以看到在user表中已有刚才创建的xuys用户,host字段表示登录的主机,其值可以用IP,也可用主机名,将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到MySQL服务器,建议在开发时设为%.
   
update user set host = '%' where user =
'xuys';



    2.
   
./mysqladmin -u root -p pwd reload

    ./mysqladmin
-u root -p pwd shutdown



    3.
   
./mysqld_safe --user=root &

   
    记住:
对授权表的任何修改都需要重新reload,即执行第3步.



   
如果经过以上3个步骤还是无法从客户端连接,请执行以下操作,在MySQL数据库的db表中插入一条记录:
   
use mysql;

    insert into
db values('192.168.88.234','%','xuys','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

update db
set host = '%' where user = 'xuys';

   
   
重复执行上面的第2,3步.
 
 
   
A2:
 
   
Web与MySQL数据库分离开来是一个不错的选择,避免因为大量的数据库查询占用CPU而使Web资源不足,同时可以使Web服务器的资源尽最大的提供浏览服务,而数据库服务器单独的只处理数据库事务.

我对这方面的原理不甚太十分了解,我的做法其实就是下面要说的,很简单.大家有更好的经验和技巧不妨提出来分享一下.



    适用范围:
拥有独立主机权限

    硬件配置:
两台服务器,至于具体服务器硬件配置就不在本文范围内了

    其中:
A为Web服务器(假设IP为: 192.192.192.192),B为MySQL数据服务器(假设IP为:
168.168.168.168)



   
着手动作:

    1.
在Web服务器A配置好Web服务.关于这方面文章很多了.假设Web服务器的IP为: 192.192.192.192

    2.
在数据库服务器B安装好MySQL服务

    3.
现在新版的MySQL一般默认都不允许远程连接的,需要建立远程连接账号才可以
   
   
以命令行方式使用root账号进入MySQL

    mysql -u root -p pass

   
选择进入MySQL数据库

    use mysql;



   
查看所有存在的账号和地址

    SELECT `Host`,`User` FROM
`user`;



   
比如我的就是:



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

    |
Host       
| User  |

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

    | localhost

    
   |

    | localhost
| pma  |

    | localhost
| root   |

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

    3 rows in
set (0.00 sec)
   
   
也就是说,存在三个只允许本地连接的(localhost)账号,分别为root,pma,空用户.



   
现在决定让root具有上面那个Web服务器A的远程链接的权限,那么就这样:

    UPDATE `user` SET `Host` = '192.192.192.192' WHERE `User`
= 'root' LIMIT 1;


   
这样192.192.192.192这台Web服务器就可以远程连接到这个数据库服务器了,假如你想让任何远程机器都可以连接这个数据库,就将192.192.192.192换为%,不过不建议这样做,原因你知道啦!

假如你想新建一个用户new_user具备远程链接的权限的话,就这样:

    INSERT INTO `user` ( `Host` , `User` , `Password` ,
`Select_priv` , `Insert_priv` , `Update_priv` , `Delete_priv` ,
`Create_priv` , `Drop_priv` , `Reload_priv` , `Shutdown_priv` ,
`Process_priv` , `File_priv` , `Grant_priv` , `References_priv` ,
`Index_priv` , `Alter_priv` , `Show_db_priv` , `Super_priv` ,
`Create_tmp_table_priv` , `Lock_tables_priv` , `Execute_priv` ,
`Repl_slave_priv` , `Repl_client_priv` , `ssl_type` , `ssl_cipher`
, `x509_issuer` , `x509_subject` , `max_questions` , `max_updates`
, `max_connections` ) VALUES ('192.192.192.192', 'new_user',
PASSWORD( 'new_user_password' ) , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y',
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y',
'Y', 'Y', '', '', '', '', '0', '0', '0');



   
将new_user改为你想要的名字就可以了,密码是: new_user_password,当然你可以随意设置.



   
当你的数据库可以远程连接后,你就可以在你的Web服务器的论坛config.inc.php中设置$dbhost变量为你的MySQL数据库服务器B的IP了:
   
$dbhost =
'168.168.168.168';

   
实际操作中,最好两台机器在同一个机房的同一网段/防火墙内.当然如果有可能的话,将数据库服务器放置于Web服务器网络内的局域网中就更好了.
 
 
   
Q3:
 
   
还是这样简洁些:
   
grant all on yourdb.* to
yourUsername@yourHost identified by "yourPassword";

    flush
privileges;    
//使权限立刻生效

Mysql开启远程连接方法的更多相关文章

  1. Mysql 开启远程连接服务

    Mysql 开启远程连接服务 修改要远程访问的那个用户的 host 为 % use mysql; insert into user (host, user, password) values('%', ...

  2. MySQL开启远程连接的方法

    默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0 ...

  3. mysql开启远程连接及本地连接

    问题描述 在本机windows上连接linux服务器上的mysql报错:host'XXX' is not allowed to connect to this mysql server. 这个错误是由 ...

  4. (转)MySql开启远程连接权限

    命令行登陆: mysql -u root -p 不行的话可以从MySql.exe进入,找到Mysql根目录中路径类似:"MySQL\bin\mysql.exe",这样: D:\We ...

  5. MySQL开启远程连接权限

    对于我们刚开始安装的mysql或者mariadb来说,默认是不开启远程连接的.所以需要我们手动开启远程连接的权限.如果你是使用docker安装mysql那需要先进入容器中,这里就不讲如何进入容器了,百 ...

  6. linux 下mysql 开启远程连接

    系统通过netstat -ntlp  来查看正在运行服务所使用的端口 ,查看3306端口是否开启. 防火墙iptables 如果是新装的 系统, 一般不用管这个因素,不过我们也先 用service i ...

  7. CentOS下WDCP下的MYSQL开启远程连接

    1.首先要在防火墙开启3306端口访问 2.然后做如下操作 如何开启MySQL的远程帐号-1)首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单,运行,输入"cm ...

  8. Linux 开放端口号(mysql开启远程连接)

    在 Centos 7 或 RHEL 7 或 Fedora 中防火墙由 firewalld 来管理,而不是 iptables. 一.firewalld 防火墙语法命令如下:启用区域端口和协议组合 fir ...

  9. Ubuntu系统为MySQL开启远程连接

    第一步:确保 Ubuntu 系统已经安装上了MySQL数据库.登陆数据库 ,运行如下命令: mysql -u 用户名 -p 然后输入密码,此时登录成功 第二步:创建用户用来远程连接,运行如下命令: G ...

随机推荐

  1. 跟我一起读postgresql源码(七)——Executor(查询执行模块之——数据定义语句的执行)

    1.数据定义语句的执行 数据定义语句(也就是之前我提到的非可优化语句)是一类用于定义数据模式.函数等的功能性语句.不同于元组增删査改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数. 数据 ...

  2. python logging一个通用的使用模板

    import os import logbook from logbook.more import ColorizedStderrHandler from functools import wraps ...

  3. 三十天学不会TCP,UDP/IP网络编程-TraceRoute的哲学

    新年快乐,继续来部分粘贴复制我的这一系列文章啦,如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www.gitbook.com/@rogerz ...

  4. Android 一排按钮居中显示

    将一排按钮放在LinearLayout中,设置LinearLayout的Android gravity属性为center_vertical(垂直居中)

  5. vue2.0 样式表引入的方法 css sass less

    在引入样式之前,首先要了解static.assets两个文件夹的区别. 从字面上可以看出,static用来存放静态文件,assets用来存放资源文件: static存放的文件不会被编译,打包后直接赋值 ...

  6. file上传图片获取路径地址

    file上传图片获取路径地址 类似:点击button,选择图片,在对应的输入框input里面显示图片路径地址 类似这样 原理:通过opacity来隐藏原生的input file 然后用.file-bt ...

  7. iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】

    简介 libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备.由于苹果官方并不支持Linux系统,但是Linux上 ...

  8. .NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT,将.NET Core应用打包成一个可执行文件并包含运行时. 支持Windows, MacOS and Linux x64 w/ RyuJIT ...

  9. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...

  10. JMeter-接口自动化之正则表达式关联

    jmeter中,接口自动化的关键在于参数关联.比如需要登录的接口,如何调用登录口令?一个增删改查的闭环,如何将接口参数上下传递?下面就以实际的例子来仔细说一说 1:登录接口 这里有一个实际的登录接口, ...