前言
在服务部署在mysql上应该有好几个月了,因为现在的工作基本都在终端,因此很少登陆,今天要修改个东西,忽然发现我竟然已经彻底忘记了mysql的密码,去代码里面爬终于找到了业务数据库的密码,但是root密码还是没有找到,权限没法改呀,于是开始爬坑之旅,估计以后还会遇到,就整理记录一下。需要的朋友们一起来看看吧。
系统参数
服务器
1
2
3
4
5
6
7
8
|
$ cat /proc/version
Linux version 4.8.3-x86_64-linode76 (maker@build) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 SMP Thu Oct 20 19:05:39 EDT 2016
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
|
mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mysql> show variables like "%version%" ;
+-------------------------+-------------------------+
| Variable_name | Value |
+-------------------------+-------------------------+
| innodb_version | 5.7.16 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1 |
| version | 5.7.16-0ubuntu0.16.04.1 |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+-------------------------+
|
解决方案
以安全模式启动mysql,可以直接以root身份登录,然后重设密码。下面是具体步骤
停掉在运行的MySQL服务:
1
|
sudo service mysql stop
|
以安全模式启动mysql:
1
|
sudo mysqld_safe --skip-grant-tables --skip-networking &
|
直接用root登录,无需密码:
1
|
mysql -u root
|
重设密码:
1
2
3
|
mysql> use mysql;
mysql> update user set authentication_string=password( 'password' ) where user= 'root' ;
mysql> flush privileges;
|
退出mysql
1
|
mysql > quit
|
重启mysql
1
|
sudo service mysql restart
|
密码登录:
1
|
mysql -u root -p
|
异常处理
修改密码报错,提示ERROR 1054 (42S22)
在修改密码的时候,网上比较多的文档都是提示输入一下命令修改:
1
|
mysql> update user set password=PASSWORD( "password" ) where User= 'root' ;
|
结果使用这个命令的时候报错:
1
|
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
|
原因是从mysql 5.7开始,password字段被替换为了authentication_string,可以使用下面的命令来修改
1
|
update user set authentication_string=password( 'password' ) where user= 'root' ;
|
修改密码后登录mysql失败,提示ERROR 2002 (HY000)
在修改密码并重启以后,登录mysql的时候竟然登录不了,提示
1
|
ERROR 2002 (HY000): Can 't connect to local MySQL server through socket ' /var/run/mysqld/mysqld .sock' (2)
|
搜索以后反馈是因为我安装了多个版本的mysql,顺序执行下面的命令即可解决。
查看运行的mysql
1
|
ps -A| grep mysql
|
kill运行的mysql
1
|
sudo pkill mysql
|
查看运行的mysqld
1
|
ps -A| grep mysqld
|
kill运行的mysqld
1
|
sudo pkill mysqld
|
重启mysql
1
|
service mysql restart
|
登录mysql
1
|
mysql -u root -p
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://blog.bihe0832.com/mysql-modify-root.html