MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的真正原因

摘要:
今天终于把这个问题给彻底搞清楚了。

在博客Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)里面,我介绍了一下安装MySQL后登陆MySQL时会遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 这个错误,当时不知道真正的原因,搜索了一些网上的资料,测试验证了如何解决这个问题,但是一直不知道具体的原因。今天终于把这个问题给彻底搞清楚了。

下面我以MySQL 5.6.20为例子,刨析一下这个错误的真正原因,如下所示

[root@DB-Server tmp]# rpm -ivh MySQL-server-advanced-5.6.20-1.rhel5.x86_64.rpm
Preparing... ########################################### [100%]
 1:MySQL-server-advanced ########################################### [100%]
warning: user mysql does not exist - using root
warning: group mysql does not exist - using root
2015-03-26 10:49:06 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-03-26 10:49:07 5082 [Note] InnoDB: Using atomics to ref count buffer pool pages
2015-03-26 10:49:07 5082 [Note] InnoDB: The InnoDB memory heap is disabled
2015-03-26 10:49:07 5082 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2015-03-26 10:49:07 5082 [Note] InnoDB: Memory barrier is not used
2015-03-26 10:49:07 5082 [Note] InnoDB: Compressed tables use zlib 1.2.3
2015-03-26 10:49:07 5082 [Note] InnoDB: Using Linux native AIO
2015-03-26 10:49:07 5082 [Note] InnoDB: Using CPU crc32 instructions
2015-03-26 10:49:07 5082 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2015-03-26 10:49:07 5082 [Note] InnoDB: Completed initialization of buffer pool
2015-03-26 10:49:07 5082 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
2015-03-26 10:49:07 5082 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
2015-03-26 10:49:07 5082 [Note] InnoDB: Database physically writes the file full: wait...
2015-03-26 10:49:07 5082 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
2015-03-26 10:49:07 5082 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
2015-03-26 10:49:08 5082 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
2015-03-26 10:49:08 5082 [Warning] InnoDB: New log files created, LSN=45781
2015-03-26 10:49:08 5082 [Note] InnoDB: Doublewrite buffer not found: creating new
2015-03-26 10:49:08 5082 [Note] InnoDB: Doublewrite buffer created
2015-03-26 10:49:08 5082 [Note] InnoDB: 128 rollback segment(s) are active.
2015-03-26 10:49:08 5082 [Warning] InnoDB: Creating foreign key constraint system tables.
2015-03-26 10:49:08 5082 [Note] InnoDB: Foreign key constraint system tables created
2015-03-26 10:49:08 5082 [Note] InnoDB: Creating tablespace and datafile system tables.
2015-03-26 10:49:08 5082 [Note] InnoDB: Tablespace and datafile system tables created.
2015-03-26 10:49:08 5082 [Note] InnoDB: Waiting for purge to start
2015-03-26 10:49:08 5082 [Note] InnoDB: 5.6.20 started; log sequence number 0
2015-03-26 10:49:08 5082 [Note] RSA private key file not found: /var/lib/mysql//private_key.pem. Some authentication plugins will not work.
2015-03-26 10:49:08 5082 [Note] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work.
A random root password has been set. You will find it in'/root/.mysql_secret'.
2015-03-26 10:49:09 5082 [Note] Binlog end
2015-03-26 10:49:09 5082 [Note] InnoDB: FTS optimize thread exiting.
2015-03-26 10:49:09 5082 [Note] InnoDB: Starting shutdown...
2015-03-26 10:49:10 5082 [Note] InnoDB: Shutdown completed; log sequence number 1625977
2015-03-26 10:49:10 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-03-26 10:49:10 5104 [Note] InnoDB: Using atomics to ref count buffer pool pages
2015-03-26 10:49:10 5104 [Note] InnoDB: The InnoDB memory heap is disabled
2015-03-26 10:49:10 5104 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2015-03-26 10:49:10 5104 [Note] InnoDB: Memory barrier is not used
2015-03-26 10:49:10 5104 [Note] InnoDB: Compressed tables use zlib 1.2.3
2015-03-26 10:49:10 5104 [Note] InnoDB: Using Linux native AIO
2015-03-26 10:49:10 5104 [Note] InnoDB: Using CPU crc32 instructions
2015-03-26 10:49:10 5104 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2015-03-26 10:49:10 5104 [Note] InnoDB: Completed initialization of buffer pool
2015-03-26 10:49:10 5104 [Note] InnoDB: Highest supported file format is Barracuda.
2015-03-26 10:49:10 5104 [Note] InnoDB: 128 rollback segment(s) are active.
2015-03-26 10:49:10 5104 [Note] InnoDB: Waiting for purge to start
2015-03-26 10:49:10 5104 [Note] InnoDB: 5.6.20 started; log sequence number 1625977
2015-03-26 10:49:10 5104 [Note] RSA private key file not found: /var/lib/mysql//private_key.pem. Some authentication plugins will not work.
2015-03-26 10:49:10 5104 [Note] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work.
2015-03-26 10:49:10 5104 [Note] Binlog end
2015-03-26 10:49:10 5104 [Note] InnoDB: FTS optimize thread exiting.
2015-03-26 10:49:10 5104 [Note] InnoDB: Starting shutdown...
2015-03-26 10:49:12 5104 [Note] InnoDB: Shutdown completed; log sequence number 1625987
A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will find that password in'/root/.mysql_secret'.
You must change that password on your first connect,
no other statement but 'SET PASSWORD' will be accepted.
See the manual for the semantics of the 'password expired' flag.
Also, the account for the anonymous user has been removed.
In addition, you can run:
 /usr/bin/mysql_secure_installation
