Mysql相关问题处理

1.Mysql密码过期问题处理

跳过授权表
1. /etc/init.d/mysqld stop
2. mysqld_safe –skip-grant-tables &(或者修改配置文件 [mysqld] skip grant tables)
3. 登录mysql(无密码)
4. update mysql.user set authentication_string=password(‘123456’) where user=’root’ and Host = ‘%’;(此处修改后localhost依然无法登录修改Host=’localhost’)
5. flush privileges
6. 登录后
- [ ] 本机mysql过期 set password = password(‘123456’);
- [ ] 服务器mysql过期,需要修改指定用户的password 以root@% 为例 > set password for ‘root’@’%’ = password(‘123456’);

从MySQL 5.7.4版开始,用户的密码过期时间这个特性得以改进,可以通过一个==全局变量default_password_lifetime来设置密码过期的策略==,
此全局变量可以设置一个全局的自动密码过期策略。

2.Mysql版本新增知识和内容

在MySQL5.7的配置文件中设置一个默认值,这会使得所有MySQL用户的密码过期时间都为90天,MySQL会从启动时开始计算时间。
例如在my.cnf里添加:

[mysqld]
default_password_lifetime=90

这会使得所有MySQL用户的密码过期时间都为90天,MySQL会从启动时开始计算时间。
如果要设置密码永不过期的全局策略,可以设置default_password_lifetime=0,或者在命令行设置:

mysql> SET GLOBAL default_password_lifetime = 0;
Query OK, 0 rows affected (0.00 sec)

==从MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户的过期时间==

mysql> use mysql;
mysql> alter user root@'localhost' password expire;         
Query OK, 0 rows affected (0.23 sec)
在用户未设置新密码之前不能运行任何查询语句,而且会得到如下错误消息提示:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
执行完后看到密码改动时间
mysql> alter user root@localhost identified by 'fangcang';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password_last_changed,password_expired from user; 
+-----------+-----------+-----------------------+------------------+
| user      | host      | password_last_changed | password_expired |
+-----------+-----------+-----------------------+------------------+
| root      | localhost | 2018-04-23 11:04:26   | N                |
| mysql.sys | localhost | 2017-10-27 11:22:50   | N                |
| root      | %         | 2017-10-27 14:18:02   | N                |
+-----------+-----------+-----------------------+------------------+
3 rows in set (0.00 sec)

==在MySQL 5.7.8版开始用户管理方面添加了锁定/解锁用户账户的新特性==

mysql> alter user mdba@localhost account lock;
Query OK, 0 rows affected (0.04 sec)

重新登录发现被拒绝:
[root@localhost ~]# mysql -u mdba -p
Enter password:
ERROR 3118 (HY000): Access denied for user 'mdba'@'localhost'. Account is locked.

解锁后恢复正常:

mysql> alter user mdba@localhost account unlock;
Query OK, 0 rows affected (0.03 sec)

3.网上搜索到的坑

1、以下这种方式不能解决密码过期问题
update mysql.user set authentication_string=password('123456') where user='root' and Host = '%';

2、修改password_last_changed不能解决密码过期问题。

3、mysql早前的版本user表有password字段,5.7为authentication_string。

4、不需要重启mysql服务器。

5、root@localhost和root@%不是同一个用户。

查看用户信息的sql如下

select host,user,password_last_changed from mysql.user;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白正在飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值