centos7.0下外部连接不上mysql8.0及navicate连接报错问题

    技术2025-04-15  8

    虚拟机安装了mysql8.0.19,内部可以访问连接,外部navcicate却连接不了

    1、使用navicate连接报错,首先检查mysql端口是否开启 发现已经开启 2、再检查服务器的端口是否开启 在cmd窗口或者powershell命令窗口下 执行

    telnet 192.168.181.100 3306

    此时连接不算,不一定是没开端口,先打开下图telnet 功能, 如果还是不能连接则表示服务器没开3306端口 3、此时进入服务器修改端口配置文件,添加3306的端口开启

    vi /etc/sysconfig/iptables

    如果没有iptables文件则安装iptables服务

    yum install iptables-services

    或者命令开启3306端口

    firewall-cmd --zone=public --add-port=3306/tcp --permanent

    然后重启防火墙

    firewall-cmd --reload

    查询端口

    firewall-cmd --zone=public --query-port=3306/tcp

    删除端口

    firewall-cmd --zone=public --remove-port=3306/tcp --permanent

    此时去外部telnet连接3306端口是可以连上的,但是navicate还是连不上mysql 4、现在想起来之前安装的时候忘了授权给root用户在其他地方登陆 授权root用户在其他机器登录

    use mysql; select user,host from user; #查询创建的用户 update user set host='%' where user ='root'; #允许远程机器连接 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION; #授权 flush privileges; #刷新权限

    老版本navicate不支持mysql8.0默认加密方式,假如不想更新navicate,就需要更改密码加密方式

    alter user 'root'@'%' identified with mysql_native_password by '你的密码'; # 更改密码的加密方式并更改密码 flush privileges; #刷新权限

    5、创建新用户

    CREATE USER 'username1'@'%' IDENTIFIED BY '123456'; #创建新用户 GRANT ALL PRIVILEGES ON *.* TO 'username1'@'%' WITH GRANT OPTION;#给新用户授权 flush privileges; #刷新权限

    6、更改密码

    alter user 'username1'@'%' identified by '123456';

    7、假如忘记密码了可以在my.cnf[mysqld]下添加以下代码

    skip-grant-tables

    这时再重启mysql用 mysql -uroot -p登录时,可直接跳过密码输入,就能进入mysql了, 此时先将密码置为空 ‘’,

    update mysql.user set authentication_string='' where user = 'root';

    退出删除skip-grant-tables后重启,用空密码登录的话,就可以执行以上(6)步骤了 为什么跳过密码登录后不直接修改密码而是要先将密码修改为’'空再进来修改呢,假如直接修改的话,我这边第6步会直接报语法错误,因为skip-grant-tables不允许直接修改密码,另外通过更新user表的authentication_string字段也不能直接修改密码,因为mysql8.0已经没有oassword(函数了);

    Processed: 0.010, SQL: 9