做数据库运维的时候,由于密码设置的比较复杂,又没能很好管理密码,经常会忘记,这个时候怎么办呢?针对这种情况,我们有下面几个解决方案。
环境介绍
操作系统:CenterOS 7.3
数据库:mysql 5.6
修改密码涉及到的相关知识
MySQL有一个mysql的内建数据库,其中有一张user表,这张表里存储着MySQL实例的账号,密码。
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | ::1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| | localhost | |
| root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+------+-----------+-------------------------------------------+
我们可以通过update语句修改user表的内容而达到修改密码的作用。
解决方法
1、启动MySQL服务跳过权限验证,登录后重置密码
利用操作系统命令关闭数据库。
[root@mysqltest ~] kill `cat /mysql/data/3306/mysql/mysqld.pid`
在配置文件中mysqld中添加如下内容。
skip-grant-tables
skip-networking
启动数据库。
[root@ligang mysqld]# systemctl start mysqld
利用SQL语句修改密码。
mysql> update mysql.user set password=password('root123456') where user='root' and host='localhost';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
利用mysqladmin命令关闭数据库。
[root@ligang mysqld]# mysqladmin -uroot -proot123456 shutdown
将 skip-grant-tables,skip-networking这两个参数从配置文件(/data/mysql/3306/my.cnf)中去掉,并重新启动数据库。
[root@ligang mysqld]# systemctl start mysqld
2、启动MySQL服务附加参数(–init-file),通过脚本重置密码
此方法与上述方法差不多,只是在启动MySQL的时候,附加上了–init-file参数,使其执行含有密码重置的脚本,达到修改密码的目的。
3、利用mysqladmin工具设置密码
没有密码,设置密码
mysqladmin -uroot password ‘密码’
有密码设置新密码
mysqladmin -uroot password ‘新密码’ -p ‘旧密码’