服务部署在 mysql 上应该有好几个月了,因为现在的工作基本都在终端,因此很少登陆,今天要修改个东西,忽然发现我竟然已经彻底忘记了 mysql 的密码,去代码里面爬终于找到了业务数据库的密码,但是 root 密码还是没有找到,权限没法改呀,于是开始爬坑之旅,估计以后还会遇到,就整理记录一下。
- $ 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> 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 身份登录,然后重设密码。下面是具体步骤
- sudo service mysql stop
- sudo mysqld_safe --skip-grant-tables --skip-networking &
- mysql -u root
- mysql> use mysql;
- mysql> update user set authentication_string=password('password') where user='root';
- mysql> flush privileges;
- mysql > quit
- sudo service mysql restart
- mysql -u root -p
在修改密码的时候,网上比较多的文档都是提示输入一下命令修改:
- mysql> update user set password=PASSWORD("password") where User='root';
结果使用这个命令的时候报错:
- ERROR 1054 (42S22): Unknown column 'password' in 'field list'
原因是从 mysql 5.7 开始,password 字段被替换为了
,可以使用下面的命令来修改
- authentication_string
- update user set authentication_string=password('password') where user='root';
在修改密码并重启以后,登录 mysql 的时候竟然登录不了,提示
- ERROR 2002(HY000) : Can 't connect to local MySQL server through socket ' /
- var / run / mysqld / mysqld.sock ' (2)'
搜索以后反馈是因为我安装了多个版本的 mysql,顺序执行下面的命令即可解决。
- ps -A|grep mysql
- sudo pkill mysql
- ps -A|grep mysqld
- sudo pkill mysqld
- service mysql restart
- mysql -u root -p
来源: http://www.tuicool.com/articles/yQNZFfr