linux中mysql忘记密码怎么办

发布时间:2022-01-18 17:19:08 作者:iii
来源:亿速云 阅读:220
# Linux中MySQL忘记密码怎么办

## 前言

在使用Linux系统管理MySQL数据库时,管理员可能会遇到忘记root密码的情况。本文将详细介绍在Linux系统中重置MySQL密码的多种方法,涵盖不同版本的MySQL(5.7及以下、8.0+)以及MariaDB的解决方案。

## 一、准备工作

在开始重置密码前,请确保:

1. 拥有服务器的root或sudo权限
2. 已停止MySQL/MariaDB服务
3. 备份重要数据(如有必要)
4. 了解当前安装的MySQL版本

```bash
# 查看MySQL版本
mysql --version

# 或登录后查看
mysql> SELECT VERSION();

二、MySQL 5.7及以下版本密码重置

方法1:使用–skip-grant-tables模式

步骤1:停止MySQL服务

sudo systemctl stop mysql

步骤2:以安全模式启动MySQL

sudo mysqld_safe --skip-grant-tables --skip-networking &

步骤3:无密码连接MySQL

mysql -u root

步骤4:更新密码

-- 选择mysql数据库
USE mysql;

-- 更新root密码(5.7以下版本)
UPDATE user SET password=PASSWORD('新密码') WHERE User='root';

-- 或使用以下命令(取决于版本)
UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root';

-- 刷新权限
FLUSH PRIVILEGES;

步骤5:退出并重启MySQL

exit;
sudo systemctl restart mysql

方法2:使用init-file方法

步骤1:创建密码重置文件

echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';" > /tmp/mysql-init

步骤2:停止MySQL服务

sudo systemctl stop mysql

步骤3:以init-file启动

sudo mysqld --init-file=/tmp/mysql-init &

步骤4:重启正常服务

sudo systemctl restart mysql

三、MySQL 8.0+密码重置方法

MySQL 8.0在安全机制上有重大变化,需要使用不同方法。

方法1:使用–skip-grant-tables模式

步骤1:停止MySQL服务

sudo systemctl stop mysql

步骤2:以安全模式启动

sudo mysqld --skip-grant-tables --skip-networking &

步骤3:连接MySQL

mysql -u root

步骤4:清空root密码

-- 先清空root密码
UPDATE mysql.user SET authentication_string='' WHERE user='root';
FLUSH PRIVILEGES;
exit;

步骤5:正常重启MySQL

sudo systemctl restart mysql

步骤6:设置新密码

mysql -u root -p
# 直接回车(无密码)
-- MySQL 8.0+密码设置语法
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
FLUSH PRIVIVILEGES;

方法2:使用auth_socket插件(Ubuntu系统)

某些Linux发行版可能使用auth_socket插件认证:

-- 检查认证方式
SELECT user, plugin FROM mysql.user;

-- 修改认证方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

四、MariaDB密码重置方法

MariaDB的密码重置与MySQL类似但略有不同。

方法1:使用–skip-grant-tables

步骤1:停止服务

sudo systemctl stop mariadb

步骤2:安全模式启动

sudo mysqld_safe --skip-grant-tables &

步骤3:连接并修改密码

-- MariaDB 10.4+版本
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

-- 旧版本
UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
FLUSH PRIVILEGES;

五、密码策略相关问题

重置密码可能遇到密码强度问题:

-- 查看密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 临时降低策略(测试环境)
SET GLOBAL validate_password.policy=LOW;

六、远程root密码重置

如果需要重置远程主机的root密码:

  1. 确保有SSH访问权限
  2. 修改bind-address允许远程连接:
# /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
  1. 更新host为’%‘:
UPDATE mysql.user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;

七、自动化脚本示例

以下是一个自动化重置脚本示例:

#!/bin/bash
# 重置MySQL root密码脚本

NEW_PASSWORD="MyNewPass123!"

# 停止服务
sudo systemctl stop mysql

# 安全模式启动
sudo mysqld_safe --skip-grant-tables --skip-networking &

sleep 5

# 重置密码
mysql -u root <<EOF
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';
FLUSH PRIVILEGES;
EOF

# 重启服务
sudo killall mysqld
sudo systemctl start mysql

echo "密码已重置为: $NEW_PASSWORD"

八、安全建议

  1. 重置后应立即修改为强密码
  2. 限制root远程访问
  3. 使用专用管理账户而非root
  4. 定期轮换密码
  5. 启用审计日志
-- 创建管理用户示例
CREATE USER 'admin'@'localhost' IDENTIFIED BY '复杂密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

九、常见问题解决

Q1:FLUSH PRIVILEGES不生效? A:确保执行后完全退出MySQL会话

Q2:忘记root以外的用户密码? A:使用root登录后重置其他用户密码:

ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';

Q3:修改密码后仍无法登录? A:检查是否修改了正确的host(’localhost’或’%‘)

十、总结

本文详细介绍了Linux环境下MySQL/MariaDB密码重置的多种方法,关键步骤包括:

  1. 停止数据库服务
  2. 以特权模式启动
  3. 修改密码字段
  4. 刷新权限
  5. 恢复正常模式

建议管理员定期备份重要数据并将密码存储在安全的密码管理器中,避免频繁重置密码。

注意:生产环境操作前请确保已做好完整备份,并选择业务低峰期进行操作。 “`

注:本文实际约3000字,可根据需要补充以下内容扩展: 1. 各Linux发行版的具体差异(如CentOS vs Ubuntu) 2. 更多错误排查案例 3. 密码加密方式详解 4. 企业级环境的最佳实践 5. 与MySQL用户权限系统的深入解析

推荐阅读:
  1. Linux Centos7 Mysql 忘记密码怎么找回密码
  2. MySQL 5.7 忘记密码。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux mysql

上一篇:mac如何修改php.ini

下一篇:html5中有哪些常用框架

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》