Mysql开启远程连接方法

Mysql开启远程连接方法

分类: 数据库开发技术

解决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;

如果你想允许用户myuserip192.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;
    
//使权限立刻生效

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114381.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 子网划分详解与子网划分实例精析

    子网划分详解与子网划分实例精析目录子网划分理论基础为什么进行子网划分明确需求知识点子网划分常见问题子网划分实例精析C类子网划分实例分析已知网络地址和子网掩码,求子网划分结果已知IP地址和子网掩码求子网划分B类地址子网划分实例已知网络地址和子网掩码求子网划分已知ip地址和子网掩码求子网划分A类子网划分实例已知网络地址和子网掩码求子网划分已知ip地址和子网掩码求子网划分小结…

  • c++关机程序

    c++关机程序//system(“shutdown-s-t10”);//关机system(“cls”);//清屏Sleep()//延时等待这是一个电脑关机程序,但不要无聊尝试,可以在关机是使用HideCursor(); //隐藏光标#include#include<stdio.h>#include<windows.h>#includeintmain(){system(“shutdown-s-t60”);}…

  • kubernetes-批量删除Evicted Pods[通俗易懂]

    kubernetes-批量删除Evicted Pods[通俗易懂]前言通过kubectlgetpods发现有很多的EvictedPod,于是想通过脚本删除。脚本#!/bin/bashforeachin$(kubectlgetpods|grepEvicted|awk'{print$1}’);dokubectldeletepods$eachdone还有更简单的写法,如下:kubectlg…

  • 外汇平台的搭建方法及注意事项有哪些_外汇平台搭建员工怎么判刑

    外汇平台的搭建方法及注意事项有哪些_外汇平台搭建员工怎么判刑摘要:从业外汇几年,都会听到外汇平台搭建,都知道外汇是个零和市场,赚少亏多,搭建外汇平台又可以做市商,且国家监管又很宽松,都想跃跃欲试,但是自己又不懂,不知道具体流程,又不知道需要多少资金,又没有认识的“人才”,又担心上当受骗,自然就会徘徊再做与不做之间。本文详…从业外汇几年,都会听到外汇平台搭建,都知道外汇是个零和市场,赚少亏多,搭建外汇平台又可以做市商,且国家监管又很宽松,都想跃跃欲试,但是…

  • 操作系统和网络基础知识整理「建议收藏」

    一为什么要有操作系统现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。一般而言,现代计算机系统是一个复杂的系统。其一:如果每位

  • Python中的三目表达式

    Python中的三目表达式Python中的三目表达式一般C系列语言,例如C#,三目运算都是“?:”的结构。例如:res=(i>j?true:false);但是在python中,使用的是if-else来实现的res=Trueifi>jelse2;#如果条件为真的话,那么结果为前者,否则为后者

    2022年10月27日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号