最近在研究Django和mysql的交互,在本地安装了一个mysql,结果安装完兴致勃勃想登录,结果却失败了。这里记录下问题解决的过程。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
报错现象
刚安装完mysql5.7,已经成功启动mysqld服务,访问mysql报错如下
[fuhx@testmachine Downloads]$ mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
看样子似乎是权限有问题,但是我明明记得mysql刚安装完是没有密码的啊,非常奇怪
解决问题
找到mysql的配置文件/etc/my.cnf
在其中的[mysqld]
部分加入skip-grant-tables
,如下
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
这样就暂时关闭了鉴权,重启一下mysqld服务
[root@testmachine mysql57-community]# systemctl restart mysqld
再次尝试登陆进去,成功
[root@testmachine mysql57-community]# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
然后修改一下root用户的密码
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
然后退出mysql,删除掉刚才加入到配置的skip-grant-tables
行,再次重启mysqld
[root@testmachine mysql57-community]# systemctl restart mysqld
之后就可以用刚才设置的密码登录了
[fuhx@testmachine Downloads]$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>