问题由来:
可能是由于安装MySQL时候的设置问题,之前我登录自己笔记本上的MySQL一直都是用命令mysql -u root mysql进行登录的(如下),而不是以需要输入密码的登录方式来登录。
C:\Users\Dylan>mysql -u root mysql
#通过如下命令查看数据库,可以知道上面的登录方式是以root方式登录的。
mysql> show databases;
查看账户信息,发现确实都是没有密码的。
mysql> select user,host,password from user;
+------+-----------+----------+
| user | host | password |
+------+-----------+----------+
| root | localhost | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
+------+-----------+----------+
4 rows in set (0.02 sec)
然后用如下需要输入密码的命令来登录数据库的时候,就需要输入密码了。
C:\Users\Dylan>mysql -u root -p
Enter password: ****
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
#可是我们并没有设置密码。这时候可能密码为空,直接回车就行(忘记测试了。。。)
上面的这些情况也都是不影响我们的使用的,包括在Python中使用MySQL以及用图形化界面Navicat来使用MySQL。如在Python中使用MySQL(具体可参考使用MySQL,慕课网上还有一个课程Python操作MySQL数据库):
# 导入MySQL驱动
>>> import mysql.connector
# 注意把password设为你的root口令,因为我没有设置密码所以设置为空才可以。
>>> conn = mysql.connector.connect(user='root', password='', database='test01')
>>> cursor = conn.cursor()
<br /> <br />
如上,当没有设置密码的时候确实也是不影响我们在自己电脑本地使用MySQL的,包括在Python以及Navicat中使用MySQL。但我就想设置一下密码,该如何进行设置密码呢?如下代码:
#以root权限登录MySQL
mysql>mysql -u root mysql
#使用update你进行设置
mysql> update user set password=password('123456') where user='root' and host='localhost';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
再次查看账户信息,发现localhost对应的已经有密码了。
mysql> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
若想再次登录的时候有输入密码提示,需要刷新权限,然后退出重新登录,如下命令。后面如果再在Python里面使用的话就需要输入密码了。
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.16 sec)
mysql> quit
Bye
#再用没有密码前的登录方式发现登录不了呢
C:\Users\Dylan>mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
#采用下面这种输入密码的方式发现登录成功
C:\Users\Dylan>mysql -uroot -p
Enter password: ******
<br /> <br /> <br />
可是如果我们本来数据库是有密码的,但当我们忘记mysql数据库密码呢?如何正常进入数据库,进行修改密码呢?可如下进行操作:
#01.在Win下用cmd启动终端,
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\Dylan>
#02.找到mysql.exe和mysqld.exe所在的文件夹,比如我的:
D:\ruanjian\mysql-5.6.10-winx64\bin
#03.然后切换目录到mysql.exe和mysqld.exe所在的文件夹
C:\Users\Dylan>d:
D:\>cd D:\ruanjian\mysql-5.6.10-winx64\bin
#04.在任务管理器中结束mysqld.exe进程,确保mysql服务器端已结束运行。
#05.输入如下命令回车,此时就跳过了mysql的用户验证。注意输入此命令之后命令行就无法操作了
D:\ruanjian\mysql-5.6.10-winx64\bin>mysqld --skip-grant-tables
#06.此时再打开一个新的命令行,在然后直接输入mysql,不需要带任何登录参数直接回车就可以登陆上数据库。
C:\WINDOWS\system32>mysql
#用如下命令查看的时候可以发现是以root权限登录的。
mysql> show databases;
#还可以查看账户信息
mysql> select user,host,password from user;
#07.用Update进行密码修改
mysql> update user set password=password('123456') where user='root' and host='localhost';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#08.然后刷新权限,退出。再重启就会提示输入密码了。
mysql> FLUSH PRIVILEGES;
mysql> quit
另外,不带密码也是可以进行登陆mysql数据库的,只不过不是以root权限,显示数据库时只能看到两个数据库。重启数据库之后之所以不带密码任然能够登录,是因为我的数据库里存在无须口令的账户。
>>> mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
#之所以也可以登录,如下,是因为最后一行是无需口令的账户。
mysql> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
+------+-----------+-------------------------------------------+
4 rows in set (0.03 sec)
·```
参考链接如下:
[mysql数据库忘记密码时如何修改](http://jingyan.baidu.com/article/454316ab4e9e65f7a7c03ad1.html)
[MySQL修改密码](https://zhidao.baidu.com/question/1603863845338636507.html)