连接mysql注意事项:报错access denied for user root...
起因是我通过本机连接本机数据库,数据库IP不是配置的127.0.0.1,而是配置的本机IP192.168.0.170.于是出现了以上错误
后来才知道原因。
我的mysql默认有四种连接:
root@::1
root@127.0.0.1
root@localhost
sa@%
1、使用root账户
root@::1表示远程连接,如果要连接非本机的数据库,那么数据库应该设置此项
因此如果要使用远程连接这里应该改成 root@192.168.0.170 或者 root@%,第二种
表示任意远程IP都可以连接此数据库!
如果是连接本机数据库,则应配置IP为127.0.0.1或localhost都可以
2、使用sa账户
若设置是“ sa@%”则表明使用sa账户时IP连接不限制
3、使用navicat操作时报错提示:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
网上很多人说要取消 sql_mode 中的 only_full_group_by 参数,其实这并不是完全正确的,具体可以看这里,不能访问外网的话,我贴一点截图在下面:
因此,从上面可以知道,这个报错,虽然取消 only_full_group_by 模式能解决问题,但是有时候并不能治标,因为sql语句本身就有问题了,这相当于掩盖了问题而已。所以要根据实际情况而定。再仔细看一下报错,我们可以发现,我们的报错指向的数据是:
'information_schema.PROFILING.SEQ'
这是一张mysql的系统表!!!
而文中的报错段是:
'test.web_log.user_id'
这明显是用户自己的表,是用户在写sql语句时跟现在的配置不匹配导致了出错!!!这种情况要修改自己的sql语句(治本!!!)或者取消 only_full_group_by 模式(但治标不治本...)
而我的报错是前者,所以我们并不需要取消 only_full_group_by 模式,也不需要修改sql语句,是因为navicat的bug导致的,直接登录linux服务器,在linux上使用命令行操作sql语句,发现不再报错了,当然也可以使用其它类似navicat功能的软件。