目的:为了方便修改管理数据库。(当然你可以完全不需要远程连接,自己慢慢用sql语句操作数据库)
首先连接不到的可能性:
1.防火墙是否开启并打开了sql的端口(默认3306)。
个人情况:使用firewall-cmd --zone=public --list-ports
确认防火墙状态。显示防火墙根本没开启!!
当然,开启了的话可以使用firewall-cmd --zone=public --add-port=3306/tcp --permanent
打开3306端口。
在腾讯云服务器也可以不用那么麻烦,直接在安全组添加3306的规则就好(自行百度)
2.以上完成后还是不行,报:Host ‘XXX’ is not allowed to connect to this mariadb server 错误
增加允许远程连接 MySQL 用户并授权。
1)登陆mysql
2)创建远程登陆用户并授权,在要链接的服务器上操作
mysql> grant all PRIVILEGES on db_name.* to 'username'@'xxx.xxx.xx.x' identified by 'password' WITH GRANT OPTION;
上面的语句表示将数据库 db_name 的所有权限授权给 username 这个用户,允许 username 用户在 xxx.xxx.xx.x 这个 IP 进行远程登陆,并设置 username 用户的密码为 password。
分析参数:
all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。
db_name.* 表示上面的权限是针对于哪个表的,db_name指的是数据库名称,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“.”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授权为“数据库名.表名”。
username表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。
xxx.xxx.xx.x 表示允许远程连接的 IP 地址,你的IP,如果想不限制链接的 IP 则设置为“%”即可。
password 为用户username的密码。
最后执行了上面的语句后,一般都会立即生效,返回值如下:
Query OK, 0 rows affected (0.01 sec)
如果没有上面的语句那么请执行下面的命令,即可立即生效。
Mysql> flush privileges
完美解决!!!!!