我们进入mysql 时,没有使用-A参数; 当我们打开数据库,即use dbname时,要预读数据库信息,当使用-A参数时,就不预读数据库信息。
当数据库中表非常多,如果预读数据库信息,将非常慢,可能会卡住,如果数据库中表非常少,将不会出现问题。
从客户端连接外网远程数据库:
mysql -h hostname -u username -P 端口 -p -A
下一行提示输入密码“Enter password”
正确输入密码后进入远程数据库。
不能正确连接阿里远程数据库的问题
2018年买了阿里云服务器。一直没有使用。最近希望用于练习mysql的操作。使用时遇到不少问题。这里总结。
- 阿里控制台概览
- 配置安全组规则
- 设置:用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,经常变化。
- 所以第一句sql的意思是给予来自所有IP地址的通过“用户”,“密码”登录的用户对所有库表的所有操作权限。
- 第二句sql,刷新权限。
意思:授权从某某IP来的用户名叫xxx,密码是xxx的用户访问xxx数据库的xxx表,可以对其进行xxx种操作。
第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