从客户端连接远程数据库: mysql -h hostname -u username -P 端口 -p 密码

我们进入mysql 时,没有使用-A参数; 当我们打开数据库,即use dbname时,要预读数据库信息,当使用-A参数时,就不预读数据库信息。

当数据库中表非常多,如果预读数据库信息,将非常慢,可能会卡住,如果数据库中表非常少,将不会出现问题。

 

从客户端连接外网远程数据库:

mysql -h hostname -u username -P 端口 -p  -A

下一行提示输入密码“Enter password”

正确输入密码后进入远程数据库。

 


 

 

不能正确连接阿里远程数据库的问题

2018年买了阿里云服务器。一直没有使用。最近希望用于练习mysql的操作。使用时遇到不少问题。这里总结。

  1. 阿里控制台概览
  2. 配置安全组规则
  3. 设置:用mysql命令直接连接数据库。

其中遇到的直接问题就是不能使用mysql命令直接连接数据库。中间绕了很多湾。填了不少坑。

 

 

 

公网和私有网的区别

 

 

  • 39.100.49.243 这是用于互联网连接的ip地址。
  • 172.26.132.153这是局域网使用的地址。 

我的❌,就是错把私有网当成公网连接的ip。

 

阿里的安全组

首先,我的❌,不了解端口的作用。

通信端口,又称为端口、协议端口在计算机网络中是一种经由软件创建的服务,在一个计算机操作系统中扮演通信的端点。
每个通信端口都会与主机的IP地址及通信协议关联。
通信端口以16比特数字来表示,这被称为通信端口编号。

其次,我的❌,不了解阿里云服务器的安全组

安全组是一种虚拟防火墙,具备状态检测和数据包过滤能力,用于在云端划分安全域。
通过配置安全组规则,您可以控制安全组内一台或多台ECS实例的入流量和出流量。

  

远程连接mysql数据库(默认:监听的端口是3306)

在配置文件/etc/mysql/mysql.conf.d/mysqld.cnf可以设置:

port            = 3306  #这是默认 

 

第一步:添加防火墙白名单:

知道了阿里云服务器的安全组配置和mysql的监听端口,就可以手动添加:

 

 

第2步:修改mysql的监听ip

默认情况下mysql只允许127.0.0.1在局域网进行访问, 因此需要将MySQL改成监听远程主机IP或者所有IP。

 

以Ubuntu为例,打开修改以下文件:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到bind-address,如果监听固定远程IP,则改成远程主机IP,若监听所有IP,则改成0.0.0.0或者注释bind-address。

bind-address            = 127.0.0.1
#改成
bind-address            = 0.0.0.0

修改完成后重启MySQL:

service mysql restart

是否有对应的端口,在远程主机上,使用netstat -an 

root@iZ8vbcqz91cgdxkf2tcrsvZ:~# netstat -an 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN   

精确查询netstat -an | grep 3306

⚠️这里有关于bind-address的补充信息, 附加到文末。

 

第3步:授权远程访问mysql的各种权限

远程登录进入服务器,用root用户进入mysql控制台,输入:

mysql> grant all privileges on *.* to '用户'@'ip' identified by '密码' with grant option;
mysql> flush privileges;
  • 第一句语句语句中,
    • *.*代表所有库表,第一个*代表所有数据库,第2个*代表这个数据库所有的表。
    • 若想给予所有IP权限,”ip”写成“%”,但不建议,可以指定ip:
      • 查看一台电脑的公网ip的方法(mac): curl ipinfo.io
      • 或者google输入: 本机公网ip
      • ⚠️本机公网ip,经常变化。
    • 所以第一句sql的意思是给予来自所有IP地址的通过“用户”,“密码”登录的用户对所有库表的所有操作权限。
  • 第二句sql,刷新权限。

意思:授权从某某IP来的用户名叫xxx,密码是xxx的用户访问xxx数据库的xxx表,可以对其进行xxx种操作。

具体可以参考之前的博客:https://www.cnblogs.com/chentianwei/p/12106161.html

 

第2步补充:关于ivp6和ivp4

MySQL服务器在单个网络套接字上侦听TCP / IP连接。该套接字绑定到单个地址,但地址可能映射到多个网络接口。要指定地址,请在服务器启动时使用该选项,其中是IPv4或IPv6地址或主机名。如果是主机名称,则服务器将名称解析为IP地址并绑定到该地址。

bind-address = xxxxxx

第2步改成

  • 0.0.0.0则服务器接受所有服务器主机IPv4接口上的TCP / IP连接。
  • ::, 则服务器接受所有服务器主机IPv4和IPv6接口上的TCP / IP连接。
#设置用0.0.0.0
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN    
#注释掉bind-address
tcp6       0      0 :::3306                 :::*                    LISTEN    

 

posted @ 2020-03-24 20:43  Mr-chen  阅读(2213)  评论(0编辑  收藏  举报