Ubuntu Server 中MySQL无法远程连接?

本文介绍了在Ubuntu Server环境下,如何解决MySQL远程连接时遇到的两个常见错误:错误10061及用户权限问题。通过调整my.cnf配置文件中的bind-address参数和更新MySQL user表中的host字段来实现。

 

       很常见的问题发生了,我们怎么处理它?

       意外之中必有规律!

环境:ubuntu Server (版本8.04以上对于LAMP应用都大同小异), cl@ubuntu.

目的:安装LAMP重新配置RT系统。

软件:服务器端已安装LAMP组件,MySQL5.1版本;客户端使用Navicat进行远程连接。

 

问题: 提示”Can not connect to mysql error 10061” ,如图1

 


              提示”is not allowed to connect to this MySQL server” ,如图2

 

       对于数据库的远程连接不外乎两方面入手:1、客户端至服务器端的连通性。2、服务器端没有合理配置。当然非要加上客户端也没有配置之类的,也尚可,比如ODBC的方式连接MySQL-_-! 

       MySQL 连接服务器时发生”Can not connect to mysql error 10061”错误,我们检查/etc/mysql/my.conf文件中的bind-address选项是否设置为服务器的IP,默认为127.0.0.1

做如下操作:

cl@ubuntu:~$ sudo vi /etc/mysql/my.cnf  --修改文本内容

修改bind-address            = 127.0.0.1

bind-address            = 服务器IP

:wq  --保存退出

cl@ubuntu:~$ sudo /etc/init.d/mysql restart  --重启服务

 

              MySQL 连接服务器时发生”is not allowed to connect to this MySQL server”错误,我们要注意在MySQLuser表中修改host列的localhost%,即可以远程连接。

做如下操作:

mysql> use mysql  --切换数据库上下文

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

 

mysql> select host,user,password from user;  --查询USER

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

| host      | user             | password                                  |

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

| localhost | root             | *MD5加密 |

| ubuntu    | root             | *MD5加密 |

| 127.0.0.1 | root             | *MD5加密 |

| localhost | debian-sys-maint | * MD5加密|

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

 

mysql> delete from user where user='root' and host <> '%';  --删除多余用户

Query OK, 2 rows affected (0.00 sec)

 

mysql> update user set host ='%' where host='localhost' and user='root';  --更新host

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

mysql> select host,user,password from user;

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

| host      | user             | password                                  |

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

| %         | root             | *MD5加密|

| localhost | debian-sys-maint | * MD5加密|

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

2 rows in set (0.00 sec)

 

 

:如果在修改User时失误出现以下结果,怎么办?

mysql> select host,user,password from user;

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

| host      | user             | password                                  |

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

| ubuntu  | root             | * MD5加密|

| localhost | debian-sys-maint | * MD5加密|

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

2 rows in set (0.00 sec)

 

此时没有127.0.0.1localhost主机,所以无法用root用户进行连接,会提示以下错误

~$ mysql -u root -p

Enter password:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

则此时只能用系统自带的debian-sys-maint用户登录,修改host。该用户的的登录密码在/etc/mysql/debian.cnf中明文显示。

比如:

host     = localhost

user     = debian-sys-maint

password = 明文密码

socket   = /var/run/mysqld/mysqld.sock

basedir  = /usr


做如下操作:

~$ mysql -u  debian-sys-maint -p

Enter password:

mysql> use mysql;

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

mysql> exit

~$ sudo /etc/init.d/mysql restart

清理思路,注意操作后需重启服务。

 


 

 

 

--EOF

 

### 安装 MySQL 并配置远程连接 #### 准备工作 为了确保安全性和功能性,在Ubuntu上安装MySQL并设置其支持远程访问,需遵循一系列特定的操作流程。 #### 安装 MySQL Server 通过终端执行命令来更新包列表以及安装最新版本的MySQL服务器: ```bash sudo apt update && sudo apt install mysql-server ``` 完成上述操作后,启动MySQL服务并且将其设置为开机自启[^1]。 #### 配置 MySQL 远程访问权限 编辑`/etc/mysql/mysql.conf.d/mysqld.cnf`文件中的绑定地址部分,将bind-address修改为0.0.0.0或者具体的IP地址以便接受来自任何地方的数据请求。这一步骤至关重要因为默认情况下MySQL仅监听本地回环接口上的连接尝试[^2]。 #### 创建具有远程访问权限的新用户 登录到MySQL控制台之后创建一个新的数据库账户赋予相应的权限给该账号用于从外部网络位置进行管理活动: ```sql CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%'; FLUSH PRIVILEGES; ``` 以上SQL语句定义了一个名为`newuser`的新用户,并授予此用户全局范围内的全部特权;请注意替换实际使用的用户名和密码字符串。 #### 开放防火墙端口 为了让外界能够触及到运行于内部的服务程序,则需要开放必要的通信端口号,默认情况下MySQL使用的是3306号TCP端口。对于基于UFW(Uncomplicated Firewall)防护机制下的Linux发行版而言,可以利用如下指令开启指定端口: ```bash sudo ufw allow 3306/tcp ``` 最后重启MySQL服务使更改生效: ```bash sudo systemctl restart mysql.service ``` 此时已经完成了基本的MySQL远程接入准备工作,但是建议进一步加强安全性措施比如采用SSL加密传输通道等方法提高系统的整体防御能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值