which will also give you the option of removing the test database.
This is strongly recommended for production servers.
See the manual for more instructions.
Please report any problems at http://bugs.mysql.com/
The latest information about MySQL is available on the web at
 http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
WARNING: Found existing config file /usr/my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as /usr/my-new.cnf,
please compare it with your file and take the changes you need.

MySQL的安装日志信息中,你会看到MySQL生成了root用户的随机密码(如下截图所示),并将这个随机密码放置在/root/.mysql_secret中。并且强制在第一次登陆时修改root用户的密码。Mysql 5.6及以后版本出处于安全考虑,root密码不为空。所以在MySQL的安装过程中,会生成一个随机密码,但是对于我们这样的初学者,不了解情况,于是便从网上搜索如何解决问题的资料,而问题关键在此,很多做技术的人,了解不够深入,又喜欢随波逐流,停留在问题的表层,并未深入研究。而高手又不屑于这类简单的问题。

clip_image001

A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !

You will find that password in '/root/.mysql_secret'.

You must change that password on your first connect,

no other statement but 'SET PASSWORD' will be accepted.

See the manual for the semantics of the 'password expired' flag.

Also, the account for the anonymous user has been removed.

知道了错误的前因后果,那么很容易就搞定这个问题了。找到随机密码,登录数据库后修改密码。问题解决

image

[root@DB-Server tmp]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.6.20-enterprise-commercial-advanced
Copyright (c) 2000, 2014, 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> show databases;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> set password=password('wer@34');
Query OK, 0 rows affected (0.03 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)

clip_image002

免责声明:文章转载自《MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的真正原因》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python接口测试入门CDH部署日志下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql快速保存插入大量数据一些方法总结(转)

本文转自:mysql快速保存插入大量数据一些方法总结 说明: 这几天尝试了使用不同的存储引擎大量插入MySQL表数据,主要试验了MyISAM存储引擎和InnoDB。下面是实验过程: 实现:一、InnoDB存储引擎。创建数据库和表  代码如下 1 > CREATE DATABASE ecommerce; > CREATE TABLE e...

MySQL之SQL优化详解(一)

目录 慢查询日志 1. 慢查询日志开启 2. 慢查询日志设置与查看 3. 日志分析工具mysqldumpslow   序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explain 分析,like 全模糊会导致索引失效 云云,于是我问道:优化之前,需要找出数据库中比如超过2s的慢SQL,你是怎么找的?很多人答不上来,要...

linux安装mysql5.6

1. 下载mysql  https://dev.mysql.com/downloads/mysql/5.6.html#downloads    2. 上传解压    3. 删除安装包, 重命名解压后的文件    4. 先检查是否有mysql用户组和mysql用户,没有就添加有就忽略: groups mysql    添加用户组和用户 groupadd my...

mysql免安装配置

  最近在通过zip包配置mysql,mysql版本:5.7.13。配置过程中,踩了一些坑,下面做了一些简单的记录,配置的具体过程如下:     1、将mysql zip包解压,放到指定目录中,在系统环境变量中配置系统环境变量,将mysql bin文件夹添加到path变量中。假如mysql放在:C:Program Files (x86)MySQLMySQL...

mysql中-e用法

实际应用中,不仅可以先登陆mysql再使用,还可以在链接的时候进行sql操作,此时需要加参数-e 例: >mysql -hlocalhost -P8080 -uroot -p123456 -e'set names utf8;use report;select * from table;'; 就是这样,-e中的语句需要用封号来分割。...

macOS + MySql8 问题

最近mac 升级安装mysql后遇到一系列问题,稍作记录。 1、升级8以后,使用sequelpro 连接报错 MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_...