(一)linux下的用户相关
今天想把root用户的密码改下, 修改语句如下:
mysql> update user set password = '123456' where user = 'root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
然后把数据库重启之后,却报错了,说是密码错误:
[root@localhost ipv4]# mysql -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
因为只建立了一个root用户,相当于无法进入mysql界面了,于是查 “linux版本的mysql忘记root密码”
解决如下:
[root@localhost ipv4]# vi /etc/my.cnf
在里面加入 skip-grant-tables 这一行
然后重启数据库,重启之后直接 mysql 无验证进入数据库
然后查找修改密码的语句,因为感觉上面的修改语句有误,果然和正规的修改是有区别的: password = password('123456')
mysql> update user set password = password('123456') where user = 'root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
然后退出数据库,把 skip-grant-tables 行注释,再重启数据库,然后正常情况下登录,此时就修改密码成功了
此过程中认识到my.cnf文件权限的重要性,要是这个文件权限没有限制的话,那其他人修改密码就太简单了。
(二)windows 版本的用户相关
想用其他机器登录windows的mysql服务器,于是按以前做过的直接去user 表中插入数据,
mysql> insert into user (host, user, password) values('192.168.101.234', 'root',
'123456');
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
结果却报上述错误,在网上找了下解决方法:
(问题解决了,但是原因不是很明白,请大侠指点,唯一不同就是去掉了STRICT_TRANS_TABLES(严格的反式表))
打开my.ini,查找
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
修改为
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
然后重启MYSQL
然后再插入便成功了
但是这个地方的密码直接写成 ‘123456’ 而没有写成password('123456') 居然也能用,但是在表中的密码是明文,后面还是按 此格式转换了一下,就成密文了。
在windows下重启mysql的命令:
与linux的命令有点区别,就是没有直接的重启命令,只能先停止服务,然后再启动
停止服务:net stop mysql
启动服务:net start mysql
参考链接:
linux下mysql的root密码忘记解决方法
http://www.cnblogs.com/allenblogs/archive/2010/08/12/1798247.html