Linux 下修改mysql的root密码

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