用navicat连接虚拟机mysql出现错误代码(2003)

今天想用navicat远程连接虚拟机中的MySQL数据库,一直连不上,在网上搜索了一下,找了很多教程,折腾了许久,总算弄好了。下面说一下我的解决方法。

错误信息: 2003
用navicat连接虚拟机mysql出现错误代码(2003)

1.在windows下,cmd 输入

telnet  192.168.40.129 3306

其中ip是虚拟机的ip.如果连接失败

2.在虚拟机下输入

netstat -anp| grep 3306

用navicat连接虚拟机mysql出现错误代码(2003)
如上图结果中显示mysql 3306前面的ip不是0.0.0.0

3.修改/etc/mysql/mysql.conf.d/mysqld.cnf

把 bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0

上面的意思是改为监听所有地址

开启MySQL远程访问权限 允许远程连接

方法一、本地登入mysql,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将"localhost"改为"%"

   # mysql -uroot -pmysql
  mysql>use mysql;
  mysql>update user set host = '%' where user = 'root';
  mysql>select host, user from user;

方法二、直接授权(推荐)

从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器:

# mysql -u root -proot 
  mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

操作完后切记执行以下命令刷新权限

FLUSH PRIVILEGES;

报错 ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’ 不予理会

使用 service 启动

service mysqld restart 
service mysql restart (5.5.7版本命令)

以为终于可以链接上了,结果又是1045错误,,折腾了一下,原来需要给更改mysql密码

一、拥有原来的myql的root的密码;
1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:

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

在文档内搜索mysqld定位到[mysqld]文本段:
/mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)

在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:

用navicat连接虚拟机mysql出现错误代码(2003)

二、忘记原来的myql的root的密码
方法三:

首先拿到操作系统的root权限,然后kill掉Mysql服务或者手动stop掉,这里我推荐使用手动stop;

#service mysql stop

然后执行

# mysqld_safe --skip-grant-tables &

&,表示在后台运行,不再后台运行的话,就再打开一个终端吧。
接着登陆MySQL修改密码

# mysql
mysql> use mysql;
mysql> UPDATE user SET password=password("test123") WHERE user='root';   
mysql> exit;   

注意:如果Mysql的版本是5.7及以上的话update语句如下:


    mysql> update user set authentication_string=passworD("test") where user='root';

折腾许久,总算大功告成,连接上了

用navicat连接虚拟机mysql出现错误代码(2003)