一、跳过mysql密码认证

Windows的配置文件为my.ini

密码认证配置文件的路径为(注:windows下修改的是my.ini)
MySQL 修改密码 - 图3

1. 编辑文档在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证,修改完保存退出MySQL 修改密码 - 图4

2. 重启MySQL服务

  1. 第一种:
  2. systemctl restart mysqld
  3. 第二种:
  4. /etc/init.d/mysql restart(有些用户可能需要使用/etc/init.d/mysqld restart)

MySQL 修改密码 - 图5

3. 进入MySQL修改密码

  1. mysql
  2. use mysql;
  3. updata user set password=password("你的新密码") where user="root";
  4. flush privileges;
  5. quit;
  6. mysql 8.0修改:
  7. 1、允许运行远程连接
  8. use mysql;
  9. update user set host=’%’ where user=‘root’;
  10. flush privileges
  11. 2、修改mysql密码
  12. alter user 'root'@'%' identified with mysql_native_password by 'root';

image.png

4. 编辑/etc/my.cnf删掉刚才跳过密码的那一行,重启MySQL服务

MySQL 修改密码 - 图7

二、解决mysql修改密码报错,设置简单密码

mysql> set -u root password=password(‘mysql’);

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-u root password=password(‘mysql’)’ at line 1

原因

原来MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。影响的语句和函数有:create user,grant,set password,password(),old password。

解决方案

解决办法调整MySQL密码验证规则,修改 policy 和 length 的值。

1、查看MySQL版本

  1. [root@localhost ~]# mysql -V
  2. mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)
  3. 如图所示我这里是8.0版本的MySQL

2、MySQL 5.7 进行如下设置,即可解决问题:

  1. mysql> set global validate_password_policy=0;
  2. mysql> set global validate_password_length=1;
  3. 但是8.0会报错,因为8.0的变量不存在
  4. mysql> set global validate_password_policy=0;
  5. ERROR 1193 (HY000): Unknown system variable 'validate_password_policy'
  6. mysql> set global validate_password_length=5;
  7. ERROR 1193 (HY000): Unknown system variable 'validate_password_length'

第三第四步是参考讲解原因,也可以直接从第五步开始

3、修改一个满足的密码 (如:Root_12root)

  1. mysql> alter user 'root'@'localhost' identified by 'Root_12root';
  2. Query OK, 0 rows affected (0.01 sec)

4、修改密码后进MySQL,用命令查看 validate_password 密码验证插件是否安装。

  1. mysql> SHOW VARIABLES LIKE 'validate_password%';
  2. +--------------------------------------+-------+
  3. | Variable_name | Value |
  4. +--------------------------------------+-------+
  5. | validate_password.check_user_name | ON |
  6. | validate_password.dictionary_file | |
  7. | validate_password.length | 5 |
  8. | validate_password.mixed_case_count | 1 |
  9. | validate_password.number_count | 1 |
  10. | validate_password.policy | LOW |
  11. | validate_password.special_char_count | 1 |
  12. +--------------------------------------+-------+
  13. 7 rows in set (0.17 sec)

5、MySQL 8.0 调整密码验证规则:

  1. mysql> set global validate_password.policy=0;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> set global validate_password.length=5;
  4. Query OK, 0 rows affected (0.00 sec)

6、重新设置密码

  1. mysql> alter user 'root'@'localhost' identified by 'mysql';
  2. Query OK, 0 rows affected (0.01 sec)

7、刷新权限

  1. flush privileges;

三、navicat连接失败

user表中用户信息不全,或者防火墙3306没放行

image.png

1、连接mysql服务器

  1. mysql -uroot -pmysql

2、进入mysql数据库,查看表

  1. use mysql;
  2. show tables;

3、查看user表的数据

  1. select Host, User,Password from user;

image.png

4、修改user表中的host名字

  1. update user set Host='%' where User='root';

5、刷新权限,测试

  1. flush privileges;

四、配置MySQL8.0的超级管理员

1、连接mysql服务器

  1. mysql -uroot -pmysql

2、创建新用户

  1. create user 'it'@'%' identified by 'Qwe123456';
  2. flush privileges;

3、授予权限

  1. grant all privileges on *.* to 'it'@'%';
  2. flush privileges;
  3. 修改权限语句:grant all privileges on *.* to 'it'@'%' with grant option;

4、查询用户

  1. select host,user,plugin,authentication_string from mysql.user;

image.png

5、需将caching_sha2_password改为mysql_native_password

  1. ALTER USER 'it'@'%' IDENTIFIED WITH mysql_native_password BY 'Qwe123456.';
  2. 注意:创建新用户为%时,修改密码的语句也要用%
  3. 退出测试即可