小Q:雄关漫道真如铁,而今迈步从头越。 ——《忆秦娥·娄山关》
好久没有记录了,本来前一阵总结了好多问题,但是因为刚刚步入职场,许多事都要积极,而且我没有电脑,所以一拖再拖,然而拖得不太好总结了;今天遇到个新问题,很有针对性,所以抽空记录一下。
--------------------------------------------------------------------------------------------------
先在mysql出到了5.7版本,经理让用最新的版本搭建LNMP,搭建过程遇到很多问题,今天简要说说mysql的一个问题:
安装完成后,无法登陆mysql,按理说新安装后默认是以root用户登录,而且密码应该为空,所以可以直接进的,但是出现了下面的问题
[root@bogon mysql]# bin/mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@bogon mysql]# bin/mysqladmin -uroot password mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)'
此时我的反应是会不会为了安全起见,新版mysql默认有密码,我一查还真是,mysql默认安装会有密码生成,密码文件直接写在 log-error 日志文件中(在5.6版本中是放在 root/.mysql_secret 文件里,更加隐蔽,不熟悉的话可能会无所适从),但是我去查看了log_error,但是没有找到密码,而且也没有root/.mysql_secret 文件;
之后我尝试在配置文件中加了skip-grant-tables,重启之后可以进去了;所以一定是密码的问题,所以我开始改密码
mysql> update user set password=password('123456') where user='root'; ERROR 1054 (42S22): Unknown column 'password' in 'field list' mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> update user set password=password('123456') where user='root'; ERROR 1054 (42S22): Unknown column 'password' in 'field list'
但是出现了这种情况,改不了,网上说:官方的方式,笔者无论是否使用--skip-grant-tables启动mysql都测试失败,亲们可以测试:
shell>mysql -uroot -p'password' #password即.mysql_secret里的密码
mysql>SET PASSWORD = PASSWORD('newpasswd');
但是根据上面的操作,官方说明也不是太靠谱。。。。。。。。。
于是我又开始搜索各种解决办法,又在朋友的帮助下,终于找到解决的办法-----------------------
我们把root@localhost用户删了,然后有新建了这个用户
mysql> delete from mysql.user where user='root' and host='localhost'; Query OK, 1 row affected (0.01 sec) mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | mysql.sys | localhost | +-----------+-----------+ 1 row in set (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> grant all on *.* to 'root'@'localhost' identified by '123456'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | mysql.sys | localhost | | root | localhost | +-----------+-----------+ 2 rows in set (0.01 sec)但是到这还是不行,你用下面的命令会发现一个情况
mysql> select * from mysql.user\G;
Grant显示N--mysql权限架构体系(应该是这么说)是关闭的,so.............
mysql> grant all on *.* to 'root'@'localhost' identified by '123456' with grant option; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
退出mysql,将skip-grant-tables注掉,然后重启mysql。此时在登陆就可以了。
-----------------------------------------------------------------------------------------------
当然许多朋友的错可能只跟我类似,但是并不是相同,如果上述方法还是不行,可以跟我留言,我们可以探讨。
当然我对mysql还并不是太熟,我在想删除用户,如果里边有数据怎么办,其实以防万一备份一下就好了;而我朋友告诉我其实删除用户和新建用户不影响数据,没事,因为我没有实际操作,所以不好保证,其实备份一下更好更安全,不影响数据那对我们更好啦。
转载于:https://blog.51cto.com/tengxiansheng/1726799