解决MySQL忘记root密码
网上有很多关于忘记MySQL root密码的一些文章,里面都有写怎么去解决,但有时觉得写得太恶心,要么一字不漏的抄别人的,要么就说得不清不楚,好了,不吐槽了,以下是解决的整个过程。
首先我们要知道忘记MySQL root密码后,能否重启mysql,能重启的操作是怎么样的?不能重启的操作又会是怎么样的?
情况一:(能重启情况下)
修改my.cnf配置文件,在mysqld栏下添加skip-grant-tables选项,意思是mysqld server启动之后并不使用权限系统(privilege system),也可以理解为跳过授权表。为了安全起见,通常加上skip-networking,mysqld不侦听任何TCP/IP连接请求。
重启mysqld,然后空密码连接:
[root ~]$mysql -uroot -S /data/mysql-5.5/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.5.40-log MySQL Community Server (GPL)Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
可以看到已经成功登录了,然后修改root密码:
mysql> update mysql.user set password=password('123456') where user='root'; Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
已经成功修改密码了,但还有事情要做,就是把刚刚添加到my.cnf里的skip-grant-tables和skip-networking删除掉或者注释掉。
情况二:(不能重启mysql的情况)
如果不能重启,mysql.user 刚好有权限比较低的用户,如果没有,你请神仙来帮你吧,哈哈
1、为了测试,我自己创建一个用户,可以没什么权限
mysql> create user xuanzhi@'localhost' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
2、进到数据目录下:
[root mysql-5.5]$ pwd /data/mysql-5.5 [root mysql-5.5]$ cp mysql/user.* test/ [root mysql-5.5]$ chown mysql.mysql test/user.*
3、用权限比较小的用户登录:
[root mysql-5.5]$mysql -uxuanzhi -p123456 -S /data/mysql-5.5/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.5.40-log MySQL Community Server (GPL)Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use test Database changed mysql> update user set password=password('123123') where user='root'; Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0
4、把修改后的user.MYD和user.MYI复制到mysql目录下,记得备份之前的文件。
[root mysql-5.5]$ pwd /data/mysql-5.5 [root mysql-5.5]$ mv mysql/user.MYD mysql/user.MYD.bak [root mysql-5.5]$ mv mysql/user.MYI mysql/user.MYI.bak [root mysql-5.5]$ cp test/user.MY* mysql/ [root mysql-5.5]$ chown mysql:mysql mysql/user.*
5.查找mysql进程号,并且发送SIGHUP信号,重新加载权限表。(有时加载一次不行的时候,再加载多一次@。@)
[root mysql]$ pgrep -n mysql 23166 [root mysql]$ kill -SIGHUP 23166 [root mysql]$ /usr/local/mysql-5.5.40/bin/mysql -uroot -p123123 -S /data/mysql-5.5/mysql.sock ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) [root mysql]$ kill -SIGHUP 23166 [root mysql]$ /usr/local/mysql-5.5.40/bin/mysql -uroot -p123123 -S /data/mysql-5.5/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.5.40-log MySQL Community Server (GPL)Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
不重启的第二种方法:
1、创建新的数据目录,并给原来user相应的权限,忘记密码对应的实例它的user是mysql,所以把权限给mysql用户
[root data]$ mkdir -pv /dbdata/datadir/ mkdir: 已创建目录 "/dbdata" mkdir: 已创建目录 "/dbdata/datadir/" [root data]$ chown -R mysql:mysql /dbdata/datadir/
2、执行初始化操作:(报错了)
[root scripts]$ pwd /usr/local/mysql-5.5.40/scripts [root scripts]$ ./mysql_install_db --datadir=/dbdata/datadir/ --user=mysql2FATAL ERROR: Could not find ./bin/my_print_defaultsIf you compiled from source, you need to run 'make install' to copy the software into the correct location ready for operation.If you are using a binary release, you must either be at the top level of the extracted archive, or pass the --basedir option pointing to that location.
解决方法:
[root scripts]$ /usr/local/mysql-5.6.10/scripts/mysql_install_db --datadir=/dbdata/datadir/ --user=mysql --datadir=/dbdata/datadir/ --basedir=/usr/local/mysql-5.6.10/ Installing MySQL system tables... 141210 16:09:24 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release. OK Filling help tables... 141210 16:09:24 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release. OK
3、启动一个新的进程,这里要注意一下port,sock文件,还有pid文件,这都是新的,user还是忘记密码实例的user,而不是忘记密码对应的那个数据库实例的,这里我们不需要用到InnoDB引擎,设置默认引擎为MyISAM:
[root ~]$ /usr/local/mysql-5.6.10/bin/mysqld_safe --datadir=/dbdata/datadir --plugin-dir=/usr/local/mysql-5.6.10/lib/plugin/ --skip-innodb \> --default-storage-engine=myisam --socket=/dbdata/datadir/mysql2.sock --user=mysql --port=3305 --log-error=/dbdata/datadir/error2.log --pid-file=/data/mysql-5.6/mysql.pid &[1] 21204[root ~]$ 141210 16:56:11 mysqld_safe Logging to '/dbdata/datadir/error2.log'. 141210 16:56:11 mysqld_safe Starting mysqld daemon with databases from /dbdata/datadir
4、登录新启动的mysql实例,此时密码为空密码:
root datadir]$ /usr/local/mysql-5.6.10/bin/mysql -S /dbdata/datadir/mysql2.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.10-log Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> flush tables; Query OK, 0 rows affected (0.00 sec)
修改root密码:
mysql> select user, host, password from user where user like 'root'; +------+-----------------------+----------+ | user | host | password | +------+-----------------------+----------+ | root | localhost | | | root | localhost.localdomain | | | root | 127.0.0.1 | | | root | ::1 | | +------+-----------------------+----------+ 4 rows in set (0.02 sec)mysql> update mysql.user set password=password('654321') where user='root'; Query OK, 4 rows affected (0.03 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
5、拷备新的user表到忘记密码的实例数据库的mysql目录下
[root mysql]$ pwd /dbdata/datadir/mysql [root mysql]$ cp user.* /data/mysql-5.6/mysql/ cp:是否覆盖"/data/mysql-5.6/mysql/user.frm"? y cp:是否覆盖"/data/mysql-5.6/mysql/user.MYD"? y cp:是否覆盖"/data/mysql-5.6/mysql/user.MYI"? y [root mysql]$ chown -R mysql5.6:mysql5.6 /data/mysql-5.6/ [root mysql]$ chmod 660 /data/mysql-5.6/mysql/user.*
6、我们需要到mysqld发送一个sighup信号,MySQL响应这个信号加载授权表,刷新表,日志,线程缓存。
如果是单个MySQL实例,可以用这样的方法去重新加载
[root ~]$ kill -1 $(/sbin/pidof mysqld)
如果是多个MySQL实例在一台服务器上的话,就要注意点了,可以通过这样的方法找到pid,我旧实例的端口是3306:
[root mysql-5.6.10]$ netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 8414/mysqld tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 6430/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1144/sshd tcp 0 0 :::3310 :::* LISTEN 17151/mysqld tcp 0 0 :::22 :::* LISTEN 1144/sshd tcp 0 0 ::1:631 :::* LISTEN 1109/cupsd tcp 0 0 :::3306 :::* LISTEN 2091/mysqld [root mysql-5.6.10]$ kill -1 2091
有时kill -1一次不行,再执行一次就可以了:
[root mysql-5.6.10]$ kill -1 2091 [root mysql-5.6.10]$ /usr/local/mysql-5.6.10/bin/mysql -uroot -p654321 -S /data/mysql-5.6/mysql.sock Warning: Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) [root mysql-5.6.10]$ kill -1 2091 [root mysql-5.6.10]$ /usr/local/mysql-5.6.10/bin/mysql -uroot -p654321 -S /data/mysql-5.6/mysql.sock Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 5.6.10-log MySQL Community Server (GPL)Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
OK,已经成功登录了,如果有更多好的方法,我们可以再一起讨论下
总结:
1)第一种方法简单,但需要重启MySQL,重启会影响线上业务,一般不建议重启
2)第二种方法比较好,不用重启MySQL实例,修改密码,只修改root用户的,而且其它保持不变
3)第三种方法也不需要重启,但是新的user表里,只有root一个用户,如果之前服务器还存在别的用户及权限,这就比较麻烦了
参考资料:http://www.percona.com/blog/2014/12/10/recover-mysql-root-password-without-restarting-mysql-no-downtime/
PS:本人也是参考别人的博客做的,但我没有照搬别人的东西,太恶心了,希望大家有自己的风格。^.^
作者:陆炫志 出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。 |
转载于:https://www.cnblogs.com/xuanzhi201111/p/4138352.html
解决MySQL忘记root密码相关推荐
- mysql 忘记root_解决MySQL忘记root密码
网上有很多关于忘记MySQL root密码的一些文章,里面都有写怎么去解决,但有时觉得写得太恶心,要么一字不漏的抄别人的,要么就说得不清不楚,好了,不吐槽了,以下是解决的整个过程. 首先我们要知道忘记 ...
- win上mysql忘记root密码_MySQL数据库之windows下mysql忘记root密码的解决方法
本文主要向大家介绍了MySQL数据库之windows下mysql忘记root密码的解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 方法一: 1.在DOS窗口下输入net ...
- linux mysql root免密_Linux下MySQL忘记root密码的完美解决方法
在使用MySQL数据库时,由于某些原因长时间没有登陆MySQL,或者由于工作交接完成度不高,导致数据库root登陆密码忘记,本文给大家介绍一种当忘记MySQL root密码时的解决办法,亲测有效. 首 ...
- 查询电脑上mysql的密码忘记了怎么办_windows下mysql忘记root密码的解决方法 -电脑资料...
方法一: 1.在DOS窗口下输入net stop mysql5 或 net stop mysql 2.开一个DOS窗口,这个需要切换到mysql的bin目录, 一般在bin目录里面创建一个批处理1.b ...
- Mysql 忘记root密码的完美解决方法
一.更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-t ...
- Linux下使用MySQL——忘记root密码及修改MySQL默认编码
概述: 本博客不再对MySQL的语法进行讲解和说明,想了解或熟悉的朋友请自行百度或Google学习.本博客主要是针对MySQL除语法之外的总结,希望能够也能帮助到你. 1.CentOS6.x下MySQ ...
- 附录:MySQL忘记root密码
中小型规模网站集群架构:MySQL忘记root密码 : Ago linux运维群:93324526 前言 你忘记系统root密码的时候,你怎么解决的? 不就是single用户进行修改密码吗?这里原理是 ...
- linux mysql 忘记root密码_Linux MySQL忘记root密码解决方案
在使用MySQL数据库时,由于某些原因长时间没有登陆MySQL,或者由于工作交接完成度不高,导致数据库root登陆密码忘记,如何解决? 一.更改my.cnf配置文件 1.用命令编辑/etc/my.cn ...
- MySQL忘记root密码不重启mysqld的方法
MySQL忘记root密码不重启mysqld的方法 1.首先得有一个可以拥有修改权限的mysql数据库账号,当前的mysql实例账号(较低权限的账号,比如可以修改zabbix数据库)或者其他相同版本实 ...
最新文章
- 去除iphone图标的半弧高亮效果
- hive 解密_hive 中自定义 base64 加密 解密 UDF 函数
- 【干货】PMcaff干货课程学习精彩分享:Apple Watch 技术特性详解
- 2017 9月java答案_2017年9月计算机二级JAVA试题及答案
- 无星的RN学习之旅(四)——通信、持久化存储、iOS打包
- 压缩图片_Word快速压缩图片大小
- Angular 项目里的 tsconfig.json
- mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
- numpy 矩阵 秩_一文读懂 NumPy 及应用
- 基于Redis的分布式锁的简单实现
- CCF201609试题
- 2、Jupyter Notebook 快速入门
- php中引用的真正理解-变量引用、函数引用、对象引用
- PySpark-Recipes : I/O操作(txt, json, hdfs, csv...)
- 人工智能中的专家系统
- ClickHouse第四讲-表引擎
- 网络社区划分的算法分类
- 用Java开发手机Andriod系统Apk软件
- 在一个局域网中,共享的项目别人访问不了,解决方法
- 用计算机计算数学公式,Formula Calculator公式计算器
热门文章
- Pro*c使用滚动游标进行更新或删除游标行
- [react] React中getInitialState方法的作用是什么
- 前端学习(3139):react-hello-react之生命周期组件挂载过程
- [html] 你有使用过output标签吗?说说它的用途有哪些?
- [vue] 怎么配置使vue2.0+支持TypeScript写法?
- [css] 有用过Flex吗?简要说下你对它的了解
- 工作328:uni-两个页面对象传递
- 前端学习(2406):反馈
- 前端学习(2037)vue之电商管理系统电商系统之优化
- 前端学习(1886)vue之电商管理系统电商系统之首页路由的重定向主页侧边栏路由链接的改造