用navicat连接虚拟机mysql出现错误代码(2003)
今天想用navicat远程连接虚拟机中的MySQL数据库,一直连不上,在网上搜索了一下,找了很多教程,折腾了许久,总算弄好了。下面说一下我的解决方法。
错误信息: 2003
1.在windows下,cmd 输入
telnet 192.168.40.129 3306
其中ip是虚拟机的ip.如果连接失败
2.在虚拟机下输入
netstat -anp| grep 3306
如上图结果中显示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”用来跳过密码验证的过程,如下图所示:
二、忘记原来的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';
折腾许久,总算大功告成,连接上了