简介 我的开发环境是在虚拟机上的Centos上，有时候想操作一下数据库还需要进入虚拟机或者是只能在网页中打开，我想要用数据库远程连接软件连接的时候发现连接不上，组就是因为数据库没有开放远程连接 登录数据库 mysql -uroot -p密码 授权远程连接 授权 输入下列命令，*.*是授权访问所有表，'%'是运行远程访问的ip，%是运行所有ip远程连接到此数据库，可以设置具体的ip地址，把中文的用户名替换成实际用户名，把中文的密码替换成实际的密码 grant all privileges on *.* to '用户名'@'%' identified by'密码'; 关闭防火墙或者是开放3306端口 退出mysql,如果不退出mysql直接执行关闭防火墙命令或者是开放端口命令是无法执行的，下图就是我忘记退出mysql直接执行命令的样子 exit 关闭防火墙 systemctl stop firewalld 不想直接关闭防火墙的开发3306端口 firewall-cmd --add-port=3306/tcp --permanent //开放3306端口 systemctl restart firewalld //重启防火墙 我是直接开放端口的 远程连接 我是用的远程连接工具是Navicat Premium，打开软件后，点击左上角的【文件】按钮，选择【新建连接】，选择【Mysql】 连接名自定义，主机填写数据库所在的主机的IP地址，端口默认3306，如果数据库没有更改端口的话就是这个端口，用户名和密码填写自己刚刚授权远程访问的那个用户名和密码 填写完成后可以点击【测试连接】看看是否可以连接 8.0x版本 把数据库更新到8.0后，发现上面的方法行不通了，改为下面的方法了 登录mysql mysql -u用户名 -p密码 创建用户 create user '用户名'@'%' identified by '密码'; 之所以需要创建用户是应为8.0以上授权远程连接时，必须创建新用户，如果远程连接的用户的ip是固定的，那么把@附后后面的%改为ip地址，如果是本机访问则改成localhost 授权访问 grant all privileges on *.* to '用户名'@'%'; 如果需要指定访问的数据库则把.改了，例如mysql里面有一个数据库名为aaa，则把.改为aaa.* 刷新权限 flush privileges; 常用命令（8.0） 查询所有用户 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 删除指定用户 drop user '用户名'@'主机名'; drop user 'lnmp'@'%'; 创建用户 create user '用户名'@'允许方法问的地址' identified by '密码'; create user 'lnmp'@'localhost' identified by 'xiaowen123@'; 如果允许访问的地址为本机，则填写localhost，如果是所有ip则填写%，如果指定ip则填写指定的ip 修改密码 alter user '用户名'@'允许访问的地址' identiified by '新密码' alter user 'lnmp'@'localhost' identified bu '123456' 创建数据库 CREATE DATABASE 数据库名 CHARACTER SET 字符集 COLLATE 排序方式; CREATE DATABASE lnmp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;