错误1:MySQL Daemon failed to start.

该错出现的场景是我在卸载mysql5.1.x版本后安装5.7.19版本出现的,但运行service mysqld start启动数据库是出现的,各种搜索解决方案,最后我直接把/var/lib/mysql目录全部删掉就解决了!!
[root@hehui mysql]# rm -rf *
[root@hehui mysql]# ls
[root@hehui mysql]# service mysqld start
alt

错误2:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

一般这个错误是由密码错误引起,解决的办法自然就是重置密码。

假设我们使用的是root账户。

  • 重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:
#vim /etc/my.cnf # (注:windows下修改的是my.ini)

在文档内搜索mysqld定位到[mysqld]文本段:

/mysqld #(在vim编辑状态下直接输入该命令可搜索文本内容)

在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:

alt


保存文档并退出:

  • 接下来我们需要重启MySQL:
/etc/init.d/mysql restart #(有些用户可能需要使用/etc/init.d/mysqld restart)
  • 重启之后输入#mysql即可进入mysql。然后设置新密码。
mysql
mysql> use mysql;
mysql> update mysql.user set authentication_string=password('111111') where user='root'; # (低版本用update user set password=password("111111") where user="root";)
mysql> flush privileges;
mysql> quit

到这里root账户就已经重置成新的密码了。

  • 编辑my.cnf,去掉刚才添加的内容,然后重启MySQL。大功告成!
mysql -u root -p # 输入刚刚设置的密码登陆

网上有很多关于这个问题的解决说明,很多刚接触的朋友可能比较迷惑的是在自己的平台上找不到my.cnf或者my.ini文件,如果你是Linux,使用如下方式可以搜索到:

whereis my


至于windows平台,去安装目录下找一下my.ini吧。

错误3

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
或者
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 
  • Mysql数据库版本:5.7.19
  • 操作系统:CentOS 6.7

重置密码问题是否奇怪,因为明明是刚刚用密码登录了mysql服务器。怎么要重置密码呢?因为密码太简单了,不符合MySQL的安全要求。
密码设置简单了有些操作会报ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误。

以上问题与validate_password_policy的值有关。

validate_password_policy有以下取值:

Policy    |   Tests Performed
0 or LOW  |   Length
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file

默认是1  :符合长度,且必须含有数字,小写或大写字母,特殊字符。
查询安全策略

mysql> SHOW VARIABLES LIKE 'validate_password%'; # 查询安全策略信息
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

如图:

解决方法(重新设置符合要求的密码)

# 如
mysql> SET PASSWORD = PASSWORD('123456abc*&');

如果是测试环境不想密码很复杂,可以修改安全策略:

mysql> set global validate_password_policy=0; # 设置策略为0(即是密码长度策略)
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=0; # 更改密码长度:密码最小长度为4
Query OK, 0 rows affected (0.00 sec) 
mysql> SHOW VARIABLES LIKE 'validate_password%'; # 再次查询安全策略信息,发现改变了
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
mysql> SET PASSWORD = PASSWORD('111111'); # 这里就可以设置简单的测试密码了