HCRM博客

CentOS7快速重置MySQL root密码,mysqld_safe跳过授权表方法

CentOS7 mysqldsafe跳过授权表改root密码

机器重启后,MySQL root密码死活想不起来,项目又等着上线,这种抓耳挠腮的时刻谁都可能遇到。别急着重装,CentOS7自带的老牌神器mysqldsafe就能在跳过授权表的情况下,把密码干净利索地重置掉。下面这份手记把每一步都拆到按键级别,照着敲,十分钟内准能重新拿到数据库大门钥匙。

CentOS7快速重置MySQL root密码,mysqld_safe跳过授权表方法-图1

一、先确认环境:别在错误版本上浪费时间

登录终端,输入cat /etc/centos-release,回显若包含“CentOS Linux release 7”,继续;如果是6或8,步骤略有差异,别硬套。接着执行rpm -qa | grep -i mysql-community-server,能看到包名才算安装完成;若返回为空,先yum install -y mysql-community-server装齐再往下走。

二、停库要温柔:强杀后果很严重

很多人直接pkill -9 mysqld,结果InnoDB回滚段损坏,得不偿失。正确姿势是systemctl stop mysqld,等待“Active: inactive (dead)”出现。若停不掉,再执行systemctl status mysqld看哪个子进程卡死,用kill -15 PID给点缓冲,-9留到最后关头。

三、用mysqldsafe跳过授权表:核心命令只有一行

先切换到mysql用户,避免权限膨胀:su - mysql -s /bin/bash。接着启动跳过授权表模式:

CentOS7快速重置MySQL root密码,mysqld_safe跳过授权表方法-图2

/usr/bin/mysqldsafe --skip-grant-tables --skip-networking &

看到“mysqldsafe Starting mysqld daemon with databases from /var/lib/mysql”就表示成功。这里--skip-networking的作用是禁止TCP连接,只允许本地socket,防止重置期间被外部扫到空口令。

四、无密码登录:别用旧习惯敲密码

新窗口直接mysql -u root,回车就能进。此时任何密码字段都被忽略,如果系统提示“Access denied”,八成是mysqldsafe没起来,看错误日志tail /var/log/mysqld.log,把表空间或PID冲突解决再重试。

五、刷新权限表:改密码前必做

登录后先执行FLUSH PRIVILEGES;,告诉服务器现在可以重新加载grant表。跳过这步,后续ALTER USER会报“ERROR 1290”。

CentOS7快速重置MySQL root密码,mysqld_safe跳过授权表方法-图3

六、真正改密码:三条语句任选其一

MySQL5.7与8.0字段名不同,CentOS7默认仓库装的是5.7,用下面这条最稳:

UPDATE mysql.user SET authenticationstring=PASSWORD('新密码') WHERE User='root' AND Host='localhost';

若你手痒装了8.0,则改成:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysqlnativepassword BY '新密码';

改完再FLUSH PRIVILEGES;一次,确保内存与磁盘同步。

七、重启验证:别直接生产上线

systemctl restart mysqld回到正常模式,本地执行mysql -u root -p,输入刚设定的新密码,能进说明成功。此时务必跑一条SHOW VARIABLES LIKE 'validatepassword%';,如果公司策略要求强口令,把长度、复杂度调上去,别让运维同事背锅。

八、远程连接:防火墙与授权双检查

很多开发改完密码后,Navicat依旧连不上,第一反应是“密码没生效”。其实九成是防火墙或MySQL授权表没放通。依次执行:

firewall-cmd --permanent --add-port=3306/tcp\nfirewall-cmd --reload

接着登录MySQL,执行:

GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '新密码' WITH GRANT OPTION;

FLUSH PRIVILEGES;,外网才能敲进来。

九、常见坑汇总:提前避坑省回滚

1. 日志爆满:跳过授权表期间,如果开了generallog,刷几十万条查询会把/var/log撑爆,记得先SET GLOBAL generallog='OFF';

2. SELinux拦截:重启后mysqld起不来,audit2why -a一看是SELinux拒绝,执行setsebool -P mysqlconnectany 1即可。

3. 表空间损坏:异常关机后,InnoDB可能要求恢复,用innodbforcerecovery=3临时启动,把数据导出再重建库。

4. 多实例环境:若机器跑了3307、3308多端口,mysqldsafe --defaults-file=/etc/my3307.cnf --skip-grant-tables指定配置文件,避免改错实例。

十、一键脚本:懒人也能三十秒搞定

把下面脚本保存成resetroot.sh,赋可执行权限,下次直接./reset_root.sh 新密码:

#!/bin/bash\n[ -z \

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41720.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